关键是您使用的ElasticSearch正则表达式需要
完整的字符串匹配 :
Lucene的模式总是锚定的 。提供的模式 必须与整个字符串匹配 。
因此,要匹配任何字符(除了换行符),可以使用
.*pattern:
match: { text: '.*google.*'} ^^ ^^另外一种变体是针对您的字符串可以包含换行符的情况:
match: { text:'(.|n)*google(.|n)*'}。这可怕的(.|n)*是ElasticSearch必须的,因为这正则表达式的味道不允许任何
[sS]解决方法,也没有任何DOTALL
/单行标志。 “
Lucene正则表达式引擎不兼容Perl,但支持较小范围的运算符。”
但是 ,如果您不打算匹配任何复杂的模式并且不需要单词边界检查,那么仅使用 通配符搜索 就可以更好地执行仅对子字符串进行正则表达式
搜索 :
{ "query": { "wildcard": { "text": { "value": "*google*", "boost": 1.0, "rewrite": "constant_score" } } }}有关更多详细信息,请参见
通配符搜索 。
注意 :通配符模式还需要匹配整个输入字符串,因此
google*
查找所有以 开头的 字符串 __google
*google*
查找 包含的 所有字符串 __google
*google
查找所有 以结尾的 字符串 __google
另外,请记住通配符模式中仅有的一对特殊字符:
?, which matches any single character*, which can match zero or more characters, including an empty one



