如何使用Elasticsearch容忍拼写错误?

时间:2015-03-30 10:53:43

标签: elasticsearch

我正在使用query_string,我希望能够让我的搜索能够容忍错别字。在下面的查询中,我输入了The Gren Mile,但它没有返回任何结果:

curl -XPOST 127.0.0.1:9200/test
curl -XPOST 127.0.0.1:9200/test/movies -d '{"title": "The Green Mile"}'
curl -XPOST 127.0.0.1:9200/test/_refresh
curl -XPOST 127.0.0.1:9200/test/movies/_search -d '{
  "query": {
    "query_string": {
      "query": "The Gren Mile",
      "default_operator": "AND"
    }
  }
}'

它在Elasticsearch docs中说明fuzziness默认为AUTO(随着字词越来越大,容忍更大的拼写错误),所以我不知道它为什么没有#&# 39;工作。我尝试手动设置fuzziness: 2,但它也没有用。这个选项是否做了我认为的其他事情?

1 个答案:

答案 0 :(得分:1)

我没有得到关于为什么模糊参数不起作用的答案 - 它对我来说也不起作用,可能这是一个错误?

然而,将模糊运算符~直接放在字符串中可以起作用:

curl -XPOST 127.0.0.1:9200/test/movies/_search?pretty -d '{
  "query": {
    "query_string": {
      "query": "The Gren~ Mile",
      "default_operator": "AND"
    }
  }
}'

返回记录:

{
  "took" : 6,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 0.263573,
    "hits" : [ {
      "_index" : "test",
      "_type" : "movies",
      "_id" : "AUxq8KE1EKExB5CrkB_W",
      "_score" : 0.263573,
      "_source":{"title": "The Green Mile"}
    } ]
  }
}

匹配查询

使用匹配查询的模糊性工作。将query_string与匹配查询组合(以形成单个查询),或者如果用户的原始搜索未返回任何结果,则执行匹配查询。

  "query": {
    "match": {
      "title": {
        "query": "The Gren Mile",
        "operator" : "and",
        "fuzziness": 2
      }
    }
  }