Fuzzy query
Fuzzy query
Returns documents that contain terms similar to the search term, as measured by a 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 (box → fox)
- Removing a character (black → lack)
- Inserting a character (sic → sick)
- Transposing two adjacent characters (act → cat)
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.
Example requests
Simple example
resp = client.search(
query={
"fuzzy": {
"user.id": {
"value": "ki"
}
}
},
)
print(resp)
response = client.search(
body: {
query: {
fuzzy: {
'user.id' => {
value: 'ki'
}
}
}
}
)
puts response
const response = await client.search({
query: {
fuzzy: {
"user.id": {
value: "ki",
},
},
},
});
console.log(response);
GET /_search
{
"query": {
"fuzzy": {
"user.id": {
"value": "ki"
}
}
}
}
Example using advanced parameters
resp = client.search(
query={
"fuzzy": {
"user.id": {
"value": "ki",
"fuzziness": "AUTO",
"max_expansions": 50,
"prefix_length": 0,
"transpositions": True,
"rewrite": "constant_score_blended"
}
}
},
)
print(resp)
response = client.search(
body: {
query: {
fuzzy: {
'user.id' => {
value: 'ki',
fuzziness: 'AUTO',
max_expansions: 50,
prefix_length: 0,
transpositions: true,
rewrite: 'constant_score_blended'
}
}
}
}
)
puts response
const response = await client.search({
query: {
fuzzy: {
"user.id": {
value: "ki",
fuzziness: "AUTO",
max_expansions: 50,
prefix_length: 0,
transpositions: true,
rewrite: "constant_score_blended",
},
},
},
});
console.log(response);
GET /_search
{
"query": {
"fuzzy": {
"user.id": {
"value": "ki",
"fuzziness": "AUTO",
"max_expansions": 50,
"prefix_length": 0,
"transpositions": true,
"rewrite": "constant_score_blended"
}
}
}
}
Top-level parameters for fuzzy
<field>
(Required, object) Field you wish to search.
Parameters for <field>
value
(Required, string) Term you wish to find in the provided <field>
.
fuzziness
(Optional, string) Maximum edit distance allowed for matching. See Fuzziness for valid values and more information.
max_expansions
(Optional, integer) Maximum number of variations created. Defaults to 50
.
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 rewrite parameter.
Notes
Fuzzy queries will not be executed if search.allow_expensive_queries is set to false.