我正在尝试获取IP范围查询以处理一组文档,但是没有任何结果。
映射(我已经尝试了analyzed和not_analyzed):
analyzed
not_analyzed
"mappings": { "addy": { "properties": { "add": { "type": "ip", "not_analyzed":"true" } } } }
数据看起来像这样(许多实例的值都不同)
"_source": { "add": "192.168.1.15" }
现在,我去看了官方的ES文档,但是没有IP范围示例,但是我在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地址?
该ip类型不需要任何not_analyzed设置,仅适用于字符串字段。无论如何,我已经能够像这样重新创建索引:
ip
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查询,我只能像这样检索前三个文档:
query_string
curl -XPOST localhost:9200/addies/addy/_search -d '{ "query": { "query_string": { "query": "add:[192.168.1.100 TO 192.168.1.102]" } } }'
更新:
请注意,以下range查询也可以正常工作并返回相同的结果:
range
curl -XPOST localhost:9200/addies/addy/_search -d '{ "query": { "range": { "add": { "gte": "192.168.1.100", "lte": "192.168.1.102" } } } }'