[英]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.