为了账号安全,请及时绑定邮箱和手机立即绑定

es6.2.4,使用bool查询查出的结果,SearchResponse的Hits[]总是比totalHits少一条记录

es6.2.4,使用bool查询查出的结果,SearchResponse的Hits[]总是比totalHits少一条记录

zxkfeel 2019-01-16 17:33:34
SearchRequestBuilder searchRequestBuilder = transportClient.prepareSearch(index); if (StringUtils.isNotEmpty(type)) {     searchRequestBuilder.setTypes(type.split(",")); } searchRequestBuilder.setSearchType(SearchType.QUERY_THEN_FETCH); // 需要显示的字段,逗号分隔(缺省为全部字段) if (StringUtils.isNotEmpty(fields)) {     searchRequestBuilder.setFetchSource(fields.split(","), null); } //排序字段 if(CollectionUtils.isNotEmpty(sortList)){     for (EsSort esSort : sortList){         searchRequestBuilder.addSort(esSort.getFieldName(),esSort.getSortOrder());     } } // 查询字段 if(CollectionUtils.isNotEmpty(matchList)){     for (EsMatchSearch esMatchSearch : matchList){         if (matchPhrase == Boolean.TRUE) {             boolQuery.must(QueryBuilders.matchPhraseQuery(esMatchSearch.getFieldName(), esMatchSearch.getValue()));         } else {             boolQuery.must(QueryBuilders.matchQuery(esMatchSearch.getFieldName(), esMatchSearch.getValue()));         }     } } // 范围查询字段 if(CollectionUtils.isNotEmpty(rangeList)){     for (EsRangeSearch esRangeSearch : rangeList){         RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(esRangeSearch.getFieldName());         if(StringUtils.isNotBlank(esRangeSearch.getFrom())){             rangeQueryBuilder.from(esRangeSearch.getFrom());         }         if(StringUtils.isNotBlank(esRangeSearch.getTo())){             rangeQueryBuilder.to(esRangeSearch.getTo());         }         rangeQueryBuilder.includeLower(true)                          .includeUpper(true);         boolQuery.must(rangeQueryBuilder);     } } searchRequestBuilder.setQuery(boolQuery); // 分页应用 searchRequestBuilder.setFrom(currentPage).setSize(pageSize); // 设置是否按查询匹配度排序 searchRequestBuilder.setExplain(true); // 执行搜索,返回搜索响应信息 SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); long totalHits = searchResponse.getHits().totalHits; long length = searchResponse.getHits().getHits().length; logger.debug("共查询到[{}]条数据,处理数据条数[{}]", totalHits, length);用查询条件直接在es里查是正常的,通过代码的话结果集里总是少一条记录。求问有可能是什么原因呢?
查看完整描述

4 回答

?
慕数据3515166

TA贡献1条经验 获得超0个赞

楼主找到问题原因了吗?我也是遇到这样的问题

查看完整回答
反对 回复 2019-06-19
?
sunyaox

TA贡献68条经验 获得超6个赞

这个问题,可以先检查一下,查询条件。

查看完整回答
反对 回复 2019-01-24
  • 4 回答
  • 0 关注
  • 6799 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信