我们使用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
}
}
}
}
我们希望启用模糊匹配,而不是只提供拼写建议的后备 . 例如,如果用户搜索“stackoverfolw”,则ES应返回“stackoverflow”的匹配项 .
Additional question: "correcting"拼写错误表现更好的方法是什么?就像现在一样,我们必须执行两个后续请求,首先是原始搜索词,然后是by ES建议词 .
1 回答
query_string确实支持一些模糊性,但仅在使用〜运算符时,我认为这不是你的用法 . 我会添加fuzzy query然后将其放入或与现有的query_string一起使用 . 例如,您可以使用bool query并将模糊查询添加为should子句,将原始query_string保留为must子句 .
关于如何纠正拼写错误的其他问题:如果您希望用户从列表中选择正确的更正(例如,您的意思是),我会使用模糊查询自动纠正它们和两个后续请求,但您的方法听起来不错太 .