- Biblioteca simples para realizar busca de texto sem índice em JavaScript
- Pode ser usada em vários projetos e oferece ordenação de resultados baseada em TF-IDF e desempenho de busca rápido
- Não tem tantos recursos quanto FlexSearch ou lunr.js, mas é muito mais rápida e eficiente do que
text.indexOf(query) > -1
- Útil em aplicações web simples que lidam com conjuntos de dados menores
Principais recursos
- Busca sem índice: não é necessário um processo de pré-indexação para pesquisar
- Suporte a várias opções de busca:
- diferenciação entre maiúsculas e minúsculas
- suporte a busca por palavra, busca por prefixo e busca no estilo autocomplete
- Desempenho rápido: é possível pesquisar alguns milhares de itens em tempo real
- Ranking com TF-IDF: ordena os resultados da busca do "mais relevante" para baixo
API
- A função
search recebe dois argumentos obrigatórios e dois opcionais.
items: lista de itens a pesquisar. Normalmente é um array de strings ou um array de objetos com uma propriedade string.
query: consulta em string a ser pesquisada.
by (opcional): função que retorna um valor string do item. O padrão é x => String(x).
options (opcional): objeto que inclui opções de busca.
caseSensitive: diferencia maiúsculas de minúsculas. O padrão é false.
mode: forma de correspondência para palavras incompletas na consulta.
mode: 'word': corresponde apenas a palavras completas.
mode: 'prefix': corresponde pelo prefixo da palavra.
mode: 'autocomplete': modo híbrido em que a última palavra da consulta pode estar incompleta.
Exemplo de uso
import { search } from 'libsearch'; // ambiente Node.js
const { search } = window.libsearch; // ambiente do navegador
// Busca básica
search(articles, 'berkeley cali', a => a.title);
// => [{ title: 'Weather in Berkeley, California' }]
// Busca por palavra: “California” busca apenas “California”
search(articles, 'california', a => a.title, { mode: 'word' });
// Busca com diferenciação de maiúsculas e minúsculas: busca por “W” maiúsculo
search(articles, 'W', a => a.title, { caseSensitive: true });
// Tratamento de consulta vazia: retorna todos os resultados
search(articles, '', a => a.title);
Como funciona a busca
- libsearch realiza busca de texto completo rapidamente em uma lista de objetos JavaScript sem um índice de busca pré-construído
-
- Converte a consulta em uma expressão regular
- aproveita o mecanismo de expressões regulares otimizado dos motores JavaScript modernos para transformar a string da consulta em um filtro por regex e executar a busca
- exemplo: “Uni of California” → (^|\W)Uni($|\W), (^|\W)of($|\W), (^|\W)California
-
- Calcula o ranking TF-IDF com base nas correspondências da expressão regular e no comprimento do documento
- usa o comprimento do documento (número de caracteres), em vez da contagem de palavras, para aproximar o TF-IDF
3 comentários
Tem um problema, sim..
Achei interessante e fui dar uma olhada, mas parece que está sem manutenção há 3 anos... Será que a biblioteca é tão perfeita que não precisa de manutenção...? Fico com essa dúvida.
Comentários no Hacker News
115 linhas de TypeScript é algo leve, mas pode estar faltando funcionalidade importante
Percebeu que é fácil implementar funcionalidade de busca
Califniaem vez deCalifornia), mas é interessante entender a implementaçãoUsa o Fuse com frequência em apps JavaScript
Ao usar ferramentas como FlexSearch ou lunr, a construção de índice para milhares de itens é muito rápida
Pergunta sobre qual é a vantagem de não ter índice
grep