@extravirgin/payload-plugin-meilisearch
v0.0.16
Published
Index your payload collections to meilisearch
Keywords
Readme
Payload Meilisearch plugin
Indexing fields from relationships
Relationship fields are indexed as IDs by default. To make selected values from
the related documents searchable, configure indexRelationshipFields. The
relationship ID is retained alongside the selected fields.
meilisearch({
apiKey: process.env.MEILISEARCH_API_KEY,
host: process.env.MEILISEARCH_HOST,
collections: [
{
slug: 'posts',
indexRelationshipFields: {
category: ['name'],
tags: ['name', 'slug'],
},
},
],
})For example, a populated category relationship is indexed as:
{
category: {
id: 'category-id',
name: 'Engineering',
},
}hasMany relationships produce an array of these objects. Polymorphic
relationships also retain relationTo. Both the relationship field key and
selected related field names support dot notation:
indexRelationshipFields: {
'meta.category': ['name', 'seo.title'],
}The option can be set globally and overridden per collection. When it is enabled, the plugin reads the source document at a depth of at least 1 so direct relationship values are populated. Changes to a related document do not by themselves run the source collection's hooks; reindex the source collection when those values change.
Indexing localized select labels
Select values remain unchanged and can still be used for filtering. To also make
their option labels searchable, enable indexSelectLabels. The label is added
to a sibling field with the _label suffix.
meilisearch({
apiKey: process.env.MEILISEARCH_API_KEY,
host: process.env.MEILISEARCH_HOST,
collections: [{ slug: 'products' }],
indexSelectLabels: true,
})For a document locale such as en-US, labels are tried in this order:
en-US, en, then Payload's i18n fallback language. The behavior can be
configured globally or overridden per collection:
meilisearch({
// ...
collections: [
{
slug: 'products',
indexSelectLabels: {
defaultLocale: 'de',
fieldSuffix: '_optionLabel',
resolveLabel: ({ defaultLabel, option, localeFallbacks }) => {
// Useful for function labels or application-specific translations.
return defaultLabel
},
},
},
],
})Returning undefined from resolveLabel keeps the built-in result. Returning
null omits the label.
