【发布时间】:2020-05-27 09:14:25
【问题描述】:
当使用simple_query_string 和前缀运算符* 和 模糊值~N 在同一个词上似乎禁用前缀搜索。
{
"query": {
"simple_query_string": {
"query": "Abcd*~2",
"fields": ["name"]
}
}
}
很明显,当您将模糊度设置为 0 并且查询变为 Abcd*~0 时,前缀将被禁用,然后没有前缀搜索,也没有模糊度。
文档中没有提到这一点,所以我不确定我是否做错了。
我试过了:
- 交换运算符顺序:
Abcd~2*-- 在_explain中这引入了模糊变化,但省略了前缀运算符 - 使用括号作为优先级:
(Abcd*)~2-- 在_explain中使用前缀但省略了模糊运算符1 - 复制单词:
(Abcd* Abcd~2)- 这很有效,它显然显示了两个查询的重聚,而不是两个效果的组合2。
1 我假设在这种情况下 ~2 不应被解释为 SLOP 运算符,因为没有短语(没有引号)。
2 我可以理解,合成这些效果可能会产生太多可能的变体——模糊添加 50 个变体,然后对每个变体进行前缀搜索,即
【问题讨论】:
-
在查询字符串中提到“避免将模糊性与通配符混合不支持混合模糊和通配符运算符。混合时,不应用其中一个运算符”elastic.co/guide/en/elasticsearch/reference/current/…。我认为这也适用于 simple_query_string
-
它可能共享一个底层实现。谢谢@jaspreetchahal 你能写下你的评论作为答案,以便我接受吗?
标签: elasticsearch elasticsearch-7