正确查询 ES 中的嵌套类属性(但 w/o 嵌套类型)
Correct query for nested like properties in ES (but w/o nested type)
在 ES 1.7 中给出此文档
{
"_index": "prod",
"_type": "customerpropertieses",
"_id": "215c4bd7-7611-4c6a-8681-ef3b318613a0",
"_source": {
"properties": [
{
"extentionPropertyId": 7,
"propertyName": "Video Introduction",
"value": "bla"
},
{
"extentionPropertyId": 8,
"propertyName": "Guide Exp"
},
],
"id": "215c4bd7-7611-4c6a-8681-ef3b318613a0",
"parentId": "2222"
} }
我想找到一个查询,说明如果 propertyName 和 value IN THE SAME 大括号匹配某些值,则 return 该 customerpropertieses 文档。
现在我可能对以下查询做错了,因为当任何 propertyName 与查询匹配并且任何值与查询匹配时,它 returns 是一个 customerpropertieses 文档。基本上我想强制 propertyName 和 value 的分组来自相同的 "object index"
ES 查询未正常工作
"query":{
"type": "customerpropertieses",
"query": {
"bool": {
"must": [
{
"bool": {
"must": [
{
"match": {
"propertyName": {
"query": "Guide Exp"
}
}
},
{
"match": {
"value": {
"query": "bla"
}
}
}
]
}
}
]
}
} }
我需要嵌套类型吗?
简答:您确实需要使用嵌套文档。
稍微长一点:在内部,ES "flatten" 那些所以它在 Lucene 索引中看起来像这样:
{
extentionPropertyId: [7, 8],
propertyName: ["Video Introduction", "Guide Exp"],
value: ["bla"]
}
如您所见,每个 "object" 之间的 link 丢失了。
这里有更详细的解释
https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html
在 ES 1.7 中给出此文档
{
"_index": "prod",
"_type": "customerpropertieses",
"_id": "215c4bd7-7611-4c6a-8681-ef3b318613a0",
"_source": {
"properties": [
{
"extentionPropertyId": 7,
"propertyName": "Video Introduction",
"value": "bla"
},
{
"extentionPropertyId": 8,
"propertyName": "Guide Exp"
},
],
"id": "215c4bd7-7611-4c6a-8681-ef3b318613a0",
"parentId": "2222"
} }
我想找到一个查询,说明如果 propertyName 和 value IN THE SAME 大括号匹配某些值,则 return 该 customerpropertieses 文档。
现在我可能对以下查询做错了,因为当任何 propertyName 与查询匹配并且任何值与查询匹配时,它 returns 是一个 customerpropertieses 文档。基本上我想强制 propertyName 和 value 的分组来自相同的 "object index"
ES 查询未正常工作
"query":{
"type": "customerpropertieses",
"query": {
"bool": {
"must": [
{
"bool": {
"must": [
{
"match": {
"propertyName": {
"query": "Guide Exp"
}
}
},
{
"match": {
"value": {
"query": "bla"
}
}
}
]
}
}
]
}
} }
我需要嵌套类型吗?
简答:您确实需要使用嵌套文档。 稍微长一点:在内部,ES "flatten" 那些所以它在 Lucene 索引中看起来像这样:
{
extentionPropertyId: [7, 8],
propertyName: ["Video Introduction", "Guide Exp"],
value: ["bla"]
}
如您所见,每个 "object" 之间的 link 丢失了。
这里有更详细的解释 https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html