ElasticSearch上查询字符串的模糊查找

时间:2013-12-08 16:19:20

标签: elasticsearch query-string fuzzy-search

我正在使用ElasticSearch让用户搜索文本字段,包括连接的标记字符串。查询看起来像这样,它很好地工作:

{
    'query' : {
        'query_string' : {
            'query' : 'user query with +bool AND operators',
            'default_operator' : 'AND',
            'fields' : ['tag_string'],
            'analyzer' : 'my_analyzer'
        }
    }
}

但是,我想启用模糊匹配,以便涵盖英式英语和美式拼写。例如。我想得到“灰色”和“灰色”或“颜色”和“颜色”相同的结果。

这可以由用户使用模糊运算符“〜”来完成 - 因此搜索“color~”匹配“color”和“color”。但这应该自动完成......但是,搜索查询可能包含bool运算符,因此可能很复杂。

1 个答案:

答案 0 :(得分:2)

您可以使用模糊查询:

{
    "fuzzy" : { "user" : "ki" }
}

或者在fuzziness查询中使用match因子。在您的示例中实现您想要的另一种方法是使用同义词。使用同义词,您可以告诉elasticsearch将同义词与原始单词一起存储到您的单词中,例如:灰色将存储为灰色和灰色。

以下是对同义词的深入描述:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-synonym-tokenfilter.html