Выбор ответа Middle Выбор хранилища обновлено
Полнотекстовый поиск по каталогу
Вопрос
Нужен поиск по каталогу с опечатками, морфологией и фильтрами. Каталог хранится в PostgreSQL. Как правильнее?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Индекс в Elasticsearch из PostgreSQL, истина в PostgreSQL. Поисковый движок даёт обратный индекс, морфологию, нечёткий поиск и фасеты, но не должен быть источником истины: индекс наполняется из основной БД и может отставать.
Варианты ответа
- Перенести каталог в Elasticsearch и удалить его из PostgreSQL
- Использовать
LIKE '%запрос%'по названию и описанию - Индекс в Elasticsearch из PostgreSQL, истина в PostgreSQLправильный ответ
- Хранить каталог в Redis и искать по ключам с префиксом
Разбор
Поисковый движок даёт обратный индекс, морфологию, нечёткий поиск и фасеты, но не должен быть источником истины: индекс наполняется из основной БД и может отставать. Удалять данные из PostgreSQL значит потерять транзакционность. LIKE с ведущим процентом не использует обычный B-tree индекс и не умеет опечатки. Redis ищет по ключам, а не по тексту.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.