[英]Search for a string that start with a wildcard in ElasticSearch
我正在构建一个显示有关X509 certificates
信息的kibana仪表板。 我想构建证书的饼图,在其CN
或SAN
属性中包含通配符,但是找不到有效的查询语法。
为了匹配诸如subject.cn: "*.example.net"
类的字符串,我尝试了以下kibana查询:
subject.cn:/\*./
subject.cn:/^\*./
subject.cn:\*\.
subject.cn:\*.
subject.cn:*.
有人可以指出我正确的语法吗? 这甚至是ES / Lucene支持的东西吗?
使用标准分析器分析 *.example.net
将为您提供example.net
的单个术语-即星号和第一个“。”。 已被剥离。
使用not_analyzed将存储完整的字段*.example.net
(按预期!)
如果通配符始终位于CN名称的开头,则可以使用简单的前缀查询(我已经简化了字段名称):
curl -XGET 'http://localhost:9200/mytest/certificates/_search?pretty' -d '{
"query": {
"prefix": { "cn.raw":"*"}
}
}'
但是,如果要针对不同级别的域名进行搜索,则需要更改所使用的分析仪。
例如,使用模式分析器并定义“。” 作为您的定界符,或者可能创建一个定制的分析器来调用路径层次标记器 -这将取决于用户希望如何搜索您的数据。
多亏Olly的回答,我才找到了可行的解决方案。 定义raw
字段后,诀窍是转义通配符以将其视为字符,并用unescape通配符将其包围,以接受周围的字符:
ca:false AND (subject.cn.raw:*\** OR x509v3Extensions.subjectAlternativeName.raw:*\**)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.