Клиент — корпоративный сайт на WordPress (услуги B2B, ~800 статей и страниц). Стандартный поиск WP искал только по заголовку и телу «как есть»: синонимы, опечатки и вопросы в свободной форме часто давали пустую выдачу; поддержка получала одни и те же вопросы по почте. Задача: поиск по смыслу по всей базе материалов — без замены WordPress и без публичного чат-бота. Посетитель видит релевантные фрагменты и ссылки; админ — статистику запросов без ответа. Реализация: • Плагин WP: nightly-индексация постов, страниц и CPT через REST API; webhook при публикации/обновлении; • отдельный сервис (Python/FastAPI): чанкинг текста, embeddings, PostgreSQL + pgvector; • API /search: запрос → топ-5 фрагментов с score, URL, заголовок, excerpt; • виджет на фронте (shortcode + Gutenberg-блок): поле «Спросите…», список результатов, fallback на обычный WP Search; • кэш частых запросов в Redis; rate limit с фронта; • админ-страница: статус индекса, последняя переиндексация, топ-20 запросов без результатов; • исключение черновиков и служебных страниц из индекса; • мобильная вёрстка виджета, lazy-load результатов. Стек: WordPress, PHP (плагин), JavaScript, Python, FastAPI, pgvector, Redis, cron, Docker. Документация: переиндексация после массового импорта. Приёмка: 30 тестовых запросов сверены с ручной выдачей редактора. Итог: пользователи находят ответ без подбора ключевых слов; снижение однотипных обращений в поддержку (~25% за два месяца). NDA: домен не публикуется.