2015-07-20 39 views
4

我正在尝试获取IP范围查询以处理一组文档,并且没有得到任何结果。如何执行IP范围查询/筛选器

映射(我都试过analyzednot_analyzed):

"mappings": { 
     "addy": { 
     "properties": { 
      "add": { 
       "type": "ip", 
       "not_analyzed":"true" 
      } 
     } 
     } 
    } 

的数据看起来是这样的(这个很多情况下具有不同的值)

"_source": { 
     "add": "192.168.1.15" 
    } 

现在,我就在看官方的ES文件,但没有IP范围的例子,但I found one on the Git,这没有奏效。它看起来如下:

"query": { 
     "query_string": { 
      "default_field": "add", 
      "query": "add:[192.168.1.5 TO 192.168.1.15]" 
     } 
    } 

上面撒了一些鼓励解析错误,当我是个胖子指法我的领域和地址,但最终没有返回结果。

我也试过标准范围语法:

"filter": { 
    "range": { 
     "add": { 
      "from": "192.168.1.5", 
      "to": "192.168.1.25" 
     } 
    } 
} 

其中还没有返回结果。我如何查询一系列IP地址?

回答

6

ip类型不包含任何not_analyzed设置,仅适用于字符串字段。无论如何,我已经能够重新创建索引这样的:

curl -XPUT localhost:9200/addies -d '{ 
    "mappings": { 
     "addy": { 
      "properties":{ 
      "add": { "type": "ip"} 
      } 
     } 
    } 
}' 

然后我创建了几个样本文件是这样的:

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"}' 

最后,使用query_string查询我可以检索只有前三个文件是这样的:

curl -XPOST localhost:9200/addies/addy/_search -d '{ 
    "query": { 
    "query_string": { 
     "query": "add:[192.168.1.100 TO 192.168.1.102]" 
    } 
    } 
}' 

UPDATE:

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

curl -XPOST localhost:9200/addies/addy/_search -d '{ 
    "query": { 
    "range": { 
     "add": { 
     "gte": "192.168.1.100", 
     "lte": "192.168.1.102" 
     } 
    } 
    } 
}'