例如,如何构建一个由包含匹配192.168.100.14/24
的ip
字段的文档过滤的Elasticsearch查询?Elasticsearch按CIDR筛选查询
{
query: {
filtered: {
filter: {
???
}
}
}
}
为了澄清,我正在寻找有被索引作为IP领域的属性的文件,我想找到有匹配的CIDR掩码(在过滤器中指定的IP)的所有文件。
例如,如何构建一个由包含匹配192.168.100.14/24
的ip
字段的文档过滤的Elasticsearch查询?Elasticsearch按CIDR筛选查询
{
query: {
filtered: {
filter: {
???
}
}
}
}
为了澄清,我正在寻找有被索引作为IP领域的属性的文件,我想找到有匹配的CIDR掩码(在过滤器中指定的IP)的所有文件。
elasticsearch类型ip
不支持该类型的输入。下面是表明它会失败的例子:
PUT index1
{
"mappings": {
"type1": {
"properties": {
"ip_addr": {
"type": "ip"
}
}
}
}
}
POST index1/type1
{
ip_addr: "192.168.100.14/24"
}
{
"error": {
"root_cause": [
{
"type": "mapper_parsing_exception",
"reason": "failed to parse [ip_addr]"
}
],
"type": "mapper_parsing_exception",
"reason": "failed to parse [ip_addr]",
"caused_by": {
"type": "illegal_argument_exception",
"reason": "failed to parse ip [192.168.100.14/24], not a valid ip address"
}
},
"status": 400
}
相反,如果你脱光/24
它将正常工作。
试试这个,如果使用ES 2.2或更高版本:
{"query": {"term" : {"<ip_field_name>" : "192.168.100.14/24"}}}
查询字符串查询将如下所示:
我不是在谈论存储CIDRs如IP地址,我说的是使用CIDR掩码搜索IP地址。这让我相信一定有办法做到这一点:https://github.com/elastic/elasticsearch/issues/7464 – nephets