performance - 如何在 ElasticSearch 中为短语查询启用模糊性

标签 performance search elasticsearch fuzzy-search search-suggestion

我们使用 ElasticSearch 搜索数百万个标签。我们的用户应该能够包含 bool 运算符(+、-、“xy”、AND、OR、括号)。如果没有返回匹配项,我们将退回到 ES 提供的拼写建议并再次搜索。那是我们的查询:

$ curl -XGET 'http://127.0.0.1:9200/my_index/my_type/_search' -d '
{
    "query" : {
        "query_string" : {
            "query" : "some test query +bools -included",
            "default_operator" : "AND"
        }
    },
    "suggest" : {
        "text" : "some test query +bools -included",
        "simple_phrase" : {
            "phrase" : {
                "field" : "my_tags_field",
                "size" : 1
            }
        }
    }
}

我们希望启用模糊匹配,而不是仅提供拼写建议的回退。例如,如果用户搜索“stackoverfolw”,ES 应该返回“stackoverflow”的匹配项。

附加问题:“更正”拼写错误的性能更好的方法是什么?现在,我们必须执行两个后续请求,首先使用原始搜索词,然后使用 ES 建议的词。

最佳答案

query_string 确实支持一些模糊性,但仅在使用 ~ 运算符时才支持,我认为这不是您的用例。我会添加 fuzzy query然后将其放入或与现有的 query_string 一起。例如,您可以使用 bool query并将模糊查询添加为 should 子句,将原始 query_string 保留为 must 子句。

关于如何纠正拼写错误的附加问题:如果您希望用户从列表中选择正确的更正(例如,您的意思是),我会使用模糊查询来自动更正拼写错误和两个后续请求,但是您的方法听起来也不错。

关于performance - 如何在 ElasticSearch 中为短语查询启用模糊性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18677771/

相关文章:

performance - 不要指针抑制编译器优化?

performance - Go按位运算性能之谜

python - 在 mongodb 中查询大列表的最快方法

java - 如何在 Java 中搜索坐标数组?

elasticsearch - 为什么elasticsearch不允许更改索引数据?

elasticsearch - 获取 Elasticsearch 中字段值与任意数组元素匹配的所有文档

c - 即使我将输出重定向到/dev/null,printf 仍然会产生成本吗?

python - 为什么将我的模块分成多个文件会使它变慢?

arrays - 如何有效地搜索数组中的特定序列?

java - elasticsearch 未启动 {0.90.0} : Startup Failed