嵌套的 Elasticsearch 查询
Nested Elasticsearch queries
我正在尝试创建一个嵌套查询,它会过滤掉一些包含特定术语的文档。在这种情况下,我试图过滤掉在 user.first 中具有匹配项的文档。数据示例:
{
"group" : "fans",
"user" : [
{
"first" : "John",
"last" : "Smith"
},
{
"first" : "Tim",
"last" : "White"
}
]
},
{
"group" : "fans",
"user" : [
{
"first" : "Jim",
"last" : "Smith"
},
{
"first" : "Alice",
"last" : "Black"
}
]
}
我的查询没有得到想要的结果,因为它 return 向我提供了所有未过滤的记录。我尝试使用查询:
"query": {
"bool": {
"must_not": [
{
"nested": {
"query": {
"terms": {
"user.first": [
"John",
"Thomas"
]
}
},
"path": "user"
}
}
]
}
}
我希望在这里获得与过滤器不匹配的文档。在这种情况下,它应该 return 只有第二个文件。正确的做法是什么?
经过反复试验,我设法找到了问题的解决方案。这是过滤掉我们不需要的文档的查询。
"query": {
"bool": {
"must_not": [
{
"bool": {
"filter": [
{
"nested": {
"query": {
"terms": {
"user.first": [
"John",
"Thomas"
]
}
},
"path": "user"
}
}
]
}
}
]
}
}
我正在尝试创建一个嵌套查询,它会过滤掉一些包含特定术语的文档。在这种情况下,我试图过滤掉在 user.first 中具有匹配项的文档。数据示例:
{
"group" : "fans",
"user" : [
{
"first" : "John",
"last" : "Smith"
},
{
"first" : "Tim",
"last" : "White"
}
]
},
{
"group" : "fans",
"user" : [
{
"first" : "Jim",
"last" : "Smith"
},
{
"first" : "Alice",
"last" : "Black"
}
]
}
我的查询没有得到想要的结果,因为它 return 向我提供了所有未过滤的记录。我尝试使用查询:
"query": {
"bool": {
"must_not": [
{
"nested": {
"query": {
"terms": {
"user.first": [
"John",
"Thomas"
]
}
},
"path": "user"
}
}
]
}
}
我希望在这里获得与过滤器不匹配的文档。在这种情况下,它应该 return 只有第二个文件。正确的做法是什么?
经过反复试验,我设法找到了问题的解决方案。这是过滤掉我们不需要的文档的查询。
"query": {
"bool": {
"must_not": [
{
"bool": {
"filter": [
{
"nested": {
"query": {
"terms": {
"user.first": [
"John",
"Thomas"
]
}
},
"path": "user"
}
}
]
}
}
]
}
}