elasticsearch - 是否在 simple_query_string 中使用模糊性禁用前缀搜索
问题描述
当在同一个单词上使用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 个变体,然后对每个变体进行前缀搜索,即
解决方案
根据查询字符串文档
不支持混合使用模糊和通配符运算符。混合时,不应用运算符之一。例如,您可以搜索 app~1(模糊)或 app*(通配符),但搜索 app*~1 不会应用模糊运算符 (~1)。
它考虑通配符或模糊,以先到者为准。对于 Abcd~2* 它只是返回所有文件
推荐阅读
- laravel-5.5 - 根据 Laravel 5.5 中的复选框检查进行验证调用
- bash - 如何将昨天的日期参数传递给 cron 作业
- c# - 无法找到 ArgumentException 的根本原因
- c# - 字符串拆分函数如何在 C# 内部工作?
- java - 为什么此照明代码仅适用于单个灯并且在我添加多个灯时会中断?
- regex - Perl 正则表达式作为用户搜索输入(清理)
- javascript - 无法在某些文件夹中执行 fs.write 操作
- c# - 使用 access 数据库中的数据填充列表
- android - 无法从“使用 google plus 登录”中的 google 状态获取数据
- git - git:如何在变基后合并或变基?