medusa-plugin-algolia-search
v0.3.0
Published
Aggregates products, filters products, transforms them and pushes to algolia indexes
Downloads
138
Maintainers
Readme
Algolia-search plugin for medusa e-commerce app
This plugin was copied and fixed from medusa.js official repository
Algolia
Provide powerful indexing and searching features in your commerce application with Algolia.
Medusa Website | Medusa Repository
Features
- Flexible configurations for specifying searchable and retrievable attributes.
- Ready-integration with Medusa's Next.js starter storefront.
- Utilize Algolia's powerful search functionalities including typo-tolerance, query suggestions, results ranking, and more.
Prerequisites
How to Install
1. Run the following command in the directory of the Medusa backend:
npm install medusa-plugin-algolia-search
2. Set the following environment variables in .env
:
ALGOLIA_APP_ID=<YOUR_APP_ID>
ALGOLIA_ADMIN_API_KEY=<YOUR_ADMIN_API_KEY>
3. In medusa-config.js
add the following at the end of the plugins
array:
const plugins = [
// ...
{
resolve: `medusa-plugin-algolia-search`,
options: {
applicationId: process.env.ALGOLIA_APP_ID,
adminApiKey: process.env.ALGOLIA_ADMIN_API_KEY,
settings: {
products: [
indexSettings: {
indexName: 'products'
searchableAttributes: ["title", "description"],
attributesToRetrieve: [
"id",
"title",
"description",
"handle",
"thumbnail",
"variants",
"variant_sku",
"options",
"collection_title",
"collection_handle",
"images",
],
},
filter: (product) => product.status == "published",
transformer: (product) => ({
id: product.id,
// other attributes...
}),
],
},
},
},
]
For further use learn our features
Filtering
Settings object may contain few types of entities medusa loads
Now, medusa presents only products
, which triggers update of all indexes declared under products
array in settings
object
We decided to make settings type like this
settings: {
[key: string]:{ // 'products' | string
indexSettings: {
indexName: string // algolia index name. Must be unique value
}
filter?: (document: any) => boolean
transformer?: (document: any) => boolean
}[]
}
This allow you to upload products in different indexes using different transformers and filters
For example
{
resolve: 'medusa-plugin-algolia-search',
options: {
batch_size: 500,
applicationId: process.env.ALGOLIA_APP_ID,
adminApiKey: process.env.ALGOLIA_ADMIN_API_KEY,
settings: {
products: [
{
indexSettings: {
indexName: 'products',
searchableAttributes: ['title', 'description'],
attributesToRetrieve: ['objectID', 'title'],
},
filter: (product) => {
if (
product?.status != null &&
product.status != 'published'
)
return false
return true
},
transformer: (product) => {
return {
objectID: product.id,
title: product.title,
}
},
},
{
indexSettings: {
indexName: 'wowducts',
searchableAttributes: ['title', 'description'],
attributesToRetrieve: ['objectID', 'title'],
},
filter: (product) => {
if (
product?.status != null &&
product.status != 'draft'
)
return false
return true
},
transformer: (product) => {
return {
objectID: product.id,
title: product.title + '2',
}
},
},
],
},
},
},
Scheduled refresh
type AlgoliaPluginOptions = {
applicationId: string
adminApiKey: string
scheduledRefresh?: string // cron string or nothing to get refresh repeatly in settled period
settings: {
[key in IndexTypes]: IndexSettingsExtended[]
}
}
You may schedule refresh job via cron string, which will emit SEARCH_INDEX_EVENT
like on startup every time it will be executed.
Test the Plugin
1. Run the following command in the directory of the Medusa backend to run the backend:
npm run start
2. Try searching products either using your storefront or using the Store APIs.