出力バケットに「agency_name」という新しいキーを追加するにはどうすればよいですか。
以下に示すように集約コードを実行しています
{
"aggs": {
"name": {
"terms": {
"field": "agency_code"
}
}
}
}
私は次のようにアウトを取得します
"aggregations": {
"name": {
"doc_count_error_upper_bound": 130,
"sum_other_doc_count": 39921,
"buckets": [
{
"key": "1000",
"doc_count": 105163
},
{
"key": "2100",
"doc_count": 43006
}
]
}
}
表示中に、代理店名、コード、doc_countを表示する必要があります
以下のフォーマットを取得できるように、集計クエリを変更するにはどうすればよいですか。 ElasticSearchは初めてですが、これを修正する方法がわかりません
"aggregations": {
"name": {
"doc_count_error_upper_bound": 130,
"sum_other_doc_count": 39921,
"buckets": [
{
"key": "1000",
"doc_count": 105163,
"agency_name": 'Agent 1'
},
{
"key": "2100",
"doc_count": 43006,
"agency_name": 'Agent 2'
}
]
}
}
ElasticSearchのサンプルデータ(フィールドが分析されます)
{
"_index": "feeds",
"_type": "news",
"_id": "22005",
"_version": 1,
"_score": 1,
"_source": {
"id": 22005,
"name": "Test News",
"agency_name": "Agent 1",
"agency_code": "1000",
}
}
以下のリンクのように、上位ヒットの集計を使用できます。追加の集計を作成すると、代理店名が別の「ヒット」キーの下に埋め込まれるため、形式は少し異なります。
{
"aggs": {
"name": {
"terms": {
"field": "agency_code"
},
"aggs": {
"agency_names" : {
"top_hits": {
size: 1,
_source: {
include: ['agency_name']
}
}
}
}
}
}
}
それに別の「aggs」を追加する必要があると思います。しかし、それは希望する形式ではなく、出力の別のフィールドとして表示されます。理由は、現在「agency_code」に基づいて集計しているためで、doc_countは特定の代理店コードの発生回数を示しています。ここで、「agency_name」に基づいて集計する場合、フィールドが「agency_code」とは異なるドキュメントにあり、番号も異なる場合があります。これらのペアが常にペアで存在する場合、この親子のインデックス付けが役立つ場合があります。
https://www.elastic.co/guide/en/elasticsearch/guide/current/indexing-parent-child.html
これは古い投稿ですが、同じ問題に遭遇しました https://www.elastic.co/guide/en/elasticsearch/reference/current/agg-metadata.html =。メタデータの詳細を追加すると、上記のバケットの結果の一部として返されます。それが将来誰かを助けることを願っています。
ESには、agency_name
とagency_code
が1対1で対応していることがわかりません。したがって、私はいくつかの可能な戦略をお勧めします。
agency_name
を分析せず、そのフィールドでaggという用語を使用しないでください。実際にagency_name
のトークン化を行う必要があるとしたら、私は驚きます。Aditya Patelが前述したように、親子関係も役立つ場合がありますが、id-> nameマッピングを解決するには、上記の戦略のいずれかを使用する必要があると思います。