在弹性搜索中使用regexp过滤器开始的正则表达式是什么?

时间:2014-04-08 02:51:07

标签: java regex filter elasticsearch

我正在使用Elastic Search处理搜索引擎 - 我正在使用它的Java API。并且想为我的查询配置一个regexp过滤器,特别是“以”开头“过滤器。

假设我的索引中有这些标题:

  1. 世界
  2. 关于他的事情
  3. 乔治的最后通
  4. 吉米和羊群
  5. 如果我想从字母t或th开始准确地得到结果,我应该使用什么正则表达式?

    搜索后的正确结果

    1. 世界
    2. 关于他的事情
    3. 我尝试过使用:

      ^t.*   OR   ^[t.*]
      

      但不会返回任何结果。即使文档说明了,起始锚^也不适用于弹性。

      t.*   OR   [t.*]
      

      但它的作用就像前缀过滤器一样,并包含结果“jimmy and the flock”

      注意:

      • 我无法使用正则表达式查询(我正在构建的搜索引擎的限制)所以我​​被迫只使用过滤器
      • 我尝试使用前缀过滤器,但它会评估术语,例如使用前缀参数“t”将包含标题“jimmy and the flock”,因为“the”一词

      BTW,我正在使用ES版本1.0.0

1 个答案:

答案 0 :(得分:1)

ElasticSearch博客上有一个特殊页面可以准确回答您的问题:http://www.elasticsearch.org/blog/starts-with-phrase-matching/; 正如pickypg建议的那样,这是一个映射问题,你必须设置一个特殊的分析器,它结合了“关键字”标记器和“小写”过滤器。