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.
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:
1npm install medusa-plugin-algolia-search
2. Set the following environment variables in Copy to clipboard
.env
:12ALGOLIA_APP_ID=<YOUR_APP_ID>ALGOLIA_ADMIN_API_KEY=<YOUR_ADMIN_API_KEY>
3. In Copy to clipboard
medusa-config.js
add the following at the end of the Copy to clipboardplugins
array:123456789101112131415161718192021222324252627282930313233343536const 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 Copy to clipboard
products
, which triggers update of all indexes declared under Copy to clipboardproducts
array in Copy to clipboardsettings
object
We decided to make settings type like this123456789settings: {[key: string]:{ // 'products' | stringindexSettings: {indexName: string // algolia index name. Must be unique value}filter?: (document: any) => booleantransformer?: (document: any) => boolean}[]}
This allow you to upload products in different indexes using different transformers and filters
For example
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556{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 falsereturn 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 falsereturn true},transformer: (product) => {return {objectID: product.id,title: product.title + '2',}},},],},},},
Scheduled refresh
12345678type AlgoliaPluginOptions = {applicationId: stringadminApiKey: stringscheduledRefresh?: string // cron string or nothing to get refresh repeatly in settled periodsettings: {[key in IndexTypes]: IndexSettingsExtended[]}}
You may schedule refresh job via cron string, which will emit
Copy to clipboard
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:
1npm run start
2. Try searching products either using your storefront or using the Store APIs.