Pesquisa de texto completo com índices pré-construídos para Nuxt.js usando lunr.js
Durante a fase de construção do Nuxt.js, você pode adicionar documentos ao construtor de índice de pesquisa chamando o gancho nuxt lunr:document
. Se você configurou e passou um código de idioma compatível ao longo do documento, o índice será construído usando o lematizador lunr para o idioma especificado. Como o índice de pesquisa lunr contém apenas referências aos seus documentos, você pode opcionalmente passar um meta prop junto com o documento que também será adicionado ao índice de pesquisa.
Notas de versão
@nuxtjs/lunr-module
ao seu projeto $ yarn add @nuxtjs/lunr-module # or npm install @nuxtjs/lunr-module
@nuxtjs/lunr-module
à seção de modules
de nuxt.config.js
{
modules : [
// Simple usage
'@nuxtjs/lunr-module' ,
// With options
{
src : '@nuxtjs/lunr-module' ,
// These are the default options:
/*
options: {
includeComponent: true,
globalComponent: false,
css: true,
defaultLanguage: 'en',
languages: false,
path: 'search-index',
ref: 'id',
fields: [
'title',
'body'
]
} */
}
]
}
Adicione documentos chamando nuxt hook lunr:documents
da seguinte forma:
const document = {
id : 1 ,
title : 'My Title' ,
body : 'The body'
}
const meta = {
href : '/link/to/page' ,
title : document . title
}
nuxt . callHook ( 'lunr:document' , ( {
locale : 'af' , // optional, default en
document ,
meta // optional
} )
Ao configurar as opções de localidades você pode indicar para quais idiomas suportados um índice de pesquisa deve ser criado. Se você passar qualquer outro código de idioma com um documento, ele será adicionado ao índice de pesquisa defaultLanguage
(e um aviso será impresso).
Vários idiomas equivalem a vários índices de pesquisa
O inglês é suportado por padrão no Lunr. Quando você possui apenas documentos em inglês, não é necessário configurar ou passar nenhuma localidade.
Uma localidade pode consistir apenas em um idioma ou incluir um território; você pode usar qualquer um deles. Portanto, tanto apenas o idioma (por exemplo, nl ) quanto incluir o território (por exemplo, nl_NL ) funcionarão
Se este módulo detectar que seu projeto usa nuxt-i18n, as localidades configuradas para nuxt-i18n serão adicionadas automaticamente. Você não precisa configurar as localidades que usa duas vezes, a menos que queira usar localidades diferentes (por exemplo, apenas uma) para o índice de pesquisa.
Este módulo inclui um componente de pesquisa que você pode usar em seu site. Use seu slot padrão para exibir os resultados da pesquisa usando as propriedades passadas na meta prop
< template >
< lunr-search : lang = " lang " >
< template v-slot : default = " { result, index, maxScore, meta } " >
< nuxt-link : to = " meta . href " >
{{ meta . title }}
< span >score: {{ Math . round ( 100 * result . score / maxScore) }}%</ span >
</ nuxt-link >
</ template >
</ lunr-search >
</ template >
< script >
export default {
components : {
// Note: 'lunr-module' below is a custom webpack alias and
// does NOT refer to the folder in node_modules
LunrSearch : () => import ( ' lunr-module/search ' )
}
}
</ script >
A referência do documento (definida por option.ref) é usada no índice de pesquisa para vincular todos os segmentos de palavras com radicais. Se você usar, por exemplo, o caminho da página como referência do documento, então, para uma página com o caminho /en/offices/emea/nl/contact
esse valor de string será usado para vincular todos os segmentos de palavras derivadas. Isso pode aumentar enormemente o tamanho do índice de pesquisa, portanto, é recomendado criar uma referência de documento numérico e usar a propriedade meta
para adicionar o caminho da página para essa referência de documento apenas uma vez ao índice de pesquisa.
Lunr não exporta módulos ES6 e não pode ser alterado. O uso deste módulo adiciona ~8.5KB
+ ~2KB
para todos os outros idiomas, além do inglês, ao seu pacote (compactado em g). Veja o exemplo acima para uma importação dinâmica que garante que as importações lunr não sejam incluídas no seu pacote de fornecedores
O índice de pesquisa é salvo como um arquivo JSON e, portanto, precisa ser analisado no cliente. Se o json do seu índice de pesquisa ficar muito grande, isso poderá ser um problema para clientes (móveis). Por exemplo, o Safari no iOS limita a execução de cada ponto de entrada de nível superior por no máximo 10 segundos. Consulte este problema do Lunr.js para uma possível solução alternativa.
Boolean
true
Se for verdade, o componente de pesquisa padrão será adicionado ao seu projeto Nuxt
Você pode importar o componente usando o alias do webpack
lunr-module/search
Boolean
, String
false
Se for verdade, um plugin será adicionado ao seu projeto que instala o componente de pesquisa globalmente
Definir esta opção implica
includeComponent: true
Por padrão o componente de pesquisa será registrado como lunr-search
, se desejar esse nome você pode definir esta opção como uma string com o nome que deseja usar
globalComponent : 'my-global-lunr-search'
. . .
< template >
< my-global-lunr-search : lang = "lang" class = "my-search" / >
< / template >
Boolean
true
Se o componente de pesquisa estiver incluído, esta opção determina se os estilos CSS padrão devem ser incluídos ou não
String
'en'
O idioma padrão a ser usado. Este também é o idioma alternativo se você passar um documento com uma localidade não suportada
String
, Array
undefined
Uma string ou matriz dos idiomas para os quais um índice de pesquisa precisa ser criado.
Embora esta opção possa parecer redundante (ou seja, por que não criar apenas um índice de pesquisa para cada idioma que é passado), ela fornece uma verificação para evitar que documentos 'não autorizados' sejam indexados em um índice separado.
Object
{}
Um objeto que contém um mapa de idiomas não suportados para idiomas de lematização suportados (por lunr). Use isto para especificar qual linguagem de lematização deve ser usada se você deseja construir um índice de pesquisa para uma linguagem que não é suportada pelo lunr (ainda).
String
search-index
padrão Na construção do seu projeto, os índices de pesquisa criados serão emitidos como ativos do webpack. Esta opção determina o caminho em nuxt.publicPath
que deve ser usado.
Com configurações padrão para Nuxt.js e este módulo, o índice de pesquisa em inglês está disponível em
/_nuxt/search-index/en.json
String
id
padrãoO nome da propriedade no seu documento que especifica qual referência deve ser usada para este documento no índice de pesquisa
Array
['title', 'body']
Os nomes das propriedades em seu documento que serão indexadas
String
Search
padrão O texto colocado no espaço reservado do campo de entrada de pesquisa. Se estiver usando nuxt-i18n, você também pode fornecer uma tradução com a chave lunr-module.placeholderText
Array<String>
{ fetching: 'Fetching search index', loading: 'Loading search index', searching: 'Searching...', noresults: 'No results found' }
As mensagens de status exibidas durante o ciclo de vida da pesquisa. Se você estiver usando nuxt-i18n, também poderá fornecer uma tradução com a chave lunr-module.${key}
. Por exemplo, use lunr-module.noresults
para fornecer uma tradução para o status de nenhum resultado encontrado.
use
nuxt.callHook(<name>, <arg>)
se desejar usar esses ganchos
({ locale?, document, meta? })
O gancho principal usado para adicionar documentos ao índice de pesquisa. Você precisa passar um objeto conforme descrito. Tanto o locale quanto o meta são opcionais. Se nenhuma localidade for passada, o defaultLanguage
será usado
use
nuxt.hook(<name>, <callback>)
se desejar usar esses ganchos. A função de retorno de chamada recebe os argumentos listados
({ locale, builder })
Use este gancho se você, por exemplo, quiser registrar plugins lunr personalizados
Este gancho é chamado depois que o construtor lunr é instanciado, mas antes que os plug-ins de linguagem sejam adicionados ou quaisquer referências e campos sejam definidos
({ locale, builder })
Use este gancho se por exemplo quiser adicionar documentos extras a um índice
Este gancho é chamado quando o construtor lunr é configurado, pouco antes dos documentos serem adicionados ao índice.
({ locale, builder, index })
Use este gancho se desejar interagir com o índice antes de exportá-lo
Este gancho é chamado logo antes do índice ser exportado como um objeto json
({ locale, json })
Use este gancho se desejar manipular o json que é emitido como índice de pesquisa para o local
Este gancho é chamado durante a compilação do webpack pouco antes do índice de pesquisa ser preparado para ser emitido como ativo
yarn install
ou npm install
npm run dev
Licença MIT
Direitos autorais (c) pimlie