es6进行查询操作等(包括springboot写法)

53 篇文章 0 订阅
18 篇文章 1 订阅

首先,不建议java使用termQuery操作,推荐

matchQuery 和 matchPhraseQuery
@Repository
public interface EsAlSubjectEnterLogDao extends ElasticsearchRepository<AlSubjectEnterLogDocument, String> {
	List<AlSubjectEnterLogDocument> findBySessionId(String sessionId);
}

1.新增操作

继承 ElasticsearchRepository 

AlSubjectEnterLogDocument alSubjectEnterLogDocument = new AlSubjectEnterLogDocument();
esAlSubjectEnterLogService.save(alSubjectEnterLogDocument);

2.删除操作

同上

esAlSubjectEnterLogDao.deleteById(id);

3.查询操作

一:通过id查询

Optional<AlSubjectEnterLogDocument> opt = esAlSubjectEnterLogDao.findById(id);
		AlSubjectEnterLogDocument alSubjectEnterLogDocument = opt.get();

二:通过某个值查询

public Page<AlSubjectEnterLogDocument> findBySubjectCode(String subjectCode) {
        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
//        queryBuilder.must(QueryBuilders.matchQuery("subjectCode",subjectCode));
        queryBuilder.must(QueryBuilders.wildcardQuery("subjectCode",subjectCode));



        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withIndices(AlSubjectEnterLogDocument.INDEX_NAME)
                .withTypes(AlSubjectEnterLogDocument.TYPE)
                .withQuery(queryBuilder)
                .build();
        Page<AlSubjectEnterLogDocument> alSubjectEnterLogDocumentList = esAlSubjectEnterLogDao.search(searchQuery);
        return alSubjectEnterLogDocumentList;
    }

三:计数查询

public Long countField(String field,String value) {
		NativeSearchQueryBuilder searchQuery=new NativeSearchQueryBuilder();
		
		BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
		queryBuilder.must(QueryBuilders.termQuery(field,value.toLowerCase()));

// AlSubjectEnterLogDocument.INDEX_NAME	是index
// AlSubjectEnterLogDocument.TYPE是type如doc

searchQuery.withIndices(AlSubjectEnterLogDocument.INDEX_NAME).withTypes(AlSubjectEnterLogDocument.TYPE).withQuery(queryBuilder);
		
		Long count=elasticsearchTemplate.count(searchQuery.build());
		
		return count;
	}

四:复杂分页查询

public Map<String, Object> dateUserAll() {
	    Map<String,Object> map = new HashMap<>();


        NativeSearchQueryBuilder searchQuery=new NativeSearchQueryBuilder();
        // 查询条件,必须已经登录
        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
        queryBuilder.must(QueryBuilders.termQuery("hasLogin",true));

        // 查询7天的数据
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
        Calendar calendar = Calendar.getInstance();
        // 现在 和 7 天前的时间
        String nowTime = simpleDateFormat.format(calendar.getTime());
        String sevTime = new String();
        calendar.add(Calendar.DATE, -7);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        sevTime = simpleDateFormat.format(calendar.getTime());

        //日期限制
        QueryBuilder rangeBuilder = QueryBuilders
                .rangeQuery("@timestamp")
                .format("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
                .gte(sevTime)
                .lte(nowTime);

        queryBuilder.filter(rangeBuilder);

        Pageable pageable = new Pageable() {
            @Override
            public int getPageNumber() {
                return 0;
            }

            @Override
            public int getPageSize() {
                return 10000;
            }

            @Override
            public long getOffset() {
                return 0;
            }

            @Override
            public Sort getSort() {
                return null;
            }

            @Override
            public Pageable next() {
                return null;
            }

            @Override
            public Pageable previousOrFirst() {
                return null;
            }

            @Override
            public Pageable first() {
                return null;
            }

            @Override
            public boolean hasPrevious() {
                return false;
            }
        };

        searchQuery.withIndices("alengin*")
                .withTypes("doc")
                .withQuery(queryBuilder)
                // 分页查询
                .withPageable(pageable);

        System.out.println(searchQuery.build().getQuery());
        List list = elasticsearchTemplate.queryForList(searchQuery.build(), JSONObject.class);
        System.out.println(list);

		return map;
	}

五:先根据时间group,再根据不同的登陆人group

Map<String,Object> map = new HashMap<>();
        NativeSearchQueryBuilder searchQuery=new NativeSearchQueryBuilder();

        // 查询条件,必须已经登录
        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
        queryBuilder.must(QueryBuilders.termQuery("hasLogin",true));

        // 查询7天的数据
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
        Calendar calendar = Calendar.getInstance();
        // 现在 和 7 天前的时间
        String nowTime = simpleDateFormat.format(calendar.getTime());
        String sevTime = new String();
        calendar.add(Calendar.DATE, -6);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        sevTime = simpleDateFormat.format(calendar.getTime());

        //日期限制
        QueryBuilder rangeBuilder = QueryBuilders
                .rangeQuery("@timestamp")
                .format("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
                .gte(sevTime)
                .lte(nowTime);

        queryBuilder.filter(rangeBuilder);

        // 日期直方图
        DateHistogramAggregationBuilder db=AggregationBuilders.dateHistogram("date").field("@timestamp").dateHistogramInterval(DateHistogramInterval.DAY).format("yyyy-MM-dd");
        // 根据userId分组
        db.subAggregation(AggregationBuilders.terms("userId").field("userId.keyword"));

        // 通过userId分组
        /*
            TermsAggregationBuilder termsAggregation = AggregationBuilders.terms("group_userId").field("userId.keyword").order(BucketOrder.count(true));
            termsAggregation.subAggregation(AggregationBuilders.dateHistogram("date").field("@timestamp").dateHistogramInterval(DateHistogramInterval.DAY).format("yyyy-MM-dd"));
        */



        // 查询条件
        searchQuery.withIndices("alengin*")
                .withTypes("doc")
                .withQuery(queryBuilder)
                .addAggregation(db);


        Aggregations aggregations=elasticsearchTemplate.query(searchQuery.build(), new ResultsExtractor<Aggregations>() {
            @Override
            public Aggregations extract(SearchResponse response) {
                return response.getAggregations();
            }});

        Histogram term =aggregations.get("date");

        if(term.getBuckets().size()>0){
            for (org.elasticsearch.search.aggregations.bucket.histogram.Histogram.Bucket bk : term.getBuckets()) {
                JSONArray jsonArray = new JSONArray();
                jsonArray = JSON.parseArray(bk.getAggregations().asList().toString());
                JSONObject j = (JSONObject) jsonArray.get(0);
                JSONArray buckets = (JSONArray) ((JSONObject) j.get("userId")).get("buckets");

                map.put(bk.getKeyAsString(), buckets.size());

                /*long count = bk.getDocCount();
                map.put(bk.getKeyAsString(), count);*/
            }
        }

        /*Terms term2 =aggregations.get("userId");

        if(term2.getBuckets().size()>0){
            for (Bucket bk : term2.getBuckets()) {
                long count = bk.getDocCount();
                map.put(bk.getKeyAsString(), count);
            }
        }*/

综合:

String userId = (String) jsonObject.get("userId");
       
        Integer pageNum = 0;
        Integer pageSize = 0;
        if(StringUtils.isBlank(jsonObject.getString("pageNum"))){
            pageNum = 0;
        }else{
            pageNum = Integer.valueOf(jsonObject.getString("pageNum"));
        }
        if(StringUtils.isBlank(jsonObject.getString("pageSize"))){
            pageSize = 20;
        }else{
            pageSize = Integer.valueOf(jsonObject.getString("pageSize"));
        }

        // 是否订正
        String mistakeStatus = jsonObject.getString("mistakeStatus");
        if(StringUtils.isBlank(mistakeStatus)){
            mistakeStatus = "0";
        }
        // 学科
        String subjectCode = jsonObject.getString("subjectCode");



        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
//        queryBuilder.must(QueryBuilders.matchQuery("subjectCode",subjectCode));
        queryBuilder.must(QueryBuilders.wildcardQuery("creUser",userId))
                    .must(QueryBuilders.wildcardQuery("mistakeStatus",mistakeStatus))
                    .must(QueryBuilders.wildcardQuery("subjectCode",subjectCode));

        // 时间要求
        //日期限制
        String fromTime =  jsonObject.getString("fromTime");
        String toTime = jsonObject.getString("toTime");
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
        if(StringUtils.isBlank(fromTime) ){
            // 7天前
            Calendar calendar = Calendar.getInstance();
            // 现在 和 7 天前的时间
            calendar.add(Calendar.DATE, -7);
            calendar.set(Calendar.HOUR_OF_DAY, 0);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND, 0);
            calendar.set(Calendar.MILLISECOND, 0);
//            fromTime = simpleDateFormat.format(calendar.getTime());
            fromTime  = String.valueOf(calendar.getTime().getTime());
        }
        if(StringUtils.isBlank(toTime) ){
            toTime = String.valueOf(new Date().getTime());
        }

        // 范围查询
        QueryBuilder rangeBuilder = QueryBuilders
                .rangeQuery("creTime")
//                .format("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
                // 大于等于
                .gte(fromTime)
                // 小于等于
                .lte(toTime);

        queryBuilder.filter(rangeBuilder);


        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withIndices(AlMistakeDocument.INDEX_NAME)
                .withTypes(AlMistakeDocument.TYPE)
                .withQuery(queryBuilder)
                // 分页
                .withPageable(new PageRequest(pageNum,pageSize))
                // 排序,如果creTime为空就默认date
                .withSort(SortBuilders.fieldSort("creTime").unmappedType("date").order(SortOrder.DESC))
                .build();
        Page<AlMistakeDocument> alMistakeDocumentPage = esAlMistakeDao.search(searchQuery);

六、获取某一个

String mistakeId = jsonObject.getString("mistakeId");

        AlMistakeDocument alMistakeDocument = null;
        try {
            alMistakeDocument = esAlMistakeDao.findById(mistakeId).get();
        } catch (Exception e) {
            e.printStackTrace();
        }

七、更新保存

String mistakeId = jsonObject.getString("mistakeId");

        AlMistakeDocument alMistakeDocument = null;
        try {
            alMistakeDocument = esAlMistakeDao.findById(mistakeId).get();
        } catch (Exception e) {
            e.printStackTrace();
        }

esAlMistakeDao.save(alMistakeDocument);

 

Spring boot --es 新版本分页查询:

1.(推荐)

// 构造条件
		
		BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
		if(StringUtils.isNotBlank(jsonObject.getString("subjectCode"))){
			// 学科
            queryBuilder.must(QueryBuilders.matchPhraseQuery("subjectCode",jsonObject.getString("subjectCode")));
		}
		if(StringUtils.isNotBlank(jsonObject.getString("gradeLevel"))){
			//  年级
			queryBuilder.must(QueryBuilders.matchPhraseQuery("gradeLevel",jsonObject.getString("gradeLevel")));
		}
		if(StringUtils.isNotBlank(jsonObject.getString("schoolName"))){
			//  学校名
			queryBuilder.must(QueryBuilders.matchQuery("schoolName",jsonObject.getString("schoolName")));
		}
		if(StringUtils.isNotBlank(jsonObject.getString("taskStatus"))){
			//  任务状态
			String taskStatus = jsonObject.getString("taskStatus");
			BoolQueryBuilder taskStatusBuilder = QueryBuilders.boolQuery();
			if("0".equals(taskStatus)){
				// 任务开始
				taskStatusBuilder.must(QueryBuilders.matchQuery("taskStatus","BEGIN"));
			}
			if ("1".equals(taskStatus)){
				// 任务完成--包含标准完成和完成
				BoolQueryBuilder taskStatusShouldBuilder = QueryBuilders.boolQuery();
				taskStatusShouldBuilder
						.should(QueryBuilders.matchQuery("taskStatus","COMPLETE"))
						.should(QueryBuilders.matchQuery("taskStatus","STANDARD_COMPLETION"));
				taskStatusBuilder.must(taskStatusShouldBuilder);
			}
			queryBuilder.must(taskStatusBuilder);
		}
		if(StringUtils.isNotBlank(jsonObject.getString("studentName"))){
			//  学生名
			queryBuilder.must(QueryBuilders.matchQuery("studentName",jsonObject.getString("studentName")));
		}
		if(StringUtils.isNotBlank(jsonObject.getString("province"))){
			//  省
			queryBuilder.must(QueryBuilders.matchQuery("province",jsonObject.getString("province")));
		}
		if(StringUtils.isNotBlank(jsonObject.getString("city"))){
			//  市
			queryBuilder.must(QueryBuilders.matchQuery("city",jsonObject.getString("city")));
		}
		if(StringUtils.isNotBlank(jsonObject.getString("county"))){
			//  县
			queryBuilder.must(QueryBuilders.matchQuery("county",jsonObject.getString("county")));
		}
		if(StringUtils.isNotBlank(jsonObject.getString("queryStartTime"))){
			//  起始时间
			//日期限制
			QueryBuilder rangeBuilder = QueryBuilders
					.rangeQuery("creTime")
					.format("yyyy-MM-dd")
					.gte(jsonObject.getString("queryStartTime"));
			queryBuilder.filter(rangeBuilder);
		}
		if(StringUtils.isNotBlank(jsonObject.getString("queryEndTime"))){
			//  起始时间
			//日期限制
			QueryBuilder rangeBuilder = QueryBuilders
					.rangeQuery("creTime")
					.format("yyyy-MM-dd")
					.lte(jsonObject.getString("queryEndTime"));
			queryBuilder.filter(rangeBuilder);
		}

		Integer pageNum = 0;
		Integer pageSize = 0;
		if(StringUtils.isBlank(jsonObject.getString("pageNo"))){
			pageNum = 0;
		}else{
			pageNum = Integer.valueOf(jsonObject.getString("pageNo"));
		}
		if(StringUtils.isBlank(jsonObject.getString("pageSize"))){
			pageSize = 20;
		}else{
			pageSize = Integer.valueOf(jsonObject.getString("pageSize"));
		}


		SearchQuery searchQuery = new NativeSearchQueryBuilder()
				.withIndices(StudentTaskStatusDocument.INDEX_NAME)
				.withTypes(StudentTaskStatusDocument.TYPE)
				.withQuery(queryBuilder)
				// 分页查询
				.withPageable(PageRequest.of(pageNum,pageSize))
				// 排序
				.withSort(SortBuilders.fieldSort("creTime").order(SortOrder.DESC))
				.build();

		

		
		System.out.println("query:" + searchQuery.getQuery().toString());

		Page<StudentTaskStatusDocument> searchResponse = studentTaskStatusDao.search(searchQuery);
		List<StudentTaskStatusDocument> l = searchResponse.getContent();

 

2.



		// 构造条件
		NativeSearchQueryBuilder searchQuery=new NativeSearchQueryBuilder();
		BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
		if(StringUtils.isNotBlank(jsonObject.getString("subjectCode"))){
			// 学科
            queryBuilder.must(QueryBuilders.termQuery("subjectCode",jsonObject.getString("subjectCode")));
		}
		if(StringUtils.isNotBlank(jsonObject.getString("gradeLevel"))){
			//  年级
			queryBuilder.must(QueryBuilders.termQuery("gradeLevel",jsonObject.getString("gradeLevel")));
		}
		if(StringUtils.isNotBlank(jsonObject.getString("schoolName"))){
			//  学校名
			queryBuilder.must(QueryBuilders.termQuery("schoolName",jsonObject.getString("schoolName")));
		}
		if(StringUtils.isNotBlank(jsonObject.getString("taskStatus"))){
			//  任务状态
			String taskStatus = jsonObject.getString("taskStatus");
			BoolQueryBuilder taskStatusBuilder = QueryBuilders.boolQuery();
			if("0".equals(taskStatus)){
				// 任务开始
				taskStatusBuilder.must(QueryBuilders.termQuery("taskStatus","BEGIN"));
			}
			if ("1".equals(taskStatus)){
				// 任务完成--包含标准完成和完成
				BoolQueryBuilder taskStatusShouldBuilder = QueryBuilders.boolQuery();
				taskStatusShouldBuilder
						.should(QueryBuilders.termQuery("taskStatus","COMPLETE"))
						.should(QueryBuilders.termQuery("taskStatus","STANDARD_COMPLETION"));
				taskStatusBuilder.must(taskStatusShouldBuilder);
			}
			queryBuilder.must(taskStatusBuilder);
		}
		if(StringUtils.isNotBlank(jsonObject.getString("studentName"))){
			//  学生名
			queryBuilder.must(QueryBuilders.termQuery("studentName",jsonObject.getString("studentName")));
		}
		if(StringUtils.isNotBlank(jsonObject.getString("province"))){
			//  省
			queryBuilder.must(QueryBuilders.termQuery("province",jsonObject.getString("province")));
		}
		if(StringUtils.isNotBlank(jsonObject.getString("city"))){
			//  市
			queryBuilder.must(QueryBuilders.termQuery("city",jsonObject.getString("city")));
		}
		if(StringUtils.isNotBlank(jsonObject.getString("county"))){
			//  县
			queryBuilder.must(QueryBuilders.termQuery("county",jsonObject.getString("county")));
		}
		if(StringUtils.isNotBlank(jsonObject.getString("queryStartTime"))){
			//  起始时间
			//日期限制
			QueryBuilder rangeBuilder = QueryBuilders
					.rangeQuery("creTime")
					.format("yyyy-MM-dd")
					.gte(jsonObject.getString("queryStartTime"));
			queryBuilder.filter(rangeBuilder);
		}
		if(StringUtils.isNotBlank(jsonObject.getString("queryEndTime"))){
			//  起始时间
			//日期限制
			QueryBuilder rangeBuilder = QueryBuilders
					.rangeQuery("creTime")
					.format("yyyy-MM-dd")
					.lte(jsonObject.getString("queryEndTime"));
			queryBuilder.filter(rangeBuilder);
		}

		Integer pageNum = 0;
		Integer pageSize = 0;
		if(StringUtils.isBlank(jsonObject.getString("pageNo"))){
			pageNum = 0;
		}else{
			pageNum = Integer.valueOf(jsonObject.getString("pageNo"));
		}
		if(StringUtils.isBlank(jsonObject.getString("pageSize"))){
			pageSize = 20;
		}else{
			pageSize = Integer.valueOf(jsonObject.getString("pageSize"));
		}


		/*SearchQuery searchQuery = new NativeSearchQueryBuilder()
				.withIndices(StudentTaskStatusDocument.INDEX_NAME)
				.withTypes(StudentTaskStatusDocument.TYPE)
				.withQuery(queryBuilder)
				// 分页查询
				.withPageable(PageRequest.of(pageNum,pageSize))
				// 排序
				.withSort(SortBuilders.fieldSort("creTime").order(SortOrder.DESC))
				.build();*/

		searchQuery.withIndices(StudentTaskStatusDocument.INDEX_NAME)
				.withTypes(StudentTaskStatusDocument.TYPE)
				.withQuery(queryBuilder)
				// 分页查询
				.withPageable(PageRequest.of(pageNum,pageSize))
				// 排序
				.withSort(SortBuilders.fieldSort("creTime").order(SortOrder.DESC))
				.build();

		//System.out.println("filter:" + searchQuery.build().getFilter().toString());
		System.out.println("query:" + searchQuery.build().getQuery().toString());

		/*Page<StudentTaskStatusDocument> searchResponse = studentTaskStatusDao.search(searchQuery);
		List<StudentTaskStatusDocument> l = searchResponse.getContent();*/

		//自定义查询结果封装
		AggregatedPage<StudentTaskStatusDocument> page = elasticsearchTemplate.queryForPage(searchQuery.build(), StudentTaskStatusDocument.class,
				new SearchResultMapper() {

					@Override
					public <T> AggregatedPage<T> mapResults(SearchResponse response, Class<T> clazz,
															Pageable pageable) {
						List<T> chunk = new ArrayList<T>();

						for (SearchHit searchHit : response.getHits().getHits()) {
							Map<String, Object> smap = searchHit.getSourceAsMap();
							Map<String, HighlightField> hmap = searchHit.getHighlightFields();
							chunk.add((T) smap);
						}

						AggregatedPage<T> result=new AggregatedPageImpl<T>(chunk,pageable,response.getHits().getTotalHits());

						return result;
					}

					@Override
					public <T> T mapSearchHit(SearchHit searchHit, Class<T> type) {
						return null;
					}
				});


		

3.查询每个人最后一条数据,5分钟内

// 默认五分钟
        Integer showTime = 5;

        NativeSearchQueryBuilder nativeSearchQueryBuilder=new NativeSearchQueryBuilder();
        // 查询条件,必须已经登录
        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
        queryBuilder.must(QueryBuilders.termQuery("hasLogin",true));
        //日期限制

        // 显示30分钟内的数据
        // 查询7天的数据
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
        Calendar calendar = Calendar.getInstance();
        // 现在 和 7 天前的时间
        String nowTime = simpleDateFormat.format(calendar.getTime());
        String sevTime = new String();
        calendar.add(Calendar.MINUTE, showTime * -1);
        sevTime = simpleDateFormat.format(calendar.getTime());
//        sevTime = DateFormater.changeZoneE0(calendar.getTime(),DateFormater.DATE_STYLE_UTC);


        // 分组条件:
        // {"from":0,"size":0,"query":{"bool":{"must":[{"term":{"hasLogin":true}}],"filter":[{"range":{"@timestamp":{"from":"2020-05-18T03:10:28.430Z","to":null,"include_lower":true,"include_upper":true,"format":"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'","boost":1}}}],"adjust_pure_negative":true,"boost":1}},"aggs":{"data":{"terms":{"field":"userId.keyword","size":10000},"aggs":{"top_page":{"top_hits":{"size":1,"sort":[{"@timestamp":{"order":"desc"}}],"_source":{"includes":["path","userId","realName","publicIp","sourceFrom","roleCodes","schoolName","@timestamp"]}}}}}},"version":true}
        TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("data").field("userId.keyword");
        termsAggregationBuilder.subAggregation(AggregationBuilders.topHits("top_page").size(1).sort("@timestamp", SortOrder.DESC).fetchSource(true));


        QueryBuilder rangeBuilder = QueryBuilders
                .rangeQuery("@timestamp")
                .format("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
                .gte(sevTime);

        queryBuilder.filter(rangeBuilder);


        // 查询条件
        Pageable pageable = PageRequest.of(1,1);
        SearchQuery searchQuery = nativeSearchQueryBuilder.withIndices("self*")
                .withTypes("doc").withPageable(pageable)
                .withQuery(queryBuilder).addAggregation(termsAggregationBuilder).build();
        System.out.println(searchQuery.getQuery().toString());

        //Page<Map> page = elasticsearchTemplate.queryForPage(searchQuery,Map.class);
        Aggregations aggregations=elasticsearchTemplate.query(searchQuery, new ResultsExtractor<Aggregations>() {
            @Override
            public Aggregations extract(SearchResponse response) {
                return response.getAggregations();
            }});

        StringTerms term =aggregations.get("data");

        JSONArray array = new JSONArray();
        if(term.getBuckets().size()>0) {
            for (StringTerms.Bucket bk : term.getBuckets()) {
                TopHits topHits =  bk.getAggregations().get("top_page");
                Map<String,Object> map = topHits.getHits().getHits()[0].getSourceAsMap();
                JSONObject j = (JSONObject) JSONObject.toJSON(map);
                // 处理下最后登录的时间
                j.put("lastTimeStr", DateFormater.changeZoneE8(j.getString("@timestamp").replace("T"," ").replace("Z",""),DateFormater.DATE_STYLE9));
                array.add(j);
            }
        }

4.直接查询

 List<Map> list = elasticsearchTemplate.queryForList(searchQuery, Map.class);
        for (Map map:list){
            
        }

其他参考资料:

https://blog.csdn.net/caideb/article/details/84231157

https://blog.csdn.net/weixin_42619846/article/details/102909762

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值