Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Find actual matching word when using fuzzy query in elastic search

I am new to elasticsearch and was looking around fuzzy query search.
I have made a new index products with object/record values like this

{
            "_index": "products",
            "_type": "product",
            "_id": "10",
            "_score": 1,
            "_source": {
                "value": [
                    "Ipad",
                    "Apple",
                    "Air",
                    "32 GB"
                ]
            }
        }

Now when i am performing a fuzzy query search in elasticsearch like

{
   query: {
       fuzzy: {
          value: "tpad"
       }
   }
}

It returns me the correct record (the product just made above) which is expected.
And i know that the term tpad matches ipad so record was return.
But technically how would i know that it has matched ipad. Elastic search just returns the full record(or records) like this

{
"took": 4,
"timed_out": false,
"_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
},
"hits": {
    "total": 1,
    "max_score": 0.61489093,
    "hits": [
        {
            "_index": "products",
            "_type": "product",
            "_id": "10",
            "_score": 0.61489093,
            "_source": {
                "value": [
                    "Ipad",
                    "Apple",
                    "Air",
                    "32 GB"
                ]
            }
        }
    ]
}
}

Is there any way in elastic search so that i can know if it has matched tpad against ipad

like image 208
Yogesh Khatri Avatar asked Nov 15 '14 11:11

Yogesh Khatri


People also ask

How do you handle typos in Elasticsearch using fuzzy query?

Handling a typo in Elasticsearch is very easy and can improve the user's experience. The simplest way to handle a typo is to just add "fuzziness":"AUTO" in your Match Query. If you want to tune the Query, there are some parameters that you can change with the "fuzziness" being the most important.

What is fuzzy matching in Elasticsearch?

Elasticsearch is a powerful open source search and analytics engine that makes data easy to explore. Kibana is its intuitive and beautiful visualization tool. Fuzzy matching is a technique used to match two strings that are not exactly alike.

How does Elasticsearch fuzzy search work?

In Elasticsearch, fuzzy query means the terms are not the exact matches of the index. The result is 2, but you can use fuzziness to find the correct word for a typo in Elasticsearch's fuzzy in Match Query. For 6 characters, the Elasticsearch by default will allow 2 edit distance.


1 Answers

if you use highlighting, Elasticsearch will show the terms that matched:

curl -XGET http://localhost:9200/products/product/_search?pretty -d '{
  "query" : {
    "fuzzy" : {
        "value" : "tpad"
      }
  },
  "highlight": {
    "fields" : {
        "value" : {}
    }
  }
}'

Elasticsearch will return matching documents with the fragment highlighted:

{
  "took" : 31,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 0.13424811,
    "hits" : [ {
      "_index" : "products",
      "_type" : "product",
      "_id" : "10",
      "_score" : 0.13424811,
      "_source":{
 "value" : ["Ipad",
                "Apple",
                "Air",
                "32 GB"
                ]
           },
      "highlight" : {
        "value" : [ "<em>Ipad</em>" ]
      }
    } ]
  }
}
like image 156
Olly Cruickshank Avatar answered Sep 22 '22 06:09

Olly Cruickshank