Нечіткий пошук в Elasticsearch
Нечіткий пошук збігається з опечатками та помилками: "elasticsearch" збігається з "elasti*searh", "elastikserch".
Fuzzy запит
GET /products/_search
{
"query": {
"fuzzy": {
"name": {
"value": "elasticsearch",
"fuzziness": "AUTO", // авто-налаштування за довжиною терму
"max_expansions": 50,
"prefix_length": 0 // 0 = дозвіл на префіксну невідповідність
}
}
}
}
Значення fuzziness:
-
0- точний збіг тільки -
1- 1 редакційна відстань (видалення, вставка або заміна) -
2- 2 редакційні відстані -
AUTO- налаштовується за довжиною терму (0-2)
Match запит з fuzziness
GET /articles/_search
{
"query": {
"match": {
"title": {
"query": "databse design",
"fuzziness": "1",
"operator": "and" // всі терми повинні збігатися
}
}
}
}
Комбінований: нечіткий + синоніми + мова
PUT /documents
{
"settings": {
"analysis": {
"filter": {
"my_synonyms": {
"type": "synonym",
"synonyms": ["db => database", "elasticsearch => es"]
}
},
"analyzer": {
"my_search_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "my_synonyms"]
}
}
}
},
"mappings": {
"properties": {
"content": {
"type": "text",
"analyzer": "my_search_analyzer"
}
}
}
}
GET /documents/_search
{
"query": {
"match": {
"content": {
"query": "databse",
"fuzziness": "AUTO"
}
}
}
}
// Збігається: "database", "databases", "db"







