想象一下,我有两种类型的文件:
客户/购买之间存在父/子关系。
我需要生成一个报告,其中包含符合某些过滤条件的所有购买,但每行还应包含来自客户doc的一些查询数据(例如:客户的区域设置)。我知道其中一种方法是压缩数据并将这些字段直接放入购买文档中。我想知道ElasticSearch是否可以为我自动填充这些字段(可能是一些脚本字段查找魔术?)。
答案 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":{}
}
}
}
]
}
}
}