[[query-dsl-fuzzy-query]]
=== Fuzzy query
++++
Fuzzy
++++
Returns documents that contain terms similar to the search term, as measured by
a https://en.wikipedia.org/wiki/Levenshtein_distance[Levenshtein edit distance].
An edit distance is the number of one-character changes needed to turn one term
into another. These changes can include:
* Changing a character (**b**ox → **f**ox)
* Removing a character (**b**lack → lack)
* Inserting a character (sic → sic**k**)
* Transposing two adjacent characters (**ac**t → **ca**t)
To find similar terms, the `fuzzy` query creates a set of all possible
variations, or expansions, of the search term within a specified edit distance.
The query then returns exact matches for each expansion.
[[fuzzy-query-ex-request]]
==== Example requests
[[fuzzy-query-ex-simple]]
===== Simple example
[source,console]
----
GET /_search
{
"query": {
"fuzzy": {
"user.id": {
"value": "ki"
}
}
}
}
----
[[fuzzy-query-ex-advanced]]
===== Example using advanced parameters
[source,console]
----
GET /_search
{
"query": {
"fuzzy": {
"user.id": {
"value": "ki",
"fuzziness": "AUTO",
"max_expansions": 50,
"prefix_length": 0,
"transpositions": true,
"rewrite": "constant_score"
}
}
}
}
----
[[fuzzy-query-top-level-params]]
==== Top-level parameters for `fuzzy`
``::
(Required, object) Field you wish to search.
[[fuzzy-query-field-params]]
==== Parameters for ``
`value`::
(Required, string) Term you wish to find in the provided ``.
`fuzziness`::
(Optional, string) Maximum edit distance allowed for matching. See <>
for valid values and more information.
`max_expansions`::
+
--
(Optional, integer) Maximum number of variations created. Defaults to `50`.
WARNING: Avoid using a high value in the `max_expansions` parameter, especially
if the `prefix_length` parameter value is `0`. High values in the
`max_expansions` parameter can cause poor performance due to the high number of
variations examined.
--
`prefix_length`::
(Optional, integer) Number of beginning characters left unchanged when creating
expansions. Defaults to `0`.
`transpositions`::
(Optional, boolean) Indicates whether edits include transpositions of two
adjacent characters (ab → ba). Defaults to `true`.
`rewrite`::
(Optional, string) Method used to rewrite the query. For valid values and more
information, see the <>.
==== Notes
Fuzzy queries will not be executed if <>
is set to false.