Files
payload/packages/plugin-search
Jacob Fletcher 4f77073e2c chore: imports search plugin (#3675)
* feat: builds plugin

* feat: abstracts syncWithSearch

* feat: attaches payload to beforeSync hook

* feat: enables defaultPriorities

* fix: syncWithSearch args and return type

* 0.0.2

* feat: uses config provider to format linkToDoc

* feat: supports versions api

* 0.0.4

* chore: bumps payload to v0.15.6

* 0.0.5

* chore: updates react peerDep

* 0.0.6

* chore: updates payload and package scope

* 1.0.0

* chore: correct import directive in readme code sample

* chore: exports types (#5)

* chore: eslint and prettier

* chore: migrates demo to payload v1.8.2

* fix: adjusts payload peer dep range (#8)

* 1.0.1

* chore(plugin-search): cleanup after import

* chore(plugin-search): lint

* chore(plugin-search): format

* chore: force pnpm-lock.yaml

---------

Co-authored-by: Colin Ramsay <colinramsay@users.noreply.github.com>
Co-authored-by: Elliot DeNolf <denolfe@gmail.com>
2023-10-23 16:50:09 -04:00
..
2023-10-23 16:50:09 -04:00
2023-10-23 16:50:09 -04:00
2023-10-23 16:50:09 -04:00
2023-10-23 16:50:09 -04:00
2023-10-23 16:50:09 -04:00

Payload Search Plugin

NPM

A plugin for Payload to create extremely fast search results from your existing documents.

Core features:

  • Creates a search collection 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 @payloadcms/plugin-search
  # OR
  npm i @payloadcms/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 '@payloadcms/plugin-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

collections

An array of collections slugs to enable sync-to-search. Enabled collections receive a beforeChange and afterDelete hook that creates, syncs, and deleted the document to its related search document as it changes over time, and also an afterDelete hook that deletes.

defaultPriorities

The default priorities first set on create operations. Send an object of collection slugs, and set them to either a number or a function.

plugins: [
  searchPlugin({
    defaultPriorities: {
      pages: ({ doc }) => (doc.title.startsWith('Hello, world!') ? 1 : 10),
      posts: 20,
    },
  }),
]

searchOverrides

Override anything on the search collection by sending a Payload Collection Config.

plugins: [
  searchPlugin({
    searchOverrides: {
      slug: 'search-results',
    },
  }),
]

beforeSync

An 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.

plugins: [
  searchPlugin({
    beforeSync: ({ originalDoc, searchDoc }) => ({
      ...searchDoc,
      // Modify your docs in any way here, this can be async
      excerpt: originalDoc?.excerpt || 'This is a fallback excerpt',
    }),
  }),
]

syncDrafts

If true, will sync draft documents to search. By default, this plugin will only sync published documents. False by default. You must have Payload Drafts enabled for this to apply.

deleteDrafts

If true, will delete documents from search that change to draft status. True by default. You must have Payload Drafts enabled for this to apply.

TypeScript

All types can be directly imported:

import { SearchConfig, BeforeSync } from '@payloadcms/plugin-search/dist/types'

Screenshots