← Все навыки

Полнотекстовый поиск в Базах Данных

Быстрый и устойчивый к опечаткам полнотекстовый поиск: где хватит PostgreSQL, а где нужен Elasticsearch — выбор технологии, индексы, ранжирование и интеграция поиска в приложение

PostgreSQL FTS Elasticsearch Индивидуально с ментором

Для кого этот навык

  • Backend-разработчики, которым нужно сделать поиск лучше, чем LIKE '%...%'
  • Инженеры, выбирающие между поиском в PostgreSQL и отдельным движком
  • Все, кто хочет понимать, как устроены инвертированный индекс и ранжирование

Программа

Зачем нужен полнотекстовый поиск

Ограничения LIKE, выбор технологии
  • Почему поиск важнее красивой обёртки и где LIKE перестаёт работать
  • Выбор технологии поиска под задачу
  • Когда поиск становится настоящей проблемой

Полнотекстовый поиск в PostgreSQL

tsvector/tsquery, GIN/GiST/RUM, ранжирование
  • tsvector и tsquery, оператор @@, нормализация, лемматизация, стоп-слова
  • Типы индексов GIN, GiST, RUM и их устройство (inverted index, posting list)
  • Компромиссы скорости поиска/обновления и ранжирование по релевантности

Elasticsearch

index/mapping, Query DSL, fuzziness, autocomplete
  • Обзор движков (Sphinx, Solr, Elasticsearch/OpenSearch) и критерии выбора
  • Установка в Docker, REST/curl, index, документы и mapping, шарды и реплики
  • Поиск и фильтрация через Query DSL (bool, range) и SQL-режим
  • Поиск с опечатками (fuzziness) и автодополнение (edge_ngram)

Интеграция поиска в приложение

search-service, синхронизация БД ↔ Elasticsearch
  • Микросервис search-service: индексация при изменениях и обработка запросов
  • Синхронизация основной базы и Elasticsearch (очередь/webhook, bulk API)

Практика

Строите поиск на реальном наборе данных и проходите код-ревью с ментором

  • Сравнить поиск через LIKE и полнотекстовый поиск (масштабируемость, отклик)
  • Создавать tsvector/tsquery и GIN-, GiST-, RUM-индексы, подбирать индекс под данные
  • Ранжирование результатов по релевантности
  • Запустить Elasticsearch в Docker, создать index и mapping, вставлять документы
  • Поиск и фильтрация через Query DSL; автодополнение и поиск с опечатками
  • Реализовать search-service и синхронизацию данных с Elasticsearch