Saltar al contenido
duxt

Meilisearch

Añade la capa complementaria oficial para indexación atómica durante la compilación y búsqueda opcional en el navegador.

La capa oficial @kirchdev/duxt-meilisearch consume toda la instantánea duxt:search:records. Conserva los identificadores derivados de la URL, texto normalizado, fuente, versión e idioma, incluidas las secciones generadas. Meilisearch es opcional; la búsqueda integrada no necesita un servicio.

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'
    }
  }
})

Activa ambas opciones de producción solo en el trabajo de publicación. La presencia de syncKey no habilita escrituras. El desarrollo, Nuxt prepare y los contextos reconocidos de PR o vista previa omiten la sincronización. Otros sistemas CI deben usar deployment: 'preview' para las vistas previas. Cloudflare Pages también exige que DUXT_PRODUCTION_BRANCH coincida con CF_PAGES_BRANCH.

Usa un índice exclusivo docs. La clave privada de compilación necesita indexes.create, indexes.get, indexes.delete, indexes.swap, settings.update, documents.add y tasks.get para docs y docs__duxt_*. La capa crea un índice provisional único, espera las tareas de configuración e importación, lo intercambia atómicamente con docs, espera el éxito del intercambio y elimina la instantánea anterior. Las siguientes compilaciones eliminan páginas borradas; una instantánea vacía vacía el índice. Los errores de importación conservan el índice anterior. Un intercambio incierto conserva el índice provisional para no borrar datos posiblemente publicados; los errores de limpieza se notifican. Serializa las publicaciones si importa su orden. La primera sincronización crea el destino vacío cuando el índice provisional está listo.

La clave privada nunca entra en la configuración del navegador. Omite searchKey para conservar la búsqueda integrada mientras sincronizas. Para conectar el diálogo existente, crea otra clave con solo la acción search y solo el índice configurado docs. La clave de búsqueda predeterminada cubre todos los índices; no la uses. Nunca publiques una clave maestra o administrativa. La capa rechaza reutilizar la clave privada conocida; una cadena opaca no revela sus permisos, por lo que el operador debe aprovisionar la clave restringida. La búsqueda exclusiva del navegador no necesita clave privada. Permite el origen del sitio mediante CORS en el servicio.

La búsqueda mantiene la versión seleccionada o predeterminada de cada artefacto y la cadena de idiomas de reserva. Una traducción sustituye su página original; las páginas sin traducción siguen apareciendo en el idioma original. La capa lee un inventario de rutas almacenado en caché mediante Content y excluye las páginas cubiertas por fuente, versión e idioma antes de ordenar y limitar. El campo page, usado solo para filtrar, contiene la URL sin ancla; las secciones ocultas no ocupan la ventana de 1.000 resultados. Sincroniza una vez antes de usar la búsqueda del navegador con un índice creado por una compilación anterior. Los errores del servicio producen resultados vacíos y una advertencia en consola. Las peticiones HTTP caducan tras 30 segundos; las tareas tienen cinco minutos, configurables con sync.taskTimeoutMs, hasta una hora.

El paquete tiene versión y changelog propios. duxt no recibe SDK, credenciales ni configuración del proveedor. Las interfaces propias pueden usar @kirchdev/duxt-meilisearch/search; las herramientas de compilación pueden usar @kirchdev/duxt-meilisearch/sync con las mismas opciones de producción.

Consulta el intercambio atómico, las tareas asíncronas y las claves restringidas de Meilisearch.

Meilisearch 1.54.3 oculta la tarea global indexSwap (indexUid: null) a las claves restringidas por índice, aunque incluyan ambos índices. Con una clave de escritura restringida, añade un taskKey privado con solo actions: ['tasks.get'] e indexes: ['*']. Se usa únicamente para consultar tareas y nunca se publica. Sin él, syncKey debe poder leer tareas globales. Un 404 oculto no confirma la publicación y conserva el índice provisional. Este comportamiento se verificó con el motor real.

¿Le ha resultado útil esta página?