在ElasticSearch中搜索以通配符开头的字符串

时间:2014-11-25 20:53:52

标签: elasticsearch lucene wildcard kibana x509certificate

我正在构建一个kibana仪表板,显示有关X509 certificates的信息。我想在CNSAN属性中构建一个包含通配符的证书饼图,但我找不到有效的查询语法。

要匹配subject.cn: "*.example.net"之类的字符串,我尝试了以下kibana查询:

subject.cn:/\*./
subject.cn:/^\*./
subject.cn:\*\.
subject.cn:\*.
subject.cn:*.

有人能指出我正确的语法吗?这甚至是ES / Lucene支持的东西吗?

2 个答案:

答案 0 :(得分:1)

使用标准分析器分析*.example.net将为您提供单个术语example.net - 即星号和第一个“。”被剥夺了。

使用 not_analyzed 会存储完整字段*.example.net(正如所料!)

如果通配符始终位于CN名称的开头,则使用简单的前缀查询将起作用(我简化了字段名称):

curl -XGET 'http://localhost:9200/mytest/certificates/_search?pretty' -d '{
 "query": {
    "prefix": { "cn.raw":"*"}
   }
 }'

但是,如果您想搜索不同级别的域名,则需要更改您正在使用的分析器。

E.g。使用pattern analyser并定义“。”作为分隔符或可能创建一个调用path hierarchy tokenizer的自定义分析器 - 它将取决于用户想要搜索数据的方式。

答案 1 :(得分:1)

感谢Olly的回答,我找到了一个有效的解决方案。一旦定义了raw字段,诀窍是逃避通配符将其视为一个字符,并用unescape通配符包围它,以接受周围的字符:

ca:false AND (subject.cn.raw:*\** OR x509v3Extensions.subjectAlternativeName.raw:*\**)