2016-06-10 95 views
0

例如,如何构建一个由包含匹配192.168.100.14/24ip字段的文档过滤的Elasticsearch查询?Elasticsearch按CIDR筛选查询

{ 
    query: { 
     filtered: { 
      filter: { 
       ??? 
      } 
     } 
    } 
} 

为了澄清,我正在寻找有被索引作为IP领域的属性的文件,我想找到有匹配的CIDR掩码(在过滤器中指定的IP)的所有文件。

回答

0

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它将正常工作。

+0

我不是在谈论存储CIDRs如IP地址,我说的是使用CIDR掩码搜索IP地址。这让我相信一定有办法做到这一点:https://github.com/elastic/elasticsearch/issues/7464 – nephets

1

试试这个,如果使用ES 2.2或更高版本:

{"query": {"term" : {"<ip_field_name>" : "192.168.100.14/24"}}} 
+0

查询字符串查询将如下所示: :(“192.168.1.0/24” “192.168.2.0/24”) –