ehsan shirzadi
ehsan shirzadi

Reputation: 4859

Is there any method in Elastic Search to get result in case of misspelling?

I want to know if it's possible to search among the data in case of misspelling like we search in google. Currently this query returns thousands of results:

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

but when I change it to:

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

"obama" replaced with "omama" there is no result. is it possible to get results in case of wrong spelling?

Upvotes: 0

Views: 213

Answers (2)

Roopendra
Roopendra

Reputation: 7776

I think what you are looking for is Fuzzy Query .

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

If you are run this on single field the you can use fuzzy query like this field

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

You can also check Phonetic Matching

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

Upvotes: 1

ThomasC
ThomasC

Reputation: 8165

Simply use a fuzzy query, (documentation) :

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

You should get your result :

{
   "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"
            }
         }
      ]
   }
}

Upvotes: 1

Related Questions