Elasticsearch regexp查询匹配python access*无结果 求Kibana使用指导
Elasticsearch前缀匹配查询无结果排查方案
核心问题原因
你当前的查询有两个典型错误:
- Elasticsearch的
regexp查询的正则语法和shell通配符规则不同:你写的python access*实际代表匹配python acces后面跟0个或多个s,完全无法实现你要的python access后接任意字符的需求。 - 如果你的
bibliographicInformation.title是text类型,字段内容会被分词为多个独立词条,regexp查询默认只能匹配单个分词词条,无法跨多个词条匹配python access这个短语。
最优解决方案(推荐)
你的需求是匹配短语开头的内容,直接使用ES原生的match_phrase_prefix查询即可,性能远高于正则查询,且天然支持跨分词的短语匹配,语句如下:
GET /manifestation_v1/_search { "query": { "match_phrase_prefix": { "bibliographicInformation.title": "python access" } } }
坚持使用正则查询的修正写法
如果确实需要使用正则实现,需要优先使用该字段的keyword子类型(存储完整的未分词文本),同时修正正则表达式:
GET /manifestation_v1/_search { "query": { "regexp": { "bibliographicInformation.title.keyword": { "value": "python access.*" } } } }
正则中.代表匹配任意单个字符,*代表匹配前一个字符0次或多次,组合起来.*才代表任意长度的任意字符。
内容的提问来源于stack exchange,提问作者Nehal Trivedi
相关产品推荐
相关产品推荐

