Aller au contenu
duxt

Meilisearch

Ajouter la couche complémentaire officielle pour une indexation atomique à la compilation et une recherche facultative dans le navigateur.

La couche officielle @kirchdev/duxt-meilisearch consomme l’intégralité de l’instantané duxt:search:records. Elle conserve les IDs issus des URL, le texte normalisé, la source, la version et la langue, y compris les sections générées. Meilisearch reste facultatif ; la recherche intégrée n’exige aucun service.

pnpm add @kirchdev/duxt-meilisearch
export default defineNuxtConfig({
  extends: ['@kirchdev/duxt', '@kirchdev/duxt-meilisearch'],
  duxtMeilisearch: {
    host: process.env.MEILISEARCH_HOST,
    index: 'docs',
    searchKey: process.env.MEILISEARCH_SEARCH_KEY,
    syncKey: process.env.MEILISEARCH_SYNC_KEY,
    taskKey: process.env.MEILISEARCH_TASK_KEY,
    sync: {
      enabled: process.env.MEILISEARCH_SYNC_ENABLED === 'true',
      deployment: process.env.DUXT_DEPLOYMENT === 'production'
        ? 'production' : 'preview'
    }
  }
})

Activez les deux options de production uniquement dans le travail de publication. La présence de syncKey n’autorise aucune écriture. Le développement, Nuxt prepare et les contextes reconnus de PR ou de prévisualisation ignorent la synchronisation. Les autres systèmes CI doivent utiliser deployment: 'preview' pour leurs prévisualisations. Cloudflare Pages exige aussi que DUXT_PRODUCTION_BRANCH corresponde à CF_PAGES_BRANCH.

Utilisez un index dédié docs. La clé privée de compilation nécessite indexes.create, indexes.get, indexes.delete, indexes.swap, settings.update, documents.add et tasks.get pour docs et docs__duxt_*. La couche crée un index temporaire unique, attend les tâches de configuration et d’importation, l’échange atomiquement avec docs, attend la réussite de l’échange puis supprime l’ancien instantané. Les compilations suivantes retirent les pages supprimées ; un instantané vide vide l’index. Les erreurs d’importation préservent l’ancien index. Un échange incertain conserve l’index temporaire pour éviter de supprimer des données potentiellement publiées. Les erreurs de nettoyage sont signalées. Sérialisez les publications si leur ordre compte. La première synchronisation crée la cible vide une fois l’index temporaire prêt.

La clé privée n’entre jamais dans la configuration du navigateur. Sans searchKey, la recherche intégrée reste active pendant la synchronisation. Pour le dialogue existant, créez une clé distincte avec uniquement l’action search et uniquement l’index configuré docs. La clé de recherche par défaut couvre tous les index : ne l’utilisez pas. Ne publiez jamais de clé maître ou administrative. La couche refuse la réutilisation de la clé privée connue ; une chaîne opaque ne révèle pas ses permissions, donc leur restriction incombe à l’opérateur. La recherche seule dans le navigateur ne nécessite aucune clé privée. Autorisez l’origine du site dans la configuration CORS du service.

La recherche conserve la version sélectionnée ou par défaut de chaque artefact et la chaîne de langues de repli. Une traduction remplace sa page originale ; les pages sans traduction restent accessibles dans leur langue d’origine. La couche lit un inventaire de chemins mis en cache via Content et exclut les pages couvertes par source, version et langue avant le classement et la limite. Le champ page, réservé au filtrage, contient l’URL sans ancre ; les sections masquées n’occupent pas la fenêtre de 1 000 résultats. Synchronisez une fois avant la recherche navigateur si une compilation précédente a créé l’index. Les erreurs du service donnent une liste vide et un avertissement en console. Les requêtes HTTP expirent après 30 secondes ; les tâches disposent de cinq minutes, modifiables avec sync.taskTimeoutMs, jusqu’à une heure.

Le paquet possède sa version et son changelog. duxt ne reçoit ni SDK, identifiants ni configuration du fournisseur. Les interfaces personnalisées utilisent @kirchdev/duxt-meilisearch/search ; les scripts de compilation peuvent utiliser @kirchdev/duxt-meilisearch/sync avec les mêmes options de production.

Consultez l’échange atomique, les tâches asynchrones et les clés restreintes de Meilisearch.

Meilisearch 1.54.3 masque la tâche globale indexSwap (indexUid: null) aux clés limitées par index, même si elles couvrent les deux index. Avec une clé d’écriture restreinte, fournissez un taskKey privé ayant uniquement actions: ['tasks.get'] et indexes: ['*']. Il sert seulement à consulter les tâches et n’est jamais publié. Sans lui, syncKey doit pouvoir lire les tâches globales. Un 404 masqué ne confirme pas la publication ; l’index temporaire est conservé. Ce comportement a été vérifié avec le moteur réel.

Cette page vous a-t-elle été utile ?