簡體   English   中英

如何使用Java API計算基於多個字段值的Elastic Search文檔?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM