在弹性搜索中是否有任何方法可以在拼写错误的情况下获得结果?

时间:2014-09-29 06:14:25

标签: elasticsearch

我想知道是否可以在拼写错误的情况下搜索数据,就像我们在谷歌搜索一样。 目前,此查询会返回数千个结果:

{
  "query": {
    "query_string": {
      "query": "obama"
    }
  }
}

但是当我把它改为:

{
  "query": {
    "query_string": {
      "query": "omama"
    }
  }
}

“奥巴马”取代“奥马玛”没有结果。如果拼写错误,是否可以获得结果?

2 个答案:

答案 0 :(得分:1)

我认为你要找的是Fuzzy Query

{
   "query": {
       "fuzzy": {
            "field_name" : "omama" 
       }
   }
}

如果您在单个字段上运行此操作,则可以使用fuzzy query like this field

{
    "fuzzy_like_this_field" : {
        "name.first" : {
            "like_text" : "omama",
            "max_query_terms" : 12
        }
    }
}

您还可以查看Phonetic Matching

https://github.com/elasticsearch/elasticsearch-analysis-phonetic

答案 1 :(得分:1)

只需使用fuzzy查询,(documentation):

{
  "query": {
    "fuzzy": {
      "name": "omama"
    }
  }
}

你应该得到你的结果:

{
   "took": 12,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 1,
      "max_score": 2.7917595,
      "hits": [
         {
            "_index": "test",
            "_type": "obama",
            "_id": "D_ovfcHkQwODdftWM4_z1Q",
            "_score": 2.7917595,
            "_source": {
               "name": "obama"
            }
         }
      ]
   }
}