Clientseitige Volltextsuche basierend auf js-search, aber mit zusätzlicher Web-Worker-Unterstützung für bessere Leistung.
Schauen Sie sich die Redux-Suche für eine Beispielintegration an.
Oder installieren Sie es selbst mit NPM:
npm install --save js-worker-search
Dieses von der JS-Suche abgeleitete Dienstprogramm erstellt einen Suchindex und führt tatsächliche Suchvorgänge aus. Es erkennt automatisch die Fähigkeiten der aktuellen Umgebung (Browser oder Knoten) und verwendet, wenn möglich, eine Web-Worker-basierte Implementierung. Wenn keine Web-Worker-Unterstützung verfügbar ist, erfolgt die Suche im Hauptthread (UI-Thread).
SearchApi definiert die folgenden öffentlichen Methoden:
constructor ({ caseSensitive, indexMode, tokenizePattern })
Standardmäßig erstellt SearchApi
einen Index, der allen Teilzeichenfolgen entspricht. Sie können dieses Verhalten überschreiben, indem Sie einen benannten indexMode
Parameter übergeben. Gültige Werte sind INDEX_MODES.ALL_SUBSTRINGS
, INDEX_MODES.EXACT_WORDS
und INDEX_MODES.PREFIXES
.
Bei Suchanfragen wird standardmäßig die Groß-/Kleinschreibung nicht beachtet und alle Leerzeichen werden aufgeteilt. Weitere Informationen zum Anpassen der Standardoptionen finden Sie weiter unten.
indexDocument (uid, text)
Fügt eine UID im Suchindex hinzu oder aktualisiert sie und ordnet sie dem angegebenen Text zu. Beachten Sie, dass UIDs derzeit nur im Index hinzugefügt oder aktualisiert und nicht entfernt werden können.
Parameter:
search(query)
Durchsucht den aktuellen Index nach dem angegebenen Abfragetext. Es werden nur UIDs akzeptiert, die mit allen Wörtern im Text übereinstimmen. Wenn eine leere Abfragezeichenfolge angegeben wird, werden alle indizierten UIDs zurückgegeben.
Bei der Dokumentsuche wird die Groß-/Kleinschreibung nicht beachtet (z. B. „Suche“ entspricht „Suche“). Bei der Suche nach Dokumenten wird der Teilstring-Abgleich verwendet (z. B. „na“ und „me“ stimmen beide mit „name“ überein).
Parameter:
Diese Methode gibt ein Array von UIDs zurück.
terminate()
Wenn die Suche in einem Web-Worker ausgeführt wird, wird der Worker dadurch beendet, um die Garbage Collection zu ermöglichen.
Verwenden Sie die API folgendermaßen:
import SearchApi from 'js-worker-search'
const searchApi = new SearchApi ( )
// Index as many objects as you want.
// Objects are identified by an id (the first parameter).
// Each Object can be indexed multiple times (once per string of related text).
searchApi . indexDocument ( 'foo' , 'Text describing an Object identified as "foo"' )
searchApi . indexDocument ( 'bar' , 'Text describing an Object identified as "bar"' )
// Search for matching documents using the `search` method.
// In this case the promise will be resolved with the Array ['foo', 'bar'].
// This is because the word "describing" appears in both indices.
const promise = searchApi . search ( 'describing' )
Standardmäßig erstellt SearchApi
einen Index, der allen Teilzeichenfolgen entspricht. Sie können dieses Verhalten überschreiben, indem Sie einen indexMode
Parameter wie folgt an den Konstruktor übergeben:
import SearchApi , { INDEX_MODES } from 'js-worker-search'
// all-substrings match by default; same as current
// eg "c", "ca", "a", "at", "cat" match "cat"
const searchApi = new SearchApi ( )
// prefix matching (eg "c", "ca", "cat" match "cat")
const searchApi = new SearchApi ( {
indexMode : INDEX_MODES . PREFIXES
} )
// exact words matching (eg only "cat" matches "cat")
const searchApi = new SearchApi ( {
indexMode : INDEX_MODES . EXACT_WORDS
} )
Standardmäßig zerlegt SearchApi
Text in Wörter (Tokenisierung), wobei Leerzeichen und Zeilenumbrüche als Trennzeichen verwendet werden. Wenn Sie Ihre eigene Aufteilungsregel bereitstellen möchten, übergeben Sie einen RegExp an den Konstruktor, der das Muster definiert, etwa so:
// Custom tokenizer pattern to include all non alphanumerics as delimeters
// ex: searching "Swift" matches "Thomas Swift" and "Thomas (Swift)" but not "swiftly tilting"
const searchApi = new SearchApi ( {
indexMode : INDEX_MODES . EXACT_WORDS ,
tokenizePattern : / [^a-z0-9]+ / ,
} )
Der Standard-Sanitizer führt eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung durch. Wenn Sie dieses Verhalten außer Kraft setzen und eine Suche unter Berücksichtigung der Groß-/Kleinschreibung durchführen möchten, setzen Sie das caseSensitive-Bit auf „true“, etwa so:
// custom sanitizer for case-sensitive searches
const searchApi = new SearchApi ( {
caseSensitive : true
} )
Standardmäßig gibt das Suchdienstprogramm nur Dokumente zurück, die jedes Suchtoken enthalten. Es kann so konfiguriert werden, dass Dokumente zurückgegeben werden, die ein beliebiges Suchtoken enthalten.
// Change search behavior from AND to OR
const searchApi = new SearchApi ( {
matchAnyToken : true
} )
Änderungen werden im Changelog nachverfolgt.
js-worker-search ist unter der MIT-Lizenz verfügbar.