PythonとElasticsearch DSLを用いて範囲クエリを作成する方法について説明します。Elasticsearch DSLは、Elasticsearchの高レベルPythonクライアントで、直観的に検索クエリを作成することができます。
まず、Elasticsearchと接続します。次に、Search
オブジェクトを作成し、フィルタ条件を記述します。この例では、value
フィールドの値が1以上100未満のドキュメントをフィルタリングします。
from elasticsearch_dsl import Search
search = Search(using=elastic, index=index) # Search オブジェクトの作成
search = search.filter("range", value={"gte": 1, "lt": 100}) # フィルタ条件の記載
次に、集計を行います。この例では、hoge
フィールドとfuga
フィールドでグループ化し、それぞれのvalue
フィールドの合計を計算します。
from elasticsearch_dsl import A
# Aggregation オブジェクトの作成
aggs_hoge = A("terms", field="hoge", size=10).metric('sum_value', 'sum', field='value')
aggs_fuga = A("terms", field="fuga", size=10).metric('sum_value', 'sum', field='value')
# Aggregation オブジェクトを Search オブジェクトに紐付ける
search.aggs.bucket("aggs_name_hoge", aggs_hoge)
search.aggs.bucket("aggs_name_fuga", aggs_fuga)
response = search.execute()
最後に、結果を取得します。aggs_name_hoge
とaggs_name_fuga
のバケットから集計結果を取得できます。
response.aggregations.aggs_name_hoge.buckets # [{'key': 1, 'doc_count': 2, 'sum_value': {'value': 7.0}}, {'key': 2, 'doc_count': 2, 'sum_value': {'value': 11.0}}]
response.aggregations.aggs_name_fuga.buckets # [{'key': 1, 'doc_count': 2, 'sum_value': {'value': 8.0}}, {'key': 2, 'doc_count': 2, 'sum_value': {'value': 10.0}}]
以上がPythonとElasticsearch DSLを用いた範囲クエリの作成方法です。この方法を用いると、直観的に検索クエリを作成し、データを効率的に分析することができます。.