我正在使用ElasticSearch让用户搜索文本字段,包括连接的标记字符串。查询看起来像这样,它很好地工作:
{
'query' : {
'query_string' : {
'query' : 'user query with +bool AND operators',
'default_operator' : 'AND',
'fields' : ['tag_string'],
'analyzer' : 'my_analyzer'
}
}
}
但是,我想启用模糊匹配,以便涵盖英式英语和美式拼写。例如。我想得到“灰色”和“灰色”或“颜色”和“颜色”相同的结果。
这可以由用户使用模糊运算符“〜”来完成 - 因此搜索“color~”匹配“color”和“color”。但这应该自动完成......但是,搜索查询可能包含bool运算符,因此可能很复杂。
答案 0 :(得分:2)
您可以使用模糊查询:
{
"fuzzy" : { "user" : "ki" }
}
或者在fuzziness
查询中使用match
因子。在您的示例中实现您想要的另一种方法是使用同义词。使用同义词,您可以告诉elasticsearch将同义词与原始单词一起存储到您的单词中,例如:灰色将存储为灰色和灰色。
以下是对同义词的深入描述:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-synonym-tokenfilter.html