我们使用 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”的匹配项。
附加问题: “纠正”拼写错误的性能更好的方法是什么?就像现在一样,我们必须执行两个后续请求,首先使用原始搜索词,然后使用 by ES 建议词。