Поиск: Elasticsearch
LIKE '%слово%' медленный и не знает слов: «кот» не найдёт «котик», опечатки ломают выдачу. Поисковые движки индексируют документы и ранжируют по релевантности за миллисекунды.
Идея индексации
Документ «помещается» в поисковый движок (индексируется), где текст разбивается на токены. Запрос ищет по этому индексу и возвращает совпадения с оценкой релевантности:
// Elasticsearch: создать/обновить документ
POST /products/_doc/42
{ "title": "Красная кружка", "tags": ["посуда"] }
// Поиск с опечатками и приоритетом
GET /products/_search?q=кружк+посуда
// Meilisearch из коробки «умнее»: typo-tolerant и быстрый
client.index("products").search("кружк");
Когда подключать
- поиск по десяткам тысяч записей с ранжированием и фильтрами;
- подсказки при наборе (instant search) со сниппетами;
- синонимы, опечаткоустойчивость, релевантность по полю;
- счётчики фасетов: «по бренду», «по цене».
💡
Для прототипа берите Meilisearch (поднимается за минуту, REST из коробки), для большой инфраструктуры — Elasticsearch. Оба бесплатны для старта.
ℹ️
Поисковый движок — это «вторичная» система: источник правды остаётся в базе (урок 22), а в индекс синхронизируются срезы данных по событию или расписанию.