在我的索引中,我有一个映射,其中包含“嵌套”类型的locations
属性。此属性包含一系列位置。每个位置都是具有以下结构的对象:
{
"id": string,
"type": string
}
在我的网站上,我想选择多个位置,找到所选文件中 ANY 的所有文档。我能够在一个位置搜索,但我必须以某种方式修改我的查询以搜索许多位置。
我设置了以下索引:
"mappings": {
"users": {
"properties": {
"locations": {
"type": "nested",
"properties": {
"id": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"type": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"id": {
"type": "long"
}
}
}
}
示例文件:
{
"locations": [
{
"id": "UA",
"type": "country"
},
{
"id": "RU",
"type": "country"
},
{
"id": "OC",
"type": "continent"
}
]
}
我按位置搜索用户的查询:
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "locations",
"query": {
"bool": {
"must": [
{
"match": { "locations.id": "RU" }
},
{
"match": { "locations.type": "country" }
}
]
}
}
}
}
]
}
}
}
修改:
我还想检索locations.type
等于continent
的文档。在SQL中它看起来像
WHERE (id IN ('UA', 'RU') AND type = 'country')
OR (id IN ('EU', 'OC', 'NA') AND type = 'continent')