Elasticsearch-文本类型正则表达式

时间:2018-08-02 05:07:14

标签: elasticsearch

elasticsearch是否支持对文本类型字符串进行正则表达式搜索?

我创建了如下文档。

{
  "T": "a$b$c$d"
}

,我尝试使用以下查询搜索此文档。

{
  "query": {
    "query_string": {
      "query": "T:/a.*/"
    }
  }
}

对我来说似乎有用,但是当我尝试使用'$'符号进行查询时。找不到文档。

{
  "query": {
    "query_string": {
      "query": "T:/a$.*/"
    }
  }
}

我应该如何查找文档?此关键数据应为文本类型(而非关键字),因为它可以长于关键字最大长度。

1 个答案:

答案 0 :(得分:0)

您应该在这里注意一些事情:

  • 如果对您的字段进行了分析(并在过程中进行了标记),则只会在包含与RegExp匹配的标记(而不是整个“文本”)的字段中找到匹配项。如果要使字段的全部内容匹配,则必须使用关键字字段或至少使用Keyword Analyzer来标记文本。
  • $符号在正则表达式中具有特殊含义(它标记字符串的结尾),因此您必须对其进行转义:a\$.*
  • 您的RegExp必须与整个令牌匹配才能获得成功。这就是为什么没有必要将$用作(非转义的)RegExp符号:无论如何,您的RegExp 必须匹配整个令牌。因此,(以您的示例为准)要匹配a后跟c的字段,则需要.*?a[^c]*c.*,或者如果您 {{ 1}}个在其中,请对其进行转义:$