Búsqueda de texto completo del lado del cliente basada en js-search pero con soporte adicional para trabajadores web para un mejor rendimiento.
Consulte la búsqueda redux para ver un ejemplo de integración.
O instálelo usted mismo con NPM:
npm install --save js-worker-search
Bifurcada de la búsqueda JS, esta utilidad crea un índice de búsqueda y ejecuta búsquedas reales. Detecta automáticamente las capacidades del entorno actual (navegador o nodo) y utiliza una implementación basada en un trabajador web cuando es posible. Cuando no hay soporte disponible para trabajadores web, la búsqueda se realiza en el hilo principal (UI).
SearchApi define los siguientes métodos públicos:
constructor ({ caseSensitive, indexMode, tokenizePattern })
De forma predeterminada, SearchApi
crea un índice para que coincida con todas las subcadenas. Puede anular este comportamiento pasando un parámetro indexMode
con nombre. Los valores válidos son INDEX_MODES.ALL_SUBSTRINGS
, INDEX_MODES.EXACT_WORDS
e INDEX_MODES.PREFIXES
.
Las búsquedas no distinguen entre mayúsculas y minúsculas de forma predeterminada y se dividen en todos los espacios en blanco. Lea a continuación para obtener más información sobre cómo personalizar las opciones predeterminadas.
indexDocument (uid, text)
Agrega o actualiza un uid en el índice de búsqueda y lo asocia con el texto especificado. Tenga en cuenta que en este momento los uids solo se pueden agregar o actualizar en el índice, no eliminarse.
Parámetros:
search(query)
Busca en el índice actual el texto de consulta especificado. Sólo se aceptarán uids que coincidan con todas las palabras del texto. Si se proporciona una cadena de consulta vacía, se devolverán todos los uids indexados.
Las búsquedas de documentos no distinguen entre mayúsculas y minúsculas (por ejemplo, "búsqueda" coincidirá con "Buscar"). Las búsquedas de documentos utilizan la coincidencia de subcadenas (por ejemplo, "na" y "me" coincidirán con "nombre").
Parámetros:
Este método devolverá una serie de uids.
terminate()
Si la búsqueda se ejecuta en un trabajador web, esto finalizará el trabajador para permitir la recolección de basura.
Utilice la API así:
import SearchApi from 'js-worker-search'
const searchApi = new SearchApi ( )
// Index as many objects as you want.
// Objects are identified by an id (the first parameter).
// Each Object can be indexed multiple times (once per string of related text).
searchApi . indexDocument ( 'foo' , 'Text describing an Object identified as "foo"' )
searchApi . indexDocument ( 'bar' , 'Text describing an Object identified as "bar"' )
// Search for matching documents using the `search` method.
// In this case the promise will be resolved with the Array ['foo', 'bar'].
// This is because the word "describing" appears in both indices.
const promise = searchApi . search ( 'describing' )
De forma predeterminada, SearchApi
crea un índice para que coincida con todas las subcadenas. Puedes anular este comportamiento pasando un parámetro indexMode
al constructor de la siguiente manera:
import SearchApi , { INDEX_MODES } from 'js-worker-search'
// all-substrings match by default; same as current
// eg "c", "ca", "a", "at", "cat" match "cat"
const searchApi = new SearchApi ( )
// prefix matching (eg "c", "ca", "cat" match "cat")
const searchApi = new SearchApi ( {
indexMode : INDEX_MODES . PREFIXES
} )
// exact words matching (eg only "cat" matches "cat")
const searchApi = new SearchApi ( {
indexMode : INDEX_MODES . EXACT_WORDS
} )
De forma predeterminada, SearchApi
divide el texto en palabras (tokeniza) utilizando espacios y nuevas líneas como carácter delimitador. Si desea proporcionar su propia regla de división, pase una RegExp al constructor que define el patrón, así:
// Custom tokenizer pattern to include all non alphanumerics as delimeters
// ex: searching "Swift" matches "Thomas Swift" and "Thomas (Swift)" but not "swiftly tilting"
const searchApi = new SearchApi ( {
indexMode : INDEX_MODES . EXACT_WORDS ,
tokenizePattern : / [^a-z0-9]+ / ,
} )
El desinfectante predeterminado realiza una búsqueda que no distingue entre mayúsculas y minúsculas. Si desea anular ese comportamiento y realizar una búsqueda que distinga entre mayúsculas y minúsculas, establezca el bit caseSensitive en verdadero, así:
// custom sanitizer for case-sensitive searches
const searchApi = new SearchApi ( {
caseSensitive : true
} )
De forma predeterminada, la utilidad de búsqueda solo devuelve documentos que contienen cada token de búsqueda. Se puede configurar para devolver documentos que contengan cualquier token de búsqueda.
// Change search behavior from AND to OR
const searchApi = new SearchApi ( {
matchAnyToken : true
} )
Los cambios se rastrean en el registro de cambios.
js-worker-search está disponible bajo la licencia MIT.