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

Sim*_*ger 5 performance search fuzzy-search elasticsearch search-suggestion

我们使用ElasticSearch搜索数百万个标签.我们的用户应该能够包含布尔运算符(+, - ,"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
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我们希望启用模糊匹配,而不是只提供拼写建议的后备.例如,如果用户搜索"stackoverfolw",则ES应返回"stackoverflow"的匹配项.

附加问题: "纠正"拼写错误的表现更好的方法是什么?就像现在一样,我们必须执行两个后续请求,首先是原始搜索词,然后是by ES建议词.

jav*_*nna 4

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

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