"Warum haben wir inzwischen keine anständige, lucene-ähnliche Kunden-Seite (In-Browser-) Suchmaschine?"
Diese Bibliothek bietet Lucene-ähnliche Volltext-Suchfunktionen für den Browser und den Node.js.
Diese Suchmaschine verwendet mehrere erweiterte Algorithmen, um eine robuste und effiziente Suche nach einer großen Sammlung von Dokumenten zu bieten. Zu den verwendeten Algorithmen gehören TF-IDF zum Wiegen und Ranking, BK-Tree für Fuzzy-Matching, BM25 zur Relevanzbewertung und Damerau-Levenshtein-Entfernung für die Messung des Bearbeitungsabstands zwischen den Suchbeginn. Die Suchmaschine unterstützt mehrere Sprachen und verwendet Stamm- und Stopword -Entfernung, um ihre Effizienz zu verbessern. Es unterstützt auch den Speicher und Abrufen von Metadaten, die mit den Dokumenten verbunden sind. Sie können einen Index aus einem Textkorpus und Metadaten sowohl auf client- als auch serverseitig generieren. Sie können den Index sowohl auf der Client als auch auf der serverseitigen Seite fydratieren und wiederverwenden (eine vorgenerierte).
Ich möchte einen Lucene-ähnlichen Index verwenden, der die TF-IDF-Vektorisierung, das BM25- und das BKTree-Ranking sowie die Schneeball-Rangliste verwendet und auf der Client-Seite gestoppt wird.
Ich möchte den Suchindex entweder auf client- oder serverseitig generieren (und ihn auf Client oder Server-Seite neu aushydrieren/wiederverwenden). Staatliche Informationen sollten klein und komprimiert sein.
Die Volltext-Suche muss schnell und effizient sein und nicht zu einer Vielzahl von Falschpositiven oder falsch-negativen führen.
Die Suchmaschine sollte in der Lage sein, in Metadaten zurückzuführen und zu suchen, die jedem Dokument zugeordnet werden können.
Die Suchmaschine sollte in der Lage sein, seine Indexdokumente zu entfernen/zu aktualisieren.
Staat muss hydratabel sein.
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