首页 文章

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

提问于
浏览
3

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

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

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

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

2 回答

  • 1

    您可以使用模糊查询:

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

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

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

  • 2

    fuzzy搜索的另一个例子(如果你要使用它)

    POST /IndexName/TypeName/_search?size=200
    {
       "query": {
          "fuzzy": {
             "FieldName": {
                "value": "gray",
                "fuzziness": 2,
                "prefix_length": 1,
                "boost": 5
             }
          }
       }
    }
    

    用于多字搜索fuzzy_like_this

    POST /IndexName/TypeName/_search?size=200
    {
       "query": {
          "fuzzy_like_this": {
             "fields": ["FieldName1","FieldName2"],
             "like_text": "user query with +bool AND operators",
             "max_query_terms": 12,
             "fuzziness": 0.5
          }
       }
    }
    

相关问题