我正在尝试创建一个嵌套查询,该查询将过滤掉某些带有特定术语的文档。在这种情况下,我试图过滤掉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"
}
}
]
}
}
我希望在这里得到与过滤器不匹配的文档。在这种情况下,它应该仅返回第二个文档。正确的方法是什么?
答案 0 :(得分:0)
经过反复尝试,我设法找到了解决问题的方法。此查询可过滤掉我们不需要的文档。
"query": {
"bool": {
"must_not": [
{
"bool": {
"filter": [
{
"nested": {
"query": {
"terms": {
"user.first": [
"John",
"Thomas"
]
}
},
"path": "user"
}
}
]
}
}
]
}
}