2013-08-29 01:24:34 +02:00
[[query-dsl-fuzzy-query]]
2015-06-04 01:59:22 +02:00
=== Fuzzy Query
2013-08-29 01:24:34 +02:00
2016-02-29 10:21:39 -05:00
deprecated[5.0.0, Will be removed without a replacement for `string` fields. Note that the `fuzziness` parameter is still supported for match queries and in suggesters. Use range queries for `date` and `numeric` fields instead.]
2016-01-25 15:24:10 +01:00
2014-01-02 16:45:24 +01:00
The fuzzy query uses similarity based on Levenshtein edit distance for
`string` fields, and a `+/-` margin on numeric and date fields.
2013-08-29 01:24:34 +02:00
2015-06-04 01:59:22 +02:00
==== String fields
2014-01-02 16:45:24 +01:00
The `fuzzy` query generates all possible matching terms that are within the
maximum edit distance specified in `fuzziness` and then checks the term
dictionary to find out which of those generated terms actually exist in the
index.
2013-08-29 01:24:34 +02:00
Here is a simple example:
[source,js]
--------------------------------------------------
{
"fuzzy" : { "user" : "ki" }
}
--------------------------------------------------
2014-01-02 16:45:24 +01:00
Or with more advanced settings:
2013-08-29 01:24:34 +02:00
[source,js]
--------------------------------------------------
2014-01-02 16:45:24 +01:00
{
"fuzzy" : {
"user" : {
"value" : "ki",
"boost" : 1.0,
"fuzziness" : 2,
"prefix_length" : 0,
"max_expansions": 100
2013-08-29 01:24:34 +02:00
}
}
2014-01-02 16:45:24 +01:00
}
2013-08-29 01:24:34 +02:00
--------------------------------------------------
2014-01-02 16:45:24 +01:00
[float]
2015-06-04 01:59:22 +02:00
===== Parameters
2014-01-02 16:45:24 +01:00
[horizontal]
`fuzziness`::
The maximum edit distance. Defaults to `AUTO`. See <<fuzziness>>.
`prefix_length`::
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`.
`max_expansions`::
The maximum number of terms that the `fuzzy` query will expand to.
2014-05-13 18:12:05 +04:00
Defaults to `50`.
2014-01-02 16:45:24 +01:00
2015-10-13 21:03:46 +02:00
WARNING: This query can be very heavy if `prefix_length` is set to `0` and if
`max_expansions` is set to a high number. It could result in every term in the
index being examined!
2013-08-29 01:24:34 +02:00
[float]
2015-06-04 01:59:22 +02:00
==== Numeric and date fields
2014-01-02 16:45:24 +01:00
Performs a <<query-dsl-range-query>> ``around'' the value using the
`fuzziness` value as a `+/-` range, where:
-fuzziness <= field value <= +fuzziness
2013-08-29 01:24:34 +02:00
2014-01-02 16:45:24 +01:00
For example:
2013-08-29 01:24:34 +02:00
[source,js]
--------------------------------------------------
{
"fuzzy" : {
"price" : {
"value" : 12,
2014-01-02 16:45:24 +01:00
"fuzziness" : 2
2013-08-29 01:24:34 +02:00
}
}
}
--------------------------------------------------
2014-01-02 16:45:24 +01:00
Will result in a range query between 10 and 14. Date fields support
<<time-units,time values>>, eg:
2013-08-29 01:24:34 +02:00
[source,js]
--------------------------------------------------
{
"fuzzy" : {
"created" : {
"value" : "2010-02-05T12:05:07",
2014-01-02 16:45:24 +01:00
"fuzziness" : "1d"
2013-08-29 01:24:34 +02:00
}
}
}
--------------------------------------------------
2014-01-02 16:45:24 +01:00
See <<fuzziness>> for more details about accepted values.