ElasticSearch multi_match query over multiple fields with Fuzziness

Funtriaco Prado picture Funtriaco Prado · Apr 14, 2015 · Viewed 16.2k times · Source

How can I add fuzziness to a multi_match query? So if someone is to search for 'basball' it would still find 'baseball' articles. Currently my query looks like this:

POST /newspaper/articles/_search
{
    "query": {
        "function_score": {
            "query": {
                "multi_match": {
                    "query": "baseball",
                    "type": "phrase",
                    "fields": [
                        "subject^3", 
                        "section^2.5", 
                        "article^2", 
                        "tags^1.5",
                        "notes^1"
                    ]
                }
            }
        }
    }
}

One option I was looking at is to do something like this, just don't know if this is the best option. It's important to keep the sorting based on the scoring:

   "query" : { 
      "query_string" : { 
         "query" : "subject:basball^3 section:basball^2.5 article:basball^2", 
         "fuzzy_prefix_length" : 1 
      } 
   } 

Suggestions?

Answer

nan-ead picture nan-ead · Apr 14, 2015

To add fuzziness to a multiquery you need to add the fuzziness property as described here:

{
    "query": {
        "function_score": {
            "query": {
                "multi_match": {
                    "query": "baseball",
                    "type": "phrase",
                    "fields": [
                        "subject^3", 
                        "section^2.5", 
                        "article^2", 
                        "tags^1.5",
                        "notes^1"
                    ],
                    "fuzziness" : "AUTO",
                    "prefix_length" : 2

                }
            }
        }
    }
}

Please notice that prefix_length explained in the doc as:

The number of initial characters which will not be “fuzzified”. This helps to reduce the number of terms which must be examined. Defaults to 0.

To check the possible values of fuzziness please visit the ES docs.