猿问

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

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里查是正常的,通过代码的话结果集里总是少一条记录。求问有可能是什么原因呢?

zxkfeel
浏览 6891回答 4
4回答

慕数据3515166

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

sunyaox

这个问题,可以先检查一下,查询条件。
随时随地看视频慕课网APP
我要回答