以下是一些带有标签作为嵌套字段的文档。是否可以过滤结果以获取同时具有tags.id = 21
和tags.id = 22
的文档?
{
"title": "Nokia",
"tags": [
{
"id": 21
},
{
"id": 22
}
]
}
{
"title": "HTC",
"tags": [
{
"id": 21
},
{
"id": 23
}
]
}
{
"title": "Samsung",
"tags": [
{
"id": 21
},
{
"id": 22
}
]
}
在这种情况下,结果应返回标题为诺基亚和三星的文档
答案 0 :(得分:0)
您可以使用布尔查询:
GET my_index/_search
{
"query": {
"bool": {
"filter": [
{"match": {"tags.id": 21}},
{"match": {"tags.id": 22}}
]
}
}
}
答案 1 :(得分:0)
下面是查询中提到的情况的查询
{
"query": {
"bool": {
"filter": [
{
"nested":{
"path":"tags",
"query":{
"bool":{
"filter":[
{"term": {"tags.id": 21}}
]
}
}
}
},
{
"nested":{
"path":"tags",
"query":{
"bool":{
"filter":[
{"term": {"tags.id": 22}}
]
}
}
}
}
]
}
}
}
我做的错误是将2个匹配块放在同一过滤器块下。
"filter":[
{"term": {"tags.id": 21}},
{"term": {"tags.id": 22}}
]