Выбор ответа Middle Выбор хранилища обновлено

Полнотекстовый поиск по каталогу

Вопрос

Нужен поиск по каталогу с опечатками, морфологией и фильтрами. Каталог хранится в PostgreSQL. Как правильнее?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Индекс в Elasticsearch из PostgreSQL, истина в PostgreSQL. Поисковый движок даёт обратный индекс, морфологию, нечёткий поиск и фасеты, но не должен быть источником истины: индекс наполняется из основной БД и может отставать.

Варианты ответа

  1. Перенести каталог в Elasticsearch и удалить его из PostgreSQL
  2. Использовать LIKE '%запрос%' по названию и описанию
  3. Индекс в Elasticsearch из PostgreSQL, истина в PostgreSQLправильный ответ
  4. Хранить каталог в Redis и искать по ключам с префиксом

Разбор

Поисковый движок даёт обратный индекс, морфологию, нечёткий поиск и фасеты, но не должен быть источником истины: индекс наполняется из основной БД и может отставать. Удалять данные из PostgreSQL значит потерять транзакционность. LIKE с ведущим процентом не использует обычный B-tree индекс и не умеет опечатки. Redis ищет по ключам, а не по тексту.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме