我正在尝试获取IP范围查询以处理一组文档,但没有结果。
映射(我已尝试过analyzed
和not_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地址?
答案 0 :(得分: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]"
}
}
}'
更新:
请注意,以下range
查询也可以正常运行并返回相同的结果:
curl -XPOST localhost:9200/addies/addy/_search -d '{
"query": {
"range": {
"add": {
"gte": "192.168.1.100",
"lte": "192.168.1.102"
}
}
}
}'