Improve search relevance and artist transliteration
ci / api / api (push) Successful in 56s
ci / db / db (push) Successful in 1m13s

This commit is contained in:
mrleo1nid committed 2026-10-30 12:09:24 +03:00
1 parent db4548b115
commit 82f3eed9a0
10 files changed
+212 -12

No files matched your search

+9 -2
View File
@@ -199,10 +199,17 @@ Meilisearch, индексы:
| `albums` | `title`, `artist_name`, `title_translit` | `year`, `popularity` |
| `tracks` | `title`, `artist_names`, `album_title`, `title_translit` | `genre`, `year`, `popularity`, `available` |
- `*_translit` — транслитерация (кириллица ↔ латиница), плюс поле с **исправлением раскладки**
- `*_translit` — варианты транслитерации (кириллица ↔ латиница), включая словарь
устоявшихся написаний (`Boulevard` → `бульвар`) наряду с побуквенным вариантом.
**Исправление раскладки**
(`ghbdtn` → `привет`): при пустом результате клиентский запрос повторяется в альтернативной раскладке
на стороне `api`.
- Ранжирование: стандартные правила Meilisearch + `popularity:desc` (глобальные засчитанные прослушивания за 90 дней).
- Запрос учитывает все слова (`matchingStrategy=all`), не отбрасывая последнее ради заполнения списка.
Опечатки и поиск по префиксу по-прежнему обрабатывает Meilisearch.
- Ранжирование: `words`, `typo`, `exactness`, `proximity`, `attribute`, `sort`, `popularity:desc`.
Точное имя исполнителя (включая вариант транслитерации) закрепляется перед составными именами
в подсказках и не опускается из-за персонализации. Новые варианты появляются после переиндексации;
API запускает её при старте.
- `/search/suggest` использует `multi-search` (один запрос — три индекса), отдаёт ≤ 3/3/5. Клиент делает debounce 150 мс,
отменяет предыдущий запрос (`AbortController`).
- Персонализация: `suggest` берёт из Meilisearch втрое больше кандидатов и переранжирует их в `api`