Búsqueda de texto completo con índices precompilados para Nuxt.js usando lunr.js
Durante la fase de compilación de Nuxt.js, puede agregar documentos al generador de índices de búsqueda llamando al enlace nuxt lunr:document
. Si ha configurado y pasa una configuración regional compatible junto con el documento, el índice se creará utilizando el lema lunr para el idioma especificado. Como el índice de búsqueda lunr solo contiene referencias a sus documentos, opcionalmente puede pasar un metaprop junto con el documento que también se agregará al índice de búsqueda.
Notas de la versión
@nuxtjs/lunr-module
a su proyecto $ yarn add @nuxtjs/lunr-module # or npm install @nuxtjs/lunr-module
@nuxtjs/lunr-module
a la sección 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'
]
} */
}
]
}
Agregue documentos llamando al enlace nuxt lunr:documents
de la siguiente manera:
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
} )
Al configurar las opciones locales, puede indicar para qué idiomas admitidos se debe crear un índice de búsqueda. Si pasa cualquier otra configuración regional con un documento, se agregará al índice de búsqueda defaultLanguage
(y se imprimirá una advertencia).
Varios idiomas equivalen a varios índices de búsqueda
El inglés es compatible de forma predeterminada en Lunr, cuando solo tiene documentos en inglés no tiene que configurar ni pasar ninguna configuración regional.
Una configuración regional puede consistir sólo en un idioma o incluir un territorio; puedes usar cualquiera de ellos. Así que funcionará tanto solo el idioma (p. ej. nl ) como incluir el territorio (p. ej. nl_NL )
Si este módulo detecta que su proyecto utiliza nuxt-i18n, las configuraciones regionales configuradas para nuxt-i18n se agregarán automáticamente. No es necesario configurar las configuraciones regionales que utiliza dos veces a menos que desee utilizar configuraciones regionales diferentes (por ejemplo, solo una) para el índice de búsqueda.
Este módulo incluye un componente de búsqueda que puede utilizar en su sitio web. Utilice su ranura predeterminada para mostrar los resultados de su búsqueda utilizando las propiedades pasadas en el metaprop
< 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 >
La referencia del documento (definida por option.ref) se utiliza en el índice de búsqueda para vincular todos los segmentos de palabras derivadas. Si utiliza, por ejemplo, la ruta de la página como referencia del documento, entonces, para una página con la ruta /en/offices/emea/nl/contact
ese valor de cadena se usará para vincular todos los segmentos de palabras derivadas. Esto podría aumentar enormemente el tamaño del índice de búsqueda, por lo que se recomienda crear una referencia de documento numérica y usar la propiedad meta
para agregar la ruta de la página para esa referencia de documento solo una vez al índice de búsqueda.
Lunr no exporta módulos ES6 y no se puede sacudir el árbol. El uso de este módulo agrega ~8.5KB
+ ~2KB
para todos los demás idiomas, además del inglés, a su paquete (comprimido con gzip). Vea el ejemplo anterior para una importación dinámica que garantiza que las importaciones de lunr no estén incluidas en su paquete de proveedores.
El índice de búsqueda se guarda como un archivo json y, por lo tanto, debe analizarse en el cliente. Si el json de su índice de búsqueda se vuelve muy grande, podría haber un problema en los clientes (móviles). Por ejemplo, Safari en iOS limita cada punto de entrada de nivel superior para que se ejecute durante un máximo de 10 segundos. Consulte este problema de Lunr.js para encontrar una posible solución.
Boolean
true
Si es verdadero, el componente de búsqueda predeterminado se agregará a su proyecto Nuxt.
Puede importar el componente utilizando el alias del paquete web
lunr-module/search
Boolean
, String
false
Si es cierto, se agregará un complemento a su proyecto que instala el componente de búsqueda globalmente.
Establecer esta opción implica
includeComponent: true
De forma predeterminada, el componente de búsqueda se registrará como lunr-search
. Si desea este nombre, puede configurar esta opción en una cadena con el nombre que desea usar.
globalComponent : 'my-global-lunr-search'
. . .
< template >
< my-global-lunr-search : lang = "lang" class = "my-search" / >
< / template >
Boolean
true
Si se incluye el componente de búsqueda, esta opción determina si los estilos CSS predeterminados deben incluirse o no.
String
'en'
El idioma predeterminado a utilizar. Este también es el idioma alternativo si pasa un documento con una configuración regional no compatible.
String
, Array
undefined
Una cadena o matriz de los idiomas para los que se debe crear un índice de búsqueda.
Aunque esta opción puede parecer redundante (es decir, ¿por qué no simplemente crear un índice de búsqueda para cada idioma que se pasa), proporciona una verificación para evitar que los documentos "deshonestos" se indexen en un índice separado?
Object
{}
Un objeto que contiene un mapa de idiomas no admitidos a idiomas derivados admitidos (por lunr). Use esto para especificar qué lenguaje de derivación debe usarse si desea crear un índice de búsqueda para un idioma que no es compatible con lunr (todavía).
String
search-index
predeterminado Al compilar su proyecto, los índices de búsqueda creados se emitirán como activos del paquete web. Esta opción determina la ruta que se debe utilizar en nuxt.publicPath
.
Con las configuraciones predeterminadas para Nuxt.js y este módulo, el índice de búsqueda en inglés está disponible en
/_nuxt/search-index/en.json
String
id
predeterminadaEl nombre de la propiedad en su documento que especifica qué referencia debe usarse para este documento en el índice de búsqueda.
Array
['title', 'body']
Los nombres de las propiedades en su documento que serán indexados.
String
Search
predeterminada El texto que se coloca en el marcador de posición del campo de entrada de búsqueda. Si está utilizando nuxt-i18n, también puede proporcionar una traducción con la clave lunr-module.placeholderText
Array<String>
{ fetching: 'Fetching search index', loading: 'Loading search index', searching: 'Searching...', noresults: 'No results found' }
Los mensajes de estado que se muestran durante el ciclo de vida de la búsqueda. Si está utilizando nuxt-i18n, también puede proporcionar una traducción con la clave lunr-module.${key}
. Por ejemplo, utilice lunr-module.noresults
para proporcionar una traducción para el estado no se encontraron resultados.
use
nuxt.callHook(<name>, <arg>)
si desea usar estos ganchos
({ locale?, document, meta? })
El gancho principal que se utiliza para agregar documentos al índice de búsqueda. Debe pasar un objeto como se describe. Tanto la configuración regional como la meta son opcionales. Si no se pasa ninguna configuración regional, se utilizará el idioma defaultLanguage
.
use
nuxt.hook(<name>, <callback>)
si desea utilizar estos enlaces. La función de devolución de llamada recibe los argumentos enumerados.
({ locale, builder })
Utilice este enlace si, por ejemplo, desea registrar complementos lunr personalizados
Este enlace se llama después de crear una instancia del generador lunr, pero antes de que se hayan agregado complementos de idioma o se hayan configurado referencias y campos.
({ locale, builder })
Utilice este enlace si, por ejemplo, desea agregar documentos adicionales a un índice.
Este enlace se llama cuando se ha configurado el generador lunr, justo antes de que los documentos se agreguen al índice.
({ locale, builder, index })
Utilice este enlace si desea interactuar con el índice antes de exportarlo.
Este enlace se llama justo antes de que el índice se exporte como un objeto json.
({ locale, json })
Utilice este enlace si desea manipular el json que se emite como índice de búsqueda para la configuración regional.
Este enlace se llama durante la compilación del paquete web justo antes de que el índice de búsqueda esté preparado para emitirse como activo.
yarn install
o npm install
npm run dev
Licencia MIT
Copyright (c) pimlie