2016-06-10 157 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」) –