Перейти к основному содержимому

ADR-0008: Elasticsearch как search projection

Статус

Accepted

Контекст

Платформе PIN нужен полнотекстовый поиск с fuzzy/typo-tolerance, транслитерацией (кириллица ↔ латиница), алиасами/синонимами и морфологией по разным поверхностям: проекты и объекты недвижимости, застройщики, пользователи, контакты, клиенты/фиксации/сделки, тикеты/база знаний, посты. PostgreSQL-FTS (tsvector/GIN) для этих требований недостаточен (см. ADR-0059, детализирующий перевод всех поверхностей).

Реальный shared SDK Talent.Common.* реализует поиск на Elasticsearch: провайдер-нейтральные контракты Talent.Common.Domain.Search (ISearchIndex, SearchIndexResult, SearchPage) и живая инфраструктура Talent.Common.Infrastructure.ElasticSearch на клиенте Elastic.Clients.Elasticsearch (v9). Пакет Talent.Common.Infrastructure.OpenSearch — устаревшая заглушка, не используется.

Историческая заметка: ранние черновики этого ADR (и ADR-0059) называли движок «OpenSearch». Фактический SDK работает на Elasticsearch — терминология приведена в соответствие с кодом.

Решение

Elasticsearch используется как read/search projection. Source of truth остаётся в сервисных PostgreSQL-БД (ADR-0004); индексы — rebuildable-проекции, не владельцы данных (ADR-0035). Индексы наполняются инкрементально по доменным/интеграционным событиям сервиса плюс периодический/ручной rebuild-джоб.

Индексы должны поддерживать:

  • language-aware analyzers (морфология RU/EN);
  • транслитерацию (кириллица ↔ латиница);
  • алиасы/синонимы;
  • tenant/record-level фильтры (ADR-0052, ADR-0014);
  • security-trimming PII и admin-only данных (до выдачи результата).

Доступ к движку — только через SDK-слой (Talent.Common.Domain.Search + инфра Talent.Common.Infrastructure.ElasticSearch); прямой клиент Elasticsearch в domain/handlers запрещён.

Обратные ссылки

Автоссылки: где используется этот документ.

Связанные документы

  • ADR-0059 — перевод всех поисковых поверхностей PIN на Elasticsearch-проекции (детализация).
  • [ADR-0004] (PostgreSQL — source of truth), [ADR-0035] (data lineage), [ADR-0052] (tenancy), [ADR-0014] (repository pipeline и scope-filters), [ADR-0038] (Shared SDK).