0

次の 2 種類のドキュメントがあるとします。

  • 顧客 - 地域、ロケールなどの情報が含まれます)
  • 購入 - 個々の購入に関する詳細が含まれます)。

顧客/購入には親子関係があります。

特定のフィルター条件に一致するすべての購入を含むレポートを生成する必要がありますが、各行には顧客ドキュメント (例: 顧客のロケール) からのルックアップ データも含まれている必要があります。これを行う方法の 1 つは、データをフラット化し、これらのフィールドを購入ドキュメントに直接配置することです。代わりに、ElasticSearch がこれらのフィールドを自動的に入力できる方法があるかどうかを知りたいです (スクリプト化されたフィールド ルックアップ マジックでしょうか?)。

4

1 に答える 1

1

parent/childまったく別のドキュメントであるため、どの種類のスクリプトを使用してもフィールドにアクセスする方法はありません。子のコンテキスト内から親にアクセスするのは非常にコストがかかり、その逆も同様です。

インナーヒットはあなたが必要とすることをします:

PUT test
{
  "mappings": {
    "Customer": {},
    "Purchase": {
      "_parent": {
        "type": "Customer"
      }
    }
  }
}

PUT test/Customer/1
{
  "firstName": "John",
  "lastName": "Doe"
}

PUT test/Purchase/2?parent=1
{
  "price": 100
}

GET test/Purchase/_search
{
  "query":{
    "bool":{
      "must":[
        {
          "range":{
            "price":{
              "gte":10
            }
          }
        },
        {
          "has_parent":{
            "type":"Customer",
            "inner_hits":{},
            "query":{
              "match_all":{}
            }
          }
        }
      ]
    }
  }
}
于 2017-11-20T23:13:21.933 に答える