Strapi Search Integration — синхронизация в реальном времени с AACsearch
Alex Chibilyaev
5/3/2026
Strapi — одна из самых популярных headless CMS-платформ, и неспроста. Экосистема плагинов, REST и GraphQL API, а также конструктор типов контента делают её фаворитом среди команд, создающих цифровые продукты. Но когда дело доходит до поиска, встроенные возможности Strapi ограничиваются SQL-запросами с LIKE. Здесь на помощь приходит AACsearch.
Проблема
Сайт на Strapi обычно содержит каталоги товаров, статьи блога, документацию или медиафайлы. По мере роста контента поиск становится медленным и неточным. Встроенный поиск Strapi:
- Использует SQL
LIKE-запросы — никакого ранжирования по релевантности - Не обрабатывает опечатки и нечёткий поиск
- Не поддерживает фасетную навигацию
- Не предоставляет аналитику для понимания пользовательских запросов
Коннектор AACsearch для Strapi решает все эти проблемы.
Как работает коннектор Strapi
Интеграция через хуки жизненного цикла
Коннектор подключается к событиям жизненного цикла Strapi — afterCreate, afterUpdate и afterDelete — на настроенных вами типах контента.
// Lifecycle hook in src/api/product/content-types/product/lifecycles.ts
module.exports = {
async afterCreate(event) {
await AACSearch.index({
collection: "product",
document: mapProductToSearchDoc(event.result),
});
},
async afterUpdate(event) {
await AACSearch.update({
collection: "product",
document: mapProductToSearchDoc(event.result),
});
},
async afterDelete(event) {
await AACSearch.delete({
collection: "product",
id: event.result.id,
});
},
};
Маппинг типов контента
Вы определяете, как каждый тип контента Strapi сопоставляется с поисковой коллекцией. Маппинг задаётся через простой конфигурационный файл:
{
"collections": [
{
"strapiContentType": "product",
"searchCollection": "products",
"fields": {
"title": { "type": "string", "searchable": true },
"description": { "type": "string", "searchable": true },
"price": { "type": "float", "facet": true },
"category": { "type": "string", "facet": true, "searchable": true },
"images": { "type": "string[]", "source": "media.url" },
"variants": {
"type": "object[]",
"fields": {
"sku": { "type": "string" },
"color": { "type": "string", "facet": true },
"size": { "type": "string", "facet": true },
"stock": { "type": "int32" }
}
}
}
}
]
}
Настройка коннектора
- Установите плагин AACsearch для Strapi через маркетплейс Strapi или npm.
- Укажите ваш API-ключ AACsearch и URL эндпоинта в настройках плагина.
- Сопоставьте ваши типы контента с поисковыми коллекциями через панель администратора.
- Синхронизируйте существующий контент — коннектор выполнит первичный массовый импорт.
- Готово — все последующие изменения синхронизируются в реальном времени.
Возможности
- Синхронизация в реальном времени: Изменения контента отражаются в результатах поиска за секунды
- Массовый импорт: Индексация всего существующего контента при первом запуске
- Поддержка черновиков/публикаций: По умолчанию индексируется только опубликованный контент
- Обработка медиа: URL изображений автоматически извлекаются из медиабиблиотеки Strapi
- Интернационализация: С учётом локали — каждая языковая версия становится отдельным документом или полем
- Поля компонентов: Dynamic Zones и компоненты Strapi преобразуются в поисковые поля
Производительность
Для крупных проектов на Strapi (100 000+ документов) коннектор поддерживает пакетные операции:
- Массовый импорт использует постраничные запросы с настраиваемым размером пакета
- Дельта-синхронизация отправляет только изменённые поля, а не весь документ
- Удалённый контент удаляется из индекса в рамках хука жизненного цикла
Когда использовать коннектор Strapi
Этот коннектор идеально подходит для:
- Интернет-магазинов на базе Strapi (с использованием Strapi E-commerce или собственной настройки)
- Сайтов с большим объёмом контента — блоги, документация, медиатеки
- Многоязычных сайтов, где поиск нужен на каждом языке
- Команд, уже использующих Strapi, которые хотят получить поиск уровня managed search providers без цены managed search providers
Коннектор AACsearch для Strapi находится в разработке. Запишитесь на ранний доступ, чтобы получить уведомление о запуске.