如何执行IP范围查询/过滤

Ian*_*bes 4 elasticsearch

我正在尝试获取IP范围查询来处理一组文档,但没有得到任何结果.

映射(我都试过analyzednot_analyzed):

   "mappings": {
      "addy": {
         "properties": {
            "add": {
               "type": "ip",
               "not_analyzed":"true"
            }
         }
      }
   }
Run Code Online (Sandbox Code Playgroud)

数据看起来像这样(许多实例具有不同的值)

   "_source": {
       "add": "192.168.1.15"
   }
Run Code Online (Sandbox Code Playgroud)

现在,我去看官方的ES文档,但是没有IP范围的例子,但我在Git上找到了一个,但是没有用.它看起来如下:

    "query": {
        "query_string": {
           "default_field": "add",
           "query": "add:[192.168.1.5 TO 192.168.1.15]"
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我胖的指法我的字段和地址时,上面提出了一些鼓励解析错误,但最终没有返回任何结果.

我也尝试过标准范围语法:

"filter": {
    "range": {
       "add": {
          "from": "192.168.1.5",
          "to": "192.168.1.25"
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个也没有返回任何结果.如何查询一系列IP地址?

Val*_*Val 7

ip类型不进行任何not_analyzed设置,仅适用于字符串字段.无论如何,我已经能够像这样重建你的索引:

curl -XPUT localhost:9200/addies -d '{
   "mappings": {
      "addy": {
          "properties":{
             "add": { "type": "ip"}
          }
      }
   }
}'
Run Code Online (Sandbox Code Playgroud)

然后我创建了几个这样的示例文档:

curl -XPUT localhost:9200/addies/addy/1 -d '{"add": "192.168.1.100"}'
curl -XPUT localhost:9200/addies/addy/2 -d '{"add": "192.168.1.101"}'
curl -XPUT localhost:9200/addies/addy/3 -d '{"add": "192.168.1.102"}'
curl -XPUT localhost:9200/addies/addy/4 -d '{"add": "192.168.1.110"}'
Run Code Online (Sandbox Code Playgroud)

最后,使用query_string查询我只能检索前三个文件,如下所示:

curl -XPOST localhost:9200/addies/addy/_search -d '{
  "query": {
    "query_string": {
      "query": "add:[192.168.1.100 TO 192.168.1.102]"
    }
  }
}'
Run Code Online (Sandbox Code Playgroud)

更新:

请注意,以下range查询也可以正常工作并返回相同的结果:

curl -XPOST localhost:9200/addies/addy/_search -d '{
  "query": {
    "range": {
      "add": {
        "gte": "192.168.1.100",
        "lte": "192.168.1.102"
      }
    }
  }
}'
Run Code Online (Sandbox Code Playgroud)