Elasticsearch正则表达式匹配含空格内容失效问题求助
Elasticsearch正则匹配keyword字段空格问题的解决方案
问题根源
你的问题出在JSON转义与Elasticsearch正则引擎的双重转义要求上:
- 当你在JSON查询DSL中写
\s时,JSON会先把它解析成普通字符s,导致正则实际匹配的是AkeshsJadhav,自然无法匹配原文档里的空格。 - 你尝试的
\\s在JSON中会被解析成\s,但部分客户端(比如直接写JSON文件)可能还需要再转一层,才能让Elasticsearch正则引擎识别为空白符匹配符。
正确的正则写法
以下几种写法都可以实现需求:
双重转义匹配任意空白符
在JSON字符串中,需要把\s写成\\\\s(每个反斜杠都要被JSON转义一次),最终的查询DSL示例:{ "query": { "regexp": { "content.keyword": "Akesh\\\\sJadhav" } } }如果是在Kibana Dev Tools这类自带转义处理的环境中,可以简化为
Akesh\\sJadhav:GET /your_index_name/_search { "query": { "regexp": { "content.keyword": "Akesh\\sJadhav" } } }直接匹配单个空格
如果确定是单个普通空格,也可以直接写空格,或者用字符类包裹,避免转义问题:{ "query": { "regexp": { "content.keyword": "Akesh Jadhav" } } }或者用字符类精确匹配空格:
{ "query": { "regexp": { "content.keyword": "Akesh[ ]Jadhav" } } }
验证说明
以上写法都会匹配content.keyword字段中包含Akesh后跟空白符(或精确空格)再跟Jadhav的内容,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Rutuja Morye
相关产品推荐
相关产品推荐

