gpt4 book ai didi

elasticsearch - 嵌套对象的 boolean 过滤器

转载 作者:行者123 更新时间:2023-12-02 22:17:03 25 4
gpt4 key购买 nike

使用嵌套对象的 bool(boolean) 运算符时遇到一些麻烦。
这是我的映射:

   "IP": {
"properties": {
"ip": {
"type": "ip"
}
},
"type": "nested"
}

我想获取恰好包含两个指定ip甚至更多的文档。

假设我的文档具有以下ips:
    DOC 1
192.168.1.0
192.168.0.1
10.0.0.9

DOC 2
192.168.0.1

我想通过使用此过滤器进行搜索来仅检索DOC 1:
      "bool": {
"must": {
"terms": {
"IP.ip": [
"192.168.0.1",
"10.0.0.9"
]
}
}
}

问题在于,同时检索了DOC 1和DOC2。

最佳答案

您可以像这样在terms filter上使用"execution":"and":

{
"filter": {
"bool": {
"must": [
{
"terms": {
"ip": [
"192.168.0.1",
"10.0.0.9"
],
"execution": "and"
}
}
]
}
}
}

这是一些我用来测试的代码:

http://sense.qbox.io/gist/d6b5f4e4c0d2977a04b1795f4bbb0503f6365dfe

编辑:嵌套版本(我误解了这个问题)。

假设您的索引是按照我设置我的测试对象的方式设置的,那么该查询应该为您提供所需的信息(请参见下面的代码)。在 nested列表中需要有两个 must子句,因为我们正在寻找一个包含两个不同嵌套文档的文档,每个文档都有一个IP。
POST /test_index/_search
{
"filter": {
"bool": {
"must": [
{
"nested": {
"path": "ips",
"filter": {
"term": {
"ip": "192.168.0.1"
}
}
}
},
{
"nested": {
"path": "ips",
"filter": {
"term": {
"ip": "10.0.0.9"
}
}
}
}
]
}
}
}

这是我用来设置的代码:

http://sense.qbox.io/gist/cd3a0ec61cb1348d5cc2bd1ef444f4898f6d8e57

关于elasticsearch - 嵌套对象的 boolean 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32205748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com