SpringBoot使用Spring Data Elasticsearch Repositories查询Elasticsearch数据

1.在SpringBoot中添加jar包

	
            org.springframework.boot
            spring-boot-starter-data-elasticsearch
        
        
            org.springframework.data
            spring-data-elasticsearch
        

2.继承ElasticsearchRepository

@Repository
public interface EsDao extends ElasticsearchRepository {

}

3.分页查询语句示例

	public Page selectAll(int pageSize,int pageNumber,Logs logs) {
		NativeSearchQueryBuilder nativeSearch = new NativeSearchQueryBuilder();
		
		//创建Java查询 Api
		BoolQueryBuilder builder = QueryBuilders.boolQuery();
		//创建filter,使用filter将所有条件串联起来
		List filter = builder.filter();
		
		if(logs != null && !StringUtils.isEmpty(logs.getAppname())) {
			//获取服务名称
			/**
			 * 注:matchQuery:精确匹配
			 */
			filter.add(QueryBuilders.matchQuery("appname", logs.getAppname()));
		}
		
		if(logs != null && !StringUtils.isEmpty(logs.getCreateTime())) {
			//获取日期时间
			String time = logs.getCreateTime();
			String startTime = time.split(" - ")[0];
			String endTime = time.split(" - ")[1];
			/**
			 * 注:rangeQuery:范围匹配
			 */
			filter.add(QueryBuilders.rangeQuery("@timestamp").gte(startTime).lte(endTime));
		}
		
		if(logs != null && !StringUtils.isEmpty(logs.getLevel())) {
			String [] level = logs.getLevel().split(",");
			List levels = Arrays.asList(level);
			/**
			 * 注:termsQuery:第一个参数是字段名称,第二个参数是匹配的参数,一个字段匹配多个值(相当于或),字段后必须加keyword不然查不到数据
			 */
			filter.add(QueryBuilders.termsQuery("level.keyword", levels));
		}
		
		/**
		 * 注:将查询条件放入nativeSearch中
		 */
		nativeSearch.withQuery(builder);
		
		--pageNumber;//SpringDataJpa是从0开始的,这个很奇怪,搞了我半天
		
		/**
		 * 注:termsQuery:字段排序
		 */
		nativeSearch.withSort(new FieldSortBuilder("@timestamp").order(SortOrder.DESC));
		/**
		 * 注:termsQuery:分页
		 */
		nativeSearch.withPageable(PageRequest.of(pageNumber, pageSize));
				
		/**
		 * 注:termsQuery:查询
		 */        
		Page search = this.esDao.search(nativeSearch.build());
		
		return search;
	}

网上好多只有API,没有具体的拼接方案,java查询Elasticsearch的方式有4种,这个是其中一种,如果有机会把其他几种也做个案例,如果有不明白的欢迎大家一起讨论!

你可能感兴趣的:(ELK)