OpenSearch/Elasticsearch中Regexp过滤message字段的问题咨询
解决OpenSearch正则匹配含前缀文本的问题
问题核心原因
text字段会对内容分词,正则查询只能匹配单个分词后的词条,无法跨词匹配完整前缀;而keyword字段存储原始完整字符串,是匹配整句的正确选择。
正确的DSL过滤语句
针对message.keyword字段编写精准正则,匹配固定前缀+0-999.999的时间格式:
{ "query": { "bool": { "filter": [ { "regexp": { "message.keyword": "^Query from ES took:(?:\\d{1,3}(?:\\.\\d{1,3})?)s$" } } ] } } }
正则说明
^和$:限定匹配整个字符串,避免部分匹配\\d{1,3}:匹配1-3位数字(对应0-999的整数部分)(?:\\.\\d{1,3})?:可选的小数部分,匹配小数点后1-3位数字,?:表示非捕获组- 整个正则严格匹配
Query from ES took:X.YYYs格式,X为0-999,YYY为000-999(也支持无小数的格式,如took:5s)
内容的提问来源于stack exchange,提问作者Dudi Boy
相关产品推荐
相关产品推荐

