【问题标题】:Fuzzy lookup for query string on ElasticSearch在 ElasticSearch 上模糊查找查询字符串
【发布时间】:2013-12-08 16:19:20
【问题描述】:

我正在使用 ElasticSearch 让用户搜索文本字段,这些文本字段由连接的标签字符串组成。查询看起来像这样,并且运行良好:

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

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

这可以由用户通过使用模糊运算符“~”来完成 - 因此搜索“color~”会匹配“color”和“color”。但这应该自动完成……然而,搜索查询可能包含布尔运算符,因此可能很复杂。

【问题讨论】:

    标签: elasticsearch query-string fuzzy-search


    【解决方案1】:

    您可以使用模糊查询:

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

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

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

    【讨论】:

    • 谢谢!你能解释一下模糊因子是如何工作的吗?这些繁重的要求或性能是否可以接受?同义词可能很乏味,因为我们正在使用 20 种语言:-P
    【解决方案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
          }
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-01
      • 2015-07-19
      • 2014-12-09
      • 2012-05-05
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多