12

マッピングの ID によって結果をファセットするようにエラスティック検索の実装を構成しました。そのファセットをユーザーに表示するとき、それを表す人間が判読できる名前を表示できるようにする必要があります。必要なデータはすべてマッピングに含まれていますが、それをファセットの一部として返す方法がわかりません。きっとそれは可能ですか?

thingId次の例を考えると、ファセットにto thingName(または必要になる可能性のあるその他のthingプロパティ)を関連付ける何らかの方法を提供したいと思います。

マッピング

{
  thingId,
  thingName
}

ファセット クエリ

{
  "facets":{
    "things":{ "terms":{ "field":"thingId" } }
  }
}    

結果

{
  "hits":{
    "total":3,
    "max_score":1.0,
    "hits":[
      ...
    ]
  },
  "facets":{
    "things":{
      "_type":"terms",
      "missing":0,
      "total":3,
      "other":0,
      "terms":[
        {
          "term":"5",
          "count":1
        },
        {
          "term":"4",
          "count":1
        },
        {
          "term":"2",
          "count":1
        }
      ]
    }
  }
}

編集

Solr に関するこの回答は、アイテムの順序が同じであると仮定して、両方のプロパティ (thingNameおよび) をファセットし、両方のファセット結果セットをループすることを示唆しています。thingIdそれがどれほど信頼できるかはわかりませんが、それはオプションです。

編集 2

この回答は、2 つのフィールドを 1 つの値に結合し、それをファセット処理しないと、私がやりたいことを実行できないことを示唆していますthingId|thingName。理想的ではありません。

編集 3

この回答では、値を 1 つのフィールドに結合して (上記のように) ファセットすることを提案していますが、条件スクリプトを使用して結合を実現しているため、結合された値の形式にインデックスを付ける必要はありません。まだ完全ではありませんが、これが最もくだらないオプションのようです。

4

1 に答える 1

4

スクリプトという用語の使用に満足できない場合は、1.0.0 を使用できると仮定して、ネストされた集計を使用する別のオプションがあります。

集計は次のようになります。

{
    "query": {
        "match_all": {}
    },
    "aggs": {
        "theIds": {
            "terms" : {
                "field": "thingId"
            },
            "aggs":{
                "theNames": {
                    "terms": {
                        "field": "thingName"
                    }
                }
            }
        }
    }
}

そして、応答は次のようになります。

"aggregations": {
      "theIds": {
         "buckets": [
            {
               "key": "1",
               "doc_count": 5,
               "theNames": {
                  "buckets": [
                     {
                        "key": "AAA",
                        "doc_count": 3
                     },
                     {
                        "key": "BBB",
                        "doc_count": 3
                     },
                     {
                        "key": "CCC",
                        "doc_count": 2
                     }
                  ]
               }
            },
            {
               "key": "2",
               "doc_count": 2,
               "theNames": {
                  "buckets": [
                     {
                        "key": "AAA",
                        "doc_count": 2
                     }
                  ]
               }
            }
         ]
      }
   }
于 2014-02-14T17:36:49.680 に答える