Реалізація автозавершення в Elasticsearch
Автозавершення потребує: швидкого префіксного збігу, порад для type-ahead, мінімальної затримки.
Використання completion suggester
PUT /products
{
"mappings": {
"properties": {
"name": { "type": "text" },
"name_suggest": {
"type": "completion",
"analyzer": "simple"
}
}
}
}
POST /products/_doc
{
"name": "iPhone 15 Pro Max",
"name_suggest": {
"input": ["iPhone", "iPhone 15", "iPhone 15 Pro", "iPhone 15 Pro Max"],
"weight": 100
}
}
GET /products/_search
{
"suggest": {
"product_suggestions": {
"prefix": "iph",
"completion": {
"field": "name_suggest",
"size": 10,
"skip_duplicates": true
}
}
}
}
Edge N-gram аналізатор
Для префіксного збігу на текстових полях:
PUT /articles
{
"settings": {
"analysis": {
"tokenizer": {
"my_edge_ngram_tokenizer": {
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 20,
"token_chars": ["letter", "digit"]
}
},
"analyzer": {
"my_autocomplete_analyzer": {
"tokenizer": "my_edge_ngram_tokenizer",
"filter": ["lowercase"]
}
}
}
},
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "my_autocomplete_analyzer",
"search_analyzer": "standard"
}
}
}
}
GET /articles/_search
{
"query": {
"match": {
"title": "elast" // збігається з "elasticsearch"
}
}
}







