如何在Elasticsearch regexp中排除子字符串

时间:2018-05-01 15:23:48

标签: regex elasticsearch

我正在尝试编写一个弹性搜索正则表达式,它排除了包含子字符串的键的元素,让我们在书名中说。

elasticsearch docs表示可以使用以下代码段排除子字符串:

@&~(foo.+) # anything except string beginning with "foo"

然而,在我的情况下,我试图创建这样的过滤器并失败。

  {
    query: {
      constant_score: {
        filter: {
          bool: {
            filter: query_filters,
          },
        },
      },
    },
    size: 1_000,
  }


def query_filters
  [
    { regexp: { title: "@&~(red)" } },
    # goal: exclude titles that start with "Red" 
  ]
end

我在相同的查询过滤器中使用了其他正则表达式,所以我认为正则表达式传递给ES的方式不存在错误。

有什么想法吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

更新

我找到了一种解决方法:我可以在过滤器中添加 { query: { constant_score: { filter: { bool: { filter: query_filters, must_not: must_not_filters, }, }, }, }, size: 1_000, } def must_not_filters [ { regexp: { title: "red.*" } } ] end 子句。

rebase

如果还有原始正则表达式的另一个想法,那还是很好奇