"Pourquoi n'avons-nous pas un moteur de recherche côté client (in-navigateur) décent et lunene maintenant?"
Cette bibliothèque fournit des fonctionnalités de recherche en texte complet de type lunene pour le navigateur et Node.js.
Ce moteur de recherche utilise plusieurs algorithmes avancés pour fournir une recherche robuste et efficace sur une grande collection de documents. Les algorithmes utilisés incluent TF-IDF pour la pesée et le classement, BK-Tree pour la correspondance floue, BM25 pour la notation de pertinence et la distance de Damerau-Levenshtein pour mesurer la distance d'édition entre les termes de recherche. Le moteur de recherche prend en charge plusieurs langues et utilise la suppression des mots en tige et des mots arrêtés pour améliorer son efficacité. Il prend également en charge le stockage et la récupération des métadonnées associées aux documents. Vous pouvez générer un index à partir d'un corpus de texte et de métadonnées à côté du client et du serveur. Vous pouvez hydrater et réhydrater (réutiliser un pré-généré) l'index également à la fois sur le côté client et au serveur.
Je veux utiliser un index de type lunene qui utilise la vectorisation TF-IDF, le classement BM25 et BKTREE ainsi que la boule de neige engelant et les mots arrêtés du côté client.
Je souhaite générer l'index de recherche du côté client ou du côté serveur (et réhydrater / réutiliser le client ou le côté serveur). Les informations sur l'état doivent être petites et compressées.
La recherche en texte intégral doit être rapide et efficace, ne conduisant pas beaucoup de faux positifs ou de faux négatifs.
Le moteur de recherche doit être en mesure de retreindre et de rechercher dans des métadonnées qui peuvent être associées à chaque document.
Le moteur de recherche doit pouvoir supprimer / mettre à jour ses documents d'index.
L'état doit être hydratable.
en , de , fr , es , ja8 KiB nano sized (ESM, gizpped, base library)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