带有来自其他文档

时间:2017-11-15 09:12:47

标签: elasticsearch elasticsearch-5 aws-elasticsearch

想象一下,我有两种类型的文件:

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

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

我需要生成一个报告,其中包含符合某些过滤条件的所有购买,但每行还应包含来自客户doc的一些查询数据(例如:客户的区域设置)。我知道其中一种方法是压缩数据并将这些字段直接放入购买文档中。我想知道ElasticSearch是否可以为我自动填充这些字段(可能是一些脚本字段查找魔术?)。

1 个答案:

答案 0 :(得分:1)

无法使用任何类型的脚本访问parent/child中的字段,因为它是完全不同的文档。从孩子的上下文中访问父母是非常昂贵的,反之亦然。

Inner hits将满足您的需求:

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":{}
            }
          }
        }
      ]
    }
  }
}