"Por que não temos um mecanismo de pesquisa decente e do lado do cliente (no navegador) agora?"
Esta biblioteca fornece recursos de pesquisa de texto completo do tipo Lucene para o navegador e o Node.JS.
Este mecanismo de pesquisa usa vários algoritmos avançados para fornecer pesquisas robustas e eficientes em relação a uma grande coleção de documentos. Os algoritmos utilizados incluem TF-IDF para pesagem e classificação, BK-Tree para correspondência difusa, BM25 para pontuação de relevância e distância de Damerau-Levenshtein para medir a distância de edição entre os termos de pesquisa. O mecanismo de pesquisa suporta vários idiomas e usa a remoção de palavras -parto e palavras para aumentar sua eficiência. Ele também suporta o armazenamento e a recuperação de metadados associados aos documentos. Você pode gerar um índice a partir de um corpus de texto e metadados no lado do cliente e do servidor. Você pode hidratar e re-hidratar (reutilizar um pré-gerado) o índice também no lado do cliente e do servidor.
Quero usar um índice do tipo Lucene que use a vetorização TF-IDF, a classificação BM25 e BKTree, bem como a bola de neve decorrente e as palavras de parada no lado do cliente.
Quero gerar o índice de pesquisa no lado do cliente ou no lado do servidor (e re-hidratá-lo/reutilizar no cliente ou no servidor). As informações do estado devem ser pequenas e comprimidas.
A pesquisa de texto completo deve ser rápido e eficiente, não levando a muitos falsos positivos ou falsos negativos.
O mecanismo de pesquisa deve ser capaz de recuperar e pesquisar em metadados que possam estar associados a cada documento.
O mecanismo de pesquisa deve poder remover/atualizar os documentos do índice.
O estado deve ser hidratável.
en , de , fr , es , ja, ja8 KiB Nano Size (ESM, Gizpped, Base Biblioteca)yarn add clientside-searchnpm install clientside-search import { SearchEngine } from 'clientside-search'
import en from 'clientside-search/en'
// create a new instance of a search engine
const searchEngine = new SearchEngine ( en )
// add some text
const docId1 = searchEngine . addDocument ( 'The quick brown fox jumps over the lazy dog' )
// you can also add UTF8 text, and metadata
const docId2 = searchEngine . addDocument ( 'The quick brown fox jumps over the fence ✅' , {
// metadata with index_ prefix will be indexed for search
index_title : 'Fence' ,
date : new Date ( ) ,
author : 'John Doe' ,
} )
/**
* {
* id:
* score: 1.34,
* metadata: { title: 'Fence', date: '2023-07-12 ...', author: 'John Doe' }
* }
*/
const searchResult = searchEngine . search ( 'Fence' )
// if you want to persist the index state,
// hydratedState is a JSON string that you can persist
const hydratedState = searchEngine . hydrateState ( )
// PLEASE NOTE: The hydrated state does NOT contain the original input text
// It contains an optimized representation of the search index
// However, metadata is kept 1:1
// you can re-hydrate from that state anywhere,
// on the server or the client:
const hydratedEngine = SearchEngine . fromHydratedState ( hydratedState , en )
// equals: searchResult
const searchResultFromHydated = hydratedEngine . search ( 'Fence' ) const { SearchEngine } = require ( 'clientside-search' )
const { en } = require ( 'clientside-search/en' )
// same API like ESM variant