elasticsearch 嵌套对象上的布尔过滤器,elasticsearch,filter,boolean,elasticsearch,Filter,Boolean" /> elasticsearch 嵌套对象上的布尔过滤器,elasticsearch,filter,boolean,elasticsearch,Filter,Boolean" />

elasticsearch 嵌套对象上的布尔过滤器

elasticsearch 嵌套对象上的布尔过滤器,elasticsearch,filter,boolean,elasticsearch,Filter,Boolean,我在对嵌套对象使用布尔运算符时遇到了一些问题。 这是我的映射: "IP": { "properties": { "ip": { "type": "ip" } }, "type": "nested" } 我想得到的文件,其中正好包含两个指定的IP,也许更多 假设我的文档具有以下IP: DOC 1 192.168.1.0 192.

我在对嵌套对象使用布尔运算符时遇到了一些问题。 这是我的映射:

   "IP": {
        "properties": {
          "ip": {
            "type": "ip"
          }
        },
        "type": "nested"
      }
我想得到的文件,其中正好包含两个指定的IP,也许更多

假设我的文档具有以下IP:

    DOC 1
        192.168.1.0
        192.168.0.1
        10.0.0.9

    DOC 2
       192.168.0.1
我只想通过使用此筛选器搜索文档1:

      "bool": {
        "must": {
          "terms": {
            "IP.ip": [
              "192.168.0.1",
              "10.0.0.9"
            ]
          }
        }
      }
问题是doc1和DOC2都被检索。

您可以使用execution:在您的计算机上,如下所示:

{
   "filter": {
      "bool": {
         "must": [
            {
               "terms": {
                  "ip": [
                     "192.168.0.1",
                     "10.0.0.9"
                  ],
                  "execution": "and"
               }
            }
         ]
      }
   }
}
下面是我用来测试它的一些代码:

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

假设您的索引是按照我为测试设置的方式设置的,那么这个查询应该会提供您所需要的内容。请参见下面的代码。必须列表中需要有两个嵌套子句,因为我们要查找的文档包含两个不同的嵌套文档,每个文档具有一个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"
                     }
                  }
               }
            }
         ]
      }
   }
}
下面是我用来设置它的代码:


您可以在术语查询中使用最小匹配

"bool": {
    "must": {
      "terms": {
        "IP.ip": [
          "192.168.0.1",
          "10.0.0.9"
        ],
        "minimum_match" :"100%"
      }
    }
  }

这将返回包含术语查询中所有值的记录。

nice没有意识到此选项存在谢谢你的回答,Solan。但是我仍然有同样的问题,即使使用执行语句。我的示例和您的示例之间的区别在于我使用嵌套对象。你用嵌套IP测试过你的代码吗?啊,我明白了。我想我误解了这个问题。我会更新我的答案。谢谢你,索兰,这正是我需要的: