Pesquisa de texto completo no lado do cliente baseada em js-search, mas com suporte adicional de webworker para melhor desempenho.
Confira o redux-search para um exemplo de integração.
Ou instale você mesmo com NPM:
npm install --save js-worker-search
Bifurcado a partir da pesquisa JS, este utilitário cria um índice de pesquisa e executa pesquisas reais. Ele detecta automaticamente os recursos do ambiente atual (navegador ou nó) e usa uma implementação baseada em web-worker quando possível. Quando nenhum suporte ao web trabalhador está disponível, a pesquisa é feita no thread principal (UI).
SearchApi define os seguintes métodos públicos:
constructor ({ caseSensitive, indexMode, tokenizePattern })
Por padrão, SearchApi
cria um índice para corresponder a todas as substrings. Você pode substituir esse comportamento passando um parâmetro indexMode
nomeado. Os valores válidos são INDEX_MODES.ALL_SUBSTRINGS
, INDEX_MODES.EXACT_WORDS
e INDEX_MODES.PREFIXES
.
As pesquisas não diferenciam maiúsculas de minúsculas por padrão e são divididas em todos os caracteres de espaço em branco. Leia abaixo para obter mais informações sobre como personalizar as opções padrão.
indexDocument (uid, text)
Adiciona ou atualiza um uid no índice de pesquisa e o associa ao texto especificado. Observe que neste momento os uids só podem ser adicionados ou atualizados no índice, não removidos.
Parâmetros:
search(query)
Pesquisa no índice atual o texto de consulta especificado. Somente serão aceitos uids que correspondam a todas as palavras do texto. Se uma string de consulta vazia for fornecida, todos os uids indexados serão retornados.
As pesquisas de documentos não diferenciam maiúsculas de minúsculas (por exemplo, "pesquisa" corresponderá a "Pesquisa"). As pesquisas de documentos usam correspondência de substring (por exemplo, "na" e "me" corresponderão a "nome").
Parâmetros:
Este método retornará um array de uids.
terminate()
Se a pesquisa estiver em execução em um web trabalhador, isso encerrará o trabalhador para permitir a coleta de lixo.
Use a API assim:
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' )
Por padrão, SearchApi
cria um índice para corresponder a todas as substrings. Você pode substituir esse comportamento passando um parâmetro indexMode
para o construtor da seguinte forma:
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
} )
Por padrão, SearchApi
divide o texto em palavras (tokeniza) usando espaços e novas linhas como caractere delimitador. Se você quiser fornecer sua própria regra de divisão, passe um RegExp para o construtor que define o padrão, assim:
// 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]+ / ,
} )
O sanitizador padrão executa uma pesquisa que não diferencia maiúsculas de minúsculas. Se você quiser substituir esse comportamento e fazer uma pesquisa com distinção entre maiúsculas e minúsculas, defina o bit caseSensitive como verdadeiro, assim:
// custom sanitizer for case-sensitive searches
const searchApi = new SearchApi ( {
caseSensitive : true
} )
Por padrão, o utilitário de pesquisa retorna apenas documentos que contêm todos os tokens de pesquisa. Pode ser configurado para retornar documentos contendo qualquer token de pesquisa.
// Change search behavior from AND to OR
const searchApi = new SearchApi ( {
matchAnyToken : true
} )
As alterações são rastreadas no changelog.
js-worker-search está disponível sob a licença MIT.