Pular para o conteúdo
duxt

Meilisearch

Adicione a camada complementar oficial para indexação atômica durante o build e busca opcional no navegador.

A camada oficial @kirchdev/duxt-meilisearch consome todo o snapshot duxt:search:records. Preserva IDs derivados da URL, texto normalizado, origem, versão e idioma, incluindo seções geradas. Meilisearch é opcional; a busca integrada não precisa de serviço.

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

Ative ambas as opções de produção apenas no trabalho de publicação. A presença de syncKey não habilita gravações. Desenvolvimento, Nuxt prepare e contextos reconhecidos de PR ou prévia ignoram a sincronização. Outros sistemas CI devem usar deployment: 'preview' nas prévias. Cloudflare Pages também exige que DUXT_PRODUCTION_BRANCH corresponda a CF_PAGES_BRANCH.

Use um índice exclusivo docs. A chave privada de build precisa de indexes.create, indexes.get, indexes.delete, indexes.swap, settings.update, documents.add e tasks.get para docs e docs__duxt_*. A camada cria um índice temporário único, aguarda tarefas de configuração e importação, troca-o atomicamente com docs, aguarda o sucesso da troca e só então remove o snapshot anterior. Builds seguintes removem páginas excluídas; um snapshot vazio esvazia o índice. Falhas de importação preservam o índice anterior. Uma troca incerta mantém o índice temporário para evitar excluir dados possivelmente publicados; falhas de limpeza são informadas. Serialize as publicações se a ordem importar. A primeira sincronização cria o destino vazio quando o índice temporário está pronto.

A chave privada nunca entra na configuração do navegador. Omita searchKey para manter a busca integrada durante a sincronização. Para conectar o diálogo existente, crie outra chave com apenas a ação search e apenas o índice configurado docs. A chave de busca padrão abrange todos os índices; não a use. Nunca publique uma chave mestra ou administrativa. A camada rejeita reutilizar a chave privada conhecida; uma string opaca não revela permissões, portanto cabe ao operador provisionar a chave restrita. Busca apenas no navegador não precisa de chave privada. Permita a origem do site na configuração CORS do serviço.

A busca mantém a versão selecionada ou padrão de cada artefato e a cadeia de idiomas de fallback. Uma tradução substitui sua página original; páginas sem tradução continuam acessíveis no idioma original. A camada lê um inventário de caminhos em cache pelo Content e exclui páginas cobertas por fonte, versão e idioma antes da classificação e do limite. O campo page, usado apenas para filtrar, contém a URL sem âncora; seções ocultas não ocupam a janela de 1.000 resultados. Sincronize uma vez antes da busca no navegador se uma compilação anterior criou o índice. Erros do serviço produzem resultados vazios e um aviso no console. Requisições HTTP expiram após 30 segundos; tarefas têm cinco minutos, configuráveis por sync.taskTimeoutMs, até uma hora.

O pacote tem versão e changelog próprios. duxt não recebe SDK, credenciais nem configuração do provedor. Interfaces próprias usam @kirchdev/duxt-meilisearch/search; scripts de build podem usar @kirchdev/duxt-meilisearch/sync com as mesmas opções de produção.

Consulte a troca atômica, as tarefas assíncronas e as chaves restritas do Meilisearch.

Meilisearch 1.54.3 oculta a tarefa global indexSwap (indexUid: null) de chaves restritas por índice, mesmo que incluam ambos os índices. Com uma chave de escrita restrita, forneça um taskKey privado apenas com actions: ['tasks.get'] e indexes: ['*']. Ele serve somente para consultar tarefas e nunca é publicado. Sem ele, syncKey precisa ler tarefas globais. Um 404 oculto não confirma a publicação e preserva o índice temporário. Esse comportamento foi verificado com o motor real.

Esta página foi útil?