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测试过你的代码吗?啊,我明白了。我想我误解了这个问题。我会更新我的答案。谢谢你,索兰,这正是我需要的: