Elasticsearch使用AND条件进行嵌套对象搜索



这是我在Elasticsearch中的数据-我将标签作为嵌套对象

PUT myblog/3
{
"id" : 10003,
"tags" : [ 
{
"tag" : 45647
},
{
"tag" : 45648
}
]
}

PUT myblog/4
{
"id" : 10004,
"tags" : [ 
{
"tag" : 45647
}
]
}
PUT myblog/5
{
"id" : 10005,
"tags" : [ 
{
"tag" : 45648
}
]
}

我想检索标记为45647&我试过这种方法

GET myblog/_search
{
"query": {
"nested": {
"path": "tags",
"query": {
"bool": {
"must": [
{ "match": { "tags.tag": 45648}}, 
{ "match": { "tags.tag": 45647}}
]
}
}
}
}
}

但它并没有返回预期的结果。为了获得预期结果,我的查询中缺少什么?

您就快到了。您需要两个nested子句,因为每个嵌套元素下面都是不同的文档。尝试如下:

GET myblog/_search
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "tags",
"query": {
"match": {
"tags.tag": 45648
}
}
}
},
{
"nested": {
"path": "tags",
"query": {
"match": {
"tags.tag": 45647
}
}
}
}
]
}
}
}

最新更新