Skip to content

Поиск событий

📡 Поиск событий (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
    }
  ]
}

📌 Особенности работы алгоритма#

Алгоритм поиска

  1. Нормализация (lowercase, очистка)
  2. Предварительный отбор через wh.search_events (pg_trgm similarity)
  3. RapidFuzz + embedding reranking (семантическая близость)
  4. Финальный скоринг и пагинация

🚀 Производственные ограничения#

Warning

  • candidateLimit ограничивает нагрузку CPU
  • embeddings считаются только на top-K
  • сервис stateless (не хранит данные событий)

📈 Рекомендации по использованию#

  • limit = 5–20 для UI
  • использовать кэш на уровне клиента при повторных запросах