🔎 Elasticsearch
Индексы, документы, поиск, агрегации, маппинги и REST-запросы.
Шпаргалки · Инфраструктура · #elasticsearch #elk #search
Понятия
| Термин | Аналог в БД |
|---|---|
| Index | таблица |
| Document | строка (JSON) |
| Field | колонка |
| Mapping | схема полей |
| Shard / Replica | часть индекса / копия |
REST-запросы (Kibana Dev Tools)
GET / # состояние узла
GET _cat/indices?v
PUT /products # создать индекс
POST /products/_doc/1 # добавить документ
{ "name": "Ноутбук", "price": 999, "tags": ["tech"] }
GET /products/_doc/1
POST /products/_update/1
{ "doc": { "price": 899 } }
DELETE /products/_doc/1
DELETE /products
Поиск
GET /products/_search
{
"query": {
"bool": {
"must": [ { "match": { "name": "ноутбук" } } ],
"filter": [ { "range": { "price": { "lte": 1000 } } },
{ "term": { "tags": "tech" } } ]
}
},
"sort": [ { "price": "asc" } ],
"from": 0, "size": 10,
"_source": ["name", "price"]
}
must участвует в релевантности, filter только отбирает (быстрее, кэшируется).
Основные запросы
| Запрос | Назначение |
|---|---|
match |
полнотекстовый поиск |
match_phrase |
точная фраза |
term / terms |
точное значение (для keyword) |
range |
диапазон |
exists |
поле присутствует |
wildcard, prefix |
по маске |
multi_match |
по нескольким полям |
Агрегации
GET /products/_search
{ "size": 0,
"aggs": {
"by_tag": { "terms": { "field": "tags" } },
"avg_price": { "avg": { "field": "price" } }
} }
Маппинг
PUT /logs
{ "mappings": { "properties": {
"@timestamp": { "type": "date" },
"level": { "type": "keyword" },
"message": { "type": "text" } } } }
text анализируется для поиска, keyword хранится целиком (фильтры, агрегации).
Приёмы
_bulkдля массовой загрузки.- Шаблоны индексов и ILM управляют жизненным циклом логов (hot → warm → delete).
- Не используйте
from + sizeдля глубокой пагинации:search_after.