Поиск событий
📡 Поиск событий (fuzzy match)#
Ручка#
POST /search_by_event
Полный адрес в сети#
| Среда | URL |
|---|---|
| 🧪 Dev | https://terra-searcher-service.club.terra/search_by_event |
| 🚀 Prod | http://terra-searcher-service.prodterra.ru/srv/terra-searcher/search_by_event |
🔐 Авторизация#
Ручка защищена BasicAuth
Authorization: Basic base64(username:password)
Пример:
Authorization: Basic dXNlcm5hbWUxOnBhc3N3b3JkMQ==
📥 Входные данные#
Основной запрос#
| Поле | Тип | Описание | Обязательное | По умолчанию | Пример |
|---|---|---|---|---|---|
| searchName | string | Строка для поиска (название) | ✅ | — | конференция |
| page | int | Страница | ❌ | 1 |
1 |
| limit | int | Кол-во результатов в ответе | ❌ | 20 |
20 |
📤 Пример JSON запроса#
{
"searchName": "конференция",
"page": 1,
"limit": 20
}
📤 Выходные данные#
| Поле | Тип | Описание | Обязательное | Пример |
|---|---|---|---|---|
| page | int | Страница из запроса | ✅ | 1 |
| limit | int | Лимит из запроса | ✅ | 20 |
| total | int | Общее число найденных кандидатов | ✅ | 8 |
| matches | array | Список найденных совпадений (страница) | ✅ | см. ниже |
Элемент matches#
| Поле | Тип | Описание | Обязательное | Пример |
|---|---|---|---|---|
| id | int | ID события | ✅ | 12345 |
| name | string | Название события | ✅ | Конференция 2026 |
| score | float | Скор похожести (0..1) | ✅ | 0.9231 |
UUID события
UUID события используется только внутри сервиса и БД. В ответ API не возвращается.
📤 Пример ответа#
{
"page": 1,
"limit": 20,
"total": 8,
"matches": [
{
"id": 12345,
"name": "Конференция 2026",
"score": 0.9231
},
{
"id": 67890,
"name": "Конференция предпринимателей",
"score": 0.8012
}
]
}
📌 Особенности работы алгоритма#
Алгоритм поиска
- Нормализация (lowercase, очистка)
- Предварительный отбор через
wh.search_events(pg_trgm similarity) - RapidFuzz + embedding reranking (семантическая близость)
- Финальный скоринг и пагинация
🚀 Производственные ограничения#
Warning
- candidateLimit ограничивает нагрузку CPU
- embeddings считаются только на top-K
- сервис stateless (не хранит данные событий)
📈 Рекомендации по использованию#
limit = 5–20для UI- использовать кэш на уровне клиента при повторных запросах