payload-plugin-algolia
v1.0.0
Published
Algolia search plugin for PayloadCMS
Maintainers
Readme
payload-plugin-algolia
PayloadCMS plugin that syncs collections with Algolia search
Requires Payload 3.x (payload peer dependency).
Installation
npm i payload-plugin-algoliaUsage
At a minimum, the plugin requires Algolia credentials and a list of enabled collections.
// payload.config.ts
import { buildConfig } from 'payload'
import { AlgoliaSearchPlugin } from 'payload-plugin-algolia'
import Pages from './collections/Pages'
import Posts from './collections/Posts'
export default buildConfig({
collections: [Pages, Posts],
plugins: [
AlgoliaSearchPlugin({
algolia: {
appId: process.env.ALGOLIA_APP_ID,
apiKey: process.env.ALGOLIA_ADMIN_API_KEY,
index: process.env.ALGOLIA_INDEX,
},
collections: ['pages', 'posts'],
}),
],
// ...more config
})Options
generateSearchAttributes
By default, the plugin will pass the entire document through to Algolia, with two appended keys:
objectID: format${collection}:${id}egpages:1collection: the collection slug
You can modify search attributes by providing a custom generateSearchAttributes function:
import { type GenerateSearchAttributes } from 'payload-plugin-algolia'
interface PageRecord {
title: string
text: string
}
interface PostRecord extends PageRecord {
image: string
}
const generateSearchAttributes: GenerateSearchAttributes<PageRecord | PostRecord> = async ({
doc,
collection,
req: { payload },
}) => {
switch (collection.slug) {
case 'posts': {
if (doc.featured_image) {
const { url } = await payload.findByID({
collection: 'media',
id: doc.featured_image as number,
})
return {
...doc,
image: url,
}
}
return doc
}
default:
return doc
}
}waitForHook
Boolean, default =false
Set to true to wait for algolia set / delete operations during the collection hooks.
Notes
The current scope of the plugin is quite limited. PRs welcome!
Drafts
Drafts are not indexed. If a document is unpublished, it gets removed from search results. Otherwise, draft updates to a published document have no effect.
Globals
Globals are not supported for indexing.
Algolia search config
The internal Algolia client accepts all options. Beyond that, the rest of the setup for a typical Algolia configuration is outside the scope of the plugin (setting search attributes and facets, etc).
