8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

elasticsearch 中无法识别的字符转义

季子墨 1月前

15 0

一直尝试在 elasticsearch 中进行正则表达式搜索,使用以下查询:{\'query\':{\'constant_score\':{\'filter\':{\'bool\':{\'must\':[{\'regexp\':{...

一直尝试在 elasticsearch 中进行正则表达式搜索,查询如下:

{
"query": {
  "constant_score": {
    "filter": {
      "bool": {
        "must": [
          {
            "regexp": {
              "displayName" : "(^a\w+| a(\w+))"
            }
          }
        ]
      }
    }
  }
}
}

此正则表达式在 https://regex101.com/ ,但上述查询给出:

nested: QueryParsingException[[bm_md_acct_9993342_v1] Failed to parse]; nested: JsonParseException[Unrecognized character escape 'w' (code 119)\n at [Source: UNKNOWN; line: 10, column: 37]]; }

我尝试过用不同的方法进行转义,但都没有成功。我该如何正确地设置转义序列?

尝试过:

{
"query": {
  "constant_score": {
    "filter": {
      "bool": {
        "must": [
          {
            "regexp": {
              "displayName" : "(^J\\w+| J(\\w+))"
            }
          }
        ]
      }
    }
  }
}
}

即使存在 displayName \'Jason Cremer\' 的记录,也会产生空结果。

帖子版权声明 1、本帖标题:elasticsearch 中无法识别的字符转义
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由季子墨在本站《elasticsearch》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 根据 Elasticsearch 正则表达式文档 ,它的语法不支持其他正则表达式中常见的简写字符类,因此您无法使用 \w ,只能使用字符类(或括号表达式)来 [a-zA-Z] 匹配字母,或 [a-zA-Z0-9_] 匹配 \w JavaScript 中匹配的内容。

    接下来, ^ $ 在其他风格中也很常见,但 ES 正则表达式不支持。整个模式 默认是锚定的 ,因此这些甚至不是必需的。

    现在,你想要任何有 inside 的单词 J 。有几种选择:

    1. ".*J.*" 将匹配包含以下项的任何字符串 J
    2. ".*J[a-zA-Z].*" 将匹配包含 J 字母
    3. "J[a-zA-Z].*|.* J[a-zA-Z].*" 将匹配以 开头的任意字符串 J ,然后是字母,然后是任意字符,或者包含空格、 J 以及其后的任意字母的任意字符串。
  • elasticsearch 中的正则表达式查询不是完全灵活的。
    例如, \w 在正常正则表达式约定中匹配任何单词字符,但在 elasticsearch 中您无法表示, \w 因为 \ 它是 elasticsearch 中的保留字符。

    为了使其 \w 在 elasticsearch 中有效,我们必须使用转义符 \ ,这会将您的正则表达式转换为 \\\w 。现在这 \\\w 会改变您的正则表达式的含义。

    它将匹配 "\" followed by "w" rather than matching word character .

    我的建议是将正则表达式中的 \w 替换为 [a-zA-Z0-9_]。这样可以。而且您不能将 ^ 其用于单个字符。从正则表达式中删除它,您的查询将是

     { "query": {   "constant_score": {
         "filter": {
           "bool": {
             "must": [
               {
                 "regexp": {
                   "displayName" : "(J[a-zA-Z0-9_]+| J([a-zA-Z0-9_]+))"
                 }
               }
             ]
           }
         }   } } }
    
返回
作者最近主题: