0

假设我有两种类型的文档:

  • 客户 - 包含区域、区域设置等信息)
  • 购买 - 包含有关个人购买的详细信息)。

客户/采购之间存在父/子关系。

我需要生成一个报告,其中包含所有符合特定过滤条件的购买,但每一行还应该包含来自客户文档的一些查找数据(例如:客户的区域设置)。我知道这样做的一种方法是首先将数据展平并将这些字段直接放入购买文档中。我想知道是否有一种方法 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 回答