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 запрещён.
Обратные ссылки
Автоссылки: где используется этот документ.
- Поиск (5): ClientSearchDocument, DealSearchDocument, FixationRequestSearchDocument, KbArticleSearchDocument, TicketSearchDocument
- index.md (1): Support Service
Связанные документы
- 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).