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