1

集計クエリを使用して Elastic Search インデックスを検索するための有効な cURL 要求があります。必要に応じて、応答には、指定された集計フィールドの値のリストと、これらの各値に一致するドキュメントの数が含まれます。たとえば、連絡先を郵便番号ごとに集計すると、応答には 50 の郵便番号と、これらの郵便番号ごとの連絡先の数が含まれます。偉大な。

これで、同じ集計クエリを実行する JAVA 関数も作成できました。集約応答でネストされたデータを解析するにはどうすればよいですか? 特に、各バケットの key 変数と docCount 変数を取り出したいと思います。オンラインや Elastic ドキュメントでこの例を見つけるのに苦労しています。

これが私がこれまでに持っているものです...

@GET
@Path("{indexName}")
public void searchResults(@PathParam("indexName") String indexName) throws IOException {
    RestHighLevelClient client = createHighLevelRestClient();
    int numberOfSearchHitsToReturn = 100; // defaults to 10

    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

    sourceBuilder.size(numberOfSearchHitsToReturn);

    GlobalAggregationBuilder aggregation = AggregationBuilders.global("agg")
            .subAggregation(AggregationBuilders.terms("home_zip_aggregation").field("home_zip.keyword"));

    sourceBuilder.aggregation(aggregation);


    SearchRequest searchRequest = new SearchRequest(indexName).source(sourceBuilder);

    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

    Aggregations aggregations = searchResponse.getAggregations();
    Terms byZipAggregation = aggregations.get("home_zip");
    System.out.print(byZipAggregation);
    System.out.print(searchResponse);

    client.close();

}

実際、searchResponse には集計のリストが含まれています。ただし、byZipAggregation は null です。home_zip 集計データをオブジェクトとして取得するにはどうすればよいですか? 私はこのElasticドキュメントで作業しています...

https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/_bucket_aggregations.html

searchResponse の値は次のとおりです。

{"took":7,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":51,"relation":"eq"},"max_score":1.0,"hits":[{"_index":"contacts_6_cjluhmdki6","_type":"_doc","_id":"2093","_score":1.0,"_source":{"list_id":"6","contact_id":"2093","firstname":"DANIEL","middlename":"C","lastname":"BRYANT","email":"","home_address1":"602  STONE CIRCLE CT APT 2","home_city":"SCHAUMBURG","home_state":"IL","home_zip":"60194","home_phone":"","latitude":"42.030346","longitude":"-88.06422","location_point":"0101000020E6100000F2EF332E1C0456C03FC8B260E2034540","date_of_birth":"10/26/1991","sex":"M","registered_party":"0","created":"2019-11-13 21:24:55.825672","imported":"2019-11-13 15:24:51.006805","fulltext":"'2':8 '60194':10 '602':3 'apt':7 'bryant':2 'circle':5 'ct':6 'daniel':1 'schaumburg':9 'stone':4","home_house_num":"602","home_street_name":"STONE CIRCLE","home_street_type":"CT","home_unit_num":"APT 2","fake_col":"0.414"} ... 

より多くの文書データがここにありました。この例を簡略化するために削除しました。

}}]},"aggregations":{"global#agg":{"doc_count":51,"sterms#home_zip_aggregation":{"doc_count_error_upper_bound":0,"sum_other_doc_count":38,"buckets":[{"key":"60462","doc_count":2},{"key":"60506","doc_count":2},{"key":"60005","doc_count":1},{"key":"60030","doc_count":1},{"key":"60061","doc_count":1},{"key":"60098","doc_count":1},{"key":"60102","doc_count":1},{"key":"60126","doc_count":1},{"key":"60137","doc_count":1},{"key":"60187","doc_count":1}]}}}}

Aggregations オブジェクト全体を Javascript で記述されたクライアント コードに渡し、Javascript コード内の目的のフィールドを解析できることに気付きました。ただし、不要なデータをクライアントに渡さないように、このすべての解析を Java サーバー コードで実行したいと考えています。さらに、応答の一部が大きすぎてサーバーがクライアントに渡せないようです。では、Java でバケット キーと docCounts を解析するにはどうすればよいでしょうか?

4

0 に答える 0