Performance 如何在ElasticSearch中实现短语查询的模糊性
我们使用ElasticSearch搜索数百万个标签。我们的用户应该能够包括布尔运算符(+、-、“xy”和或括号)。如果未返回任何点击,我们将返回ES提供的拼写建议并再次搜索。这就是我们的疑问:Performance 如何在ElasticSearch中实现短语查询的模糊性,performance,search,
elasticsearch,fuzzy-search,search-suggestion,Performance,Search,
elasticsearch,Fuzzy Search,Search Suggestion,我们使用ElasticSearch搜索数百万个标签。我们的用户应该能够包括布尔运算符(+、-、“xy”和或括号)。如果未返回任何点击,我们将返回ES提供的拼写建议并再次搜索。这就是我们的疑问: $ curl -XGET 'http://127.0.0.1:9200/my_index/my_type/_search' -d ' { "query" : { "query_string" : { "query" : "some test query +b
$ 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
}
}
}
}
我们希望启用模糊匹配,而不是仅提供拼写建议的回退。例如,如果用户搜索“stackoverflow”,ES应返回“stackoverflow”的匹配项
附加问题:什么是“纠正”拼写错误的更好方法?现在,我们必须执行两个后续请求,首先使用原始搜索词,然后使用by ES建议词。查询字符串确实支持一些模糊性,但仅在使用~运算符时,我认为这与您的用例不符。我会添加一个,然后将其放入现有的查询字符串中。例如,您可以使用a并将模糊查询添加为should子句,将原始查询字符串保留为must子句
至于你关于如何纠正拼写错误的附加问题:如果你想让用户从列表中选择正确的纠正方法(例如,你的意思是什么),我会使用模糊查询自动纠正拼写错误,并随后发出两个请求,但你的方法听起来也不错。谢谢-这证实了我的想法。无论如何,我们坚持我们已经拥有的。这似乎是一种更快的方法。关于“模糊查询”,ElasticSearch文档甚至提到了一个关于不具有良好可扩展性的警告。