Payload Search Plugin
A plugin for Payload CMS to create extremely fast search results from your existing documents.
Core features:
- Creates a
searchcollection that:- Automatically creates, syncs, and deletes search results related to your documents
- Serves search results extremely quickly by saving only search-critical data that you define
- Allows you to sort search results by priority
Installation
yarn add payload-plugin-search
# OR
npm i payload-plugin-search
Basic Usage
In the plugins array of your Payload config, call the plugin with options:
import { buildConfig } from 'payload/config';
import search from 'payload-search';
const config = buildConfig({
collections: [
{
slug: 'pages',
fields: []
},
{
slug: 'posts',
fields: []
}
],
plugins: [
search({
collections: [
'pages',
'posts'
],
defaultPriorities: {
pages: 10,
posts: 20
}
})
]
});
export default config;
Options
-
collectionsAn array of collections slugs to enable sync-to-search. Enabled collections receive a
beforeChangeandafterDeletehook that creates, syncs, and deleted the document to its related search document as it changes over time, and also anafterDeletehook that deletes. -
defaultPrioritiesThe default priorities first set on
createoperations. Send an object of collection slugs, and set them to either a number or a function.searchPlugin({ ... defaultPriorities: { pages: (doc) => doc.title.startsWith('Hello, world!') ? 1 : 10, posts: 20 } }) -
searchOverridesOverride anything on the search collection by sending a Payload Collection Config.
searchPlugin({ ... searchOverrides: { slug: 'search-results' } })-
beforeSyncAn afterChange hook that is called before creating or syncing the document to search. This allows you to modify the data in any way before doing so.
searchPlugin({ ... beforeSync: ({ doc }) => ({ ...doc, // Modify your docs in any way here, this can be async excerpt: doc?.excerpt || 'This is a fallback excerpt' }), }) -
syncOnlyPublishedIf true, will sync only published documents to search.
-
deleteDraftsIf true, will delete documents from search that change to draft status.
TypeScript
All types can be directly imported:
import { SearchConfig, BeforeSync } from 'payload-plugin-search/dist/types';Screenshots
-