[英]How to count Elastic Search documents based on multiple field values with the Java API?
我正在尝试根据document字段的值2来计算特定类型的文档数。
到目前为止,我可以使用以下方法计算文档数:
SearchResponse response = elasticClient.getClient().prepareSearch(Properties.get().getSearch().getAliasName())
.setTypes(type)
.setSize(0) // Don't return any documents, we don't need them.
.get();
SearchHits hits = response.getHits();
return (int) hits.getTotalHits();
返回正确的文档总数。
我还可以使用以下方法搜索特定文档:
searchResponse = elasticClient.getClient()
.prepareSearch(index)
.setSearchType(SearchType.QUERY_THEN_FETCH)
.setQuery(QueryBuilders.prefixQuery(field_name, field_value))
.setFetchSource(true)
.setSize(10000)
.setTypes(type)
.addSort(builder.order(SortOrder.DESC))
.get();
这也将返回文档。
我尝试使用以下方法基于2个字段值进行计数:
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
queryBuilder.must(QueryBuilders.prefixQuery(field_1, value_1));
queryBuilder.must(QueryBuilders.prefixQuery(field_2, value_2));
SearchRequestBuilder searchBuilder = elasticClient.getClient().prepareSearch(index)
.setQuery(queryBuilder)
.setTypes(type)
.setSize(0);
但这始终返回0。
如何使用Java API根据2个字段值正确计数文档?
通过检查查询,您不会将两个值一起传递。 您首先要传递对field_1
的查询,然后用对field_2
的查询覆盖它。 因此,在将变量传递给客户端QueryBuilders.prefixQuery(field_2, value_2)
变量queryBuilder
仅具有查询: QueryBuilders.prefixQuery(field_2, value_2)
。
在Elasticsearch查询DSL中, must
对象是一系列查询,其行为类似于SQL where子句中的AND
。 因此must
列表中的所有查询都must
匹配。 要将两个查询都包括在内, must
执行以下操作:
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
queryBuilder.must().add(QueryBuilders.prefixQuery(field_1, value_1));
queryBuilder.must().add(QueryBuilders.prefixQuery(field_2, value_2));
至于计数, size = 0
应该可以解决问题。 您使用哪种弹性搜索客户端?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.