"¿Por qué no tenemos un motor de búsqueda decente, similar al cliente (en el navegador)?"
Esta biblioteca proporciona funciones de búsqueda de texto completo similar a Lucene para el navegador y node.js.
Este motor de búsqueda utiliza varios algoritmos avanzados para proporcionar una búsqueda robusta y eficiente sobre una gran colección de documentos. Los algoritmos utilizados incluyen TF-IDF para pesar y clasificación, árbol BK para la coincidencia difusa, BM25 para la puntuación de relevancia y la distancia de Damerau-Levenshtein para medir la distancia de edición entre los términos de búsqueda. El motor de búsqueda admite múltiples idiomas y utiliza la eliminación de la palabra de parada y las palabras de parada para mejorar su eficiencia. También respalda el almacenamiento y la recuperación de metadatos asociados con los documentos. Puede generar un índice a partir de un corpus de texto y metadatos tanto en el lado del cliente como en el servidor. Puede hidratar y rehidratar (reutilizar un pregenerado) también en el índice en el lado del cliente y el servidor.
Quiero usar un índice similar a Lucene que use Vectorización TF-IDF, BM25 y Bktree Ranking, así como la bola de nieve y las palabras de parada en el lado del cliente.
Quiero generar el índice de búsqueda, ya sea en el lado del cliente o del lado del servidor (y rehidrate/reutilizarlo en el cliente o del lado del servidor). La información de estado debe ser pequeña y comprimida.
La búsqueda de texto completo será rápida y eficiente, no conducir a muchos positivos falsos o falsos negativos.
El motor de búsqueda debe poder retirarse y buscar en metadatos que puedan estar asociados con cada documento.
El motor de búsqueda debe poder eliminar/actualizar sus documentos del índice.
El estado será hidratable.
en , de , fr , es , ja8 KiB de nano (ESM, GIZPPED, BASE BILIDOBLE)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