【问题标题】:Does using fuzziness disable prefix search in a simple_query_string是否在 simple_query_string 中使用模糊性禁用前缀搜索
【发布时间】: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


【解决方案1】:

根据查询字符串docs

不支持混合使用模糊和通配符运算符。混合时,一个 的运算符不适用。比如可以搜索app~1 (模糊)或 app*(通配符),但搜索 app*~1 时不应用 模糊算子 (~1)。

它考虑通配符或模糊,以先到者为准。 对于 Abcd~2* 它只是返回所有文件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 2020-05-06
    相关资源
    最近更新 更多