我正在尝试创建一个嵌套查询,该查询将过滤掉一些具有特定术语的文档。在这种情况下,我正在尝试过滤掉在user.first中具有匹配术语的文档。数据示例:
{
"group" : "fans",
"user" : [
{
"first" : "John",
"last" : "Smith"
},
{
"first" : "Tim",
"last" : "White"
}
]
},
{
"group" : "fans",
"user" : [
{
"first" : "Jim",
"last" : "Smith"
},
{
"first" : "Alice",
"last" : "Black"
}
]
}
我的查询没有得到所需的结果,因为它向我返回了所有未过滤的记录。我尝试使用以下方法进行查询:
"query": {
"bool": {
"must_not": [
{
"nested": {
"query": {
"terms": {
"user.first": [
"John",
"Thomas"
]
}
},
"path": "user"
}
}
]
}
}
我希望在这里获得与过滤器不匹配的文档。在这种情况下,它应该只返回第二个文档。正确的方法是什么?
经过大量的试验和错误,我设法找到了解决问题的方法。这是筛选出我们不需要的文档的查询。
"query": {
"bool": {
"must_not": [
{
"bool": {
"filter": [
{
"nested": {
"query": {
"terms": {
"user.first": [
"John",
"Thomas"
]
}
},
"path": "user"
}
}
]
}
}
]
}
}