我正在尝试编写一个弹性搜索正则表达式,它排除了包含子字符串的键的元素,让我们在书名中说。
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的方式不存在错误。
有什么想法吗?提前谢谢!
答案 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
如果还有原始正则表达式的另一个想法,那还是很好奇