我有一个弹性搜索模式,如下所示
{
"customer": {
"properties": {
"id": {"type": "string", "index": "not_analyzed"}
}
}
}
{
"activity": {
"parent": {
"type": "customer"
},
"routing": {
"required": true,
"path": "customer.id"
},
"properties": {
...
// The parent object is included on activity
"customer": {
"properties": {
"id": {"type": "string", "index": "not_analyzed"}
}
}
}
}
}
客户的活动和活动是客户类型的子女。我也直接在活动类型上提供客户。
如果我现在针对活动类型
编写术语过滤器{
"terms": {
"field": "customer.id"
}
}
其中读取的内容是 - 属于同一客户的所有活动。
令人惊讶的是,这个存储桶activity.id
而不是activity.customer.id
。我很难过。真的很棒。
我认为这与亲子关系有关?我能够通过这样做得到我想要的东西
{
"terms": {
"field": "_parent"
}
}
我不明白这一点。有人可以指出我做错了吗?
答案 0 :(得分:1)
最近在this blog article中描述了这个问题,这也是ES 2.0将围绕映射进行大量重构的原因之一。简而言之,此处的问题是,在您的映射中,customer
既是类型名称又是字段名称,因此customer.id
可以引用id
的{{1}}字段在customer
类型中输入id
对象的类型或customer
字段。
因此,如果您使用以下完全限定的字段名称,它应该按预期工作:
activity