12 Punkte von GN⁺ 2024-12-30 | 3 Kommentare | Auf WhatsApp teilen
  • Eine einfache Bibliothek für Textsuche ohne Index in JavaScript
  • Kann in verschiedenen Projekten eingesetzt werden und bietet TF-IDF-basiertes Ranking der Ergebnisse sowie schnelle Suchleistung
  • Nicht so funktionsreich wie FlexSearch oder lunr.js, aber deutlich schneller und effizienter als text.indexOf(query) > -1
  • Nützlich für einfache Webanwendungen, die mit kleinen Datensätzen arbeiten

Hauptfunktionen

  • Suche ohne Index: Für die Suche ist kein vorheriger Indexierungsprozess erforderlich
  • Unterstützt verschiedene Suchoptionen:
    • Groß-/Kleinschreibung beachten
    • Wortsuche, Präfixsuche und Suche im Autocomplete-Stil
  • Schnelle Performance: Auch einige Tausend Einträge lassen sich in Echtzeit durchsuchen
  • TF-IDF-Ranking: Sortiert Suchergebnisse nach der „höchsten Relevanz“

API

  • Die Funktion search akzeptiert zwei erforderliche und zwei optionale Argumente.
  • items: Liste der zu durchsuchenden Elemente. In der Regel ein String-Array oder ein Array von Objekten mit einer String-Eigenschaft.
  • query: Der zu suchende String-Query.
  • by (optional): Eine Funktion, die aus einem Element einen String-Wert zurückgibt. Standardwert ist x => String(x).
  • options (optional): Ein Objekt mit Suchoptionen.
    • caseSensitive: Ob Groß-/Kleinschreibung berücksichtigt wird. Standardwert ist false.
    • mode: Wie unvollständige Query-Wörter abgeglichen werden.
      • mode: 'word': Es werden nur vollständige Wörter abgeglichen.
      • mode: 'prefix': Abgleich über Wortpräfixe.
      • mode: 'autocomplete': Hybridmodus, bei dem das letzte Query-Wort unvollständig sein kann.

Anwendungsbeispiele

import { search } from 'libsearch'; // Node.js-Umgebung  
const { search } = window.libsearch; // Browser-Umgebung  
  
// Einfache Suche  
search(articles, 'berkeley cali', a => a.title);  
// => [{ title: 'Weather in Berkeley, California' }]  
  
// Wortsuche: „California“ findet nur „California“  
search(articles, 'california', a => a.title, { mode: 'word' });  
  
// Suche mit Groß-/Kleinschreibung: Suche nach großem „W“  
search(articles, 'W', a => a.title, { caseSensitive: true });  
  
// Behandlung einer leeren Suchanfrage: gibt alle Ergebnisse zurück  
search(articles, '', a => a.title);  

Funktionsweise der Suche

  • libsearch führt schnelle Volltextsuche in Listen von JavaScript-Objekten durch, ohne einen vorab erstellten Suchindex
    1. Umwandlung der Query in reguläre Ausdrücke
    • Die Suche erfolgt, indem der Query-String mithilfe der optimierten Regex-Engine moderner JavaScript-Engines in Regex-Filter umgewandelt wird
    • Beispiel: „Uni of California“ → (^|\W)Uni($|\W), (^|\W)of($|\W), (^|\W)California
    1. Berechnung eines TF-IDF-Rankings auf Basis von Regex-Treffern und Dokumentlänge
    • Zur Approximation von TF-IDF wird statt der Wortanzahl eines Dokuments dessen Länge (Anzahl der Zeichen) verwendet

3 Kommentare

 
yangeok 2025-01-06

Es gibt allerdings ein Problem..

 
beenzinozino 2025-01-04

Ich fand es interessant und habe es mir angesehen, aber anscheinend wird es seit drei Jahren nicht mehr gewartet ... Ist die Bibliothek wirklich so perfekt, dass keine Wartung nötig ist ...? Da kommen mir Zweifel.

 
GN⁺ 2024-12-30
Hacker-News-Kommentare
  • 115 Zeilen TypeScript sind zwar leichtgewichtig, aber es könnten wichtige Funktionen fehlen

    • Ein Link wird bereitgestellt, um Größe, Funktionsumfang und Performance verschiedener JavaScript-Alternativen zu vergleichen
    • Jemand teilt die Erfahrung, sich vor einigen Jahren für uFuzzy entschieden zu haben
  • Erkenntnis, dass sich Suchfunktionen leicht implementieren lassen

    • Eine sehr clevere Regex-Engine
    • Unklar ist, wie unscharfe Suche verarbeitet wird (z. B. Califnia statt California), aber es ist interessant, die Implementierung zu verstehen
  • Fuse wird in JavaScript-Apps häufig verwendet

    • Es ist frustrierend, dass viele In-App-Suchen Tippfehler nicht verarbeiten können
  • Mit Tools wie FlexSearch oder lunr lässt sich der Index für Tausende von Einträgen sehr schnell aufbauen

    • Es ist in Ordnung, den Index erst dann zu erstellen, wenn der Nutzer die Suchoberfläche öffnet, und ihn danach wieder zu vergessen
  • Frage nach dem Vorteil eines indexlosen Ansatzes

    • Bevorzugt werden kleine und einfache Programme
    • Wirkt ähnlich wie grep