繁体   English   中英

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

[英]Search for a string that start with a wildcard in ElasticSearch

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

为了匹配诸如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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM