Strapi Search Integration — Real-Time Sync with AACsearch
Alex Chibilyaev
5/3/2026
Strapi is one of the most popular headless CMS platforms — and for good reason. Its plugin ecosystem, REST + GraphQL APIs, and content-type builder make it a favorite for teams building custom digital experiences. But when it comes to search, Strapi's built-in capabilities are limited to database-level LIKE queries. That's where AACsearch comes in.
The Challenge
A Strapi-powered site typically stores product catalogs, blog articles, documentation, or media assets. As content grows, searching through it becomes slow and inaccurate. Strapi's native search:
- Uses SQL
LIKEqueries — no relevance ranking - Can't handle typos or fuzzy matching
- Doesn't support faceted navigation
- Has no analytics to understand what users are searching for
The AACsearch Strapi connector solves all of this.
How the Strapi Connector Works
Lifecycle Hook Integration
The connector hooks into Strapi's lifecycle events — afterCreate, afterUpdate, and afterDelete — on the content types you configure.
// 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,
});
},
};
Content-Type Mapping
You define how each Strapi content type maps to a search collection. The mapping is done through a simple configuration file:
{
"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" }
}
}
}
}
]
}
Setting Up the Connector
- Install the AACsearch Strapi plugin via the Strapi marketplace or npm.
- Configure your AACsearch API key and endpoint URL in the plugin settings.
- Map your content types to search collections through the admin panel.
- Sync existing content — the connector runs an initial bulk import.
- Done — all subsequent changes sync in real time.
Features
- Real-time sync: Content changes reflect in search results within seconds
- Bulk import: Index all existing content on first setup
- Draft/Published support: Only published content is indexed by default
- Media handling: Image URLs are automatically extracted from Strapi's media library
- Internationalization: Locale-aware — each locale becomes a separate document or field
- Component fields: Strapi dynamic zones and components are flattened into searchable fields
Performance Considerations
For large Strapi projects (100K+ documents), the connector handles batch operations:
- Bulk imports use paginated queries with configurable batch sizes
- Delta syncs only send changed fields, not the entire document
- Deleted content is removed from the index within the lifecycle hook
When to Use the Strapi Connector
This connector is ideal for:
- E-commerce stores built on Strapi (using Strapi E-commerce or custom setup)
- Content-heavy sites with blogs, documentation, and media libraries
- Multi-language sites that need search in every locale
- Teams already using Strapi who want to add managed search providers-quality search without the managed search providers price tag
AACsearch Strapi connector is in development. Sign up for early access to get notified when it launches.