Recherche en texte intégral côté client basée sur js-search mais avec prise en charge supplémentaire des travailleurs Web pour de meilleures performances.
Consultez la recherche redux pour un exemple d'intégration.
Ou installez-le vous-même avec NPM :
npm install --save js-worker-search
Issu de la recherche JS, cet utilitaire crée un index de recherche et exécute des recherches réelles. Il détecte automatiquement les capacités de l'environnement actuel (navigateur ou nœud) et utilise une implémentation basée sur un Web Worker lorsque cela est possible. Lorsqu'aucune prise en charge Web-Worker n'est disponible, la recherche est effectuée sur le thread principal (UI).
SearchApi définit les méthodes publiques suivantes :
constructor ({ caseSensitive, indexMode, tokenizePattern })
Par défaut, SearchApi
crée un index pour correspondre à toutes les sous-chaînes. Vous pouvez remplacer ce comportement en passant un paramètre indexMode
nommé. Les valeurs valides sont INDEX_MODES.ALL_SUBSTRINGS
, INDEX_MODES.EXACT_WORDS
et INDEX_MODES.PREFIXES
.
Les recherches ne sont pas sensibles à la casse par défaut et sont réparties sur tous les caractères d'espacement. Lisez ci-dessous pour plus d’informations sur la personnalisation des options par défaut.
indexDocument (uid, text)
Ajoute ou met à jour un uid dans l'index de recherche et l'associe au texte spécifié. Notez qu'à l'heure actuelle, les uid ne peuvent être ajoutés ou mis à jour dans l'index, pas supprimés.
Paramètres :
search(query)
Recherche dans l'index actuel le texte de requête spécifié. Seuls les uids correspondant à tous les mots du texte seront acceptés. Si une chaîne de requête vide est fournie, tous les UID indexés seront renvoyés.
Les recherches de documents ne sont pas sensibles à la casse (par exemple, « recherche » correspondra à « Recherche »). Les recherches de documents utilisent la correspondance de sous-chaînes (par exemple, « na » et « moi » correspondront tous deux à « nom »).
Paramètres :
Cette méthode renverra un tableau d'uids.
terminate()
Si la recherche est en cours d'exécution dans un Web Worker, cela mettra fin au Worker pour permettre le garbage collection.
Utilisez l'API comme ceci :
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' )
Par défaut, SearchApi
crée un index pour correspondre à toutes les sous-chaînes. Vous pouvez remplacer ce comportement en passant un paramètre indexMode
au constructeur comme suit :
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
} )
Par défaut, SearchApi
divise le texte en mots (tokenizes) en utilisant des espaces et des nouvelles lignes comme caractère de délimitation. Si vous souhaitez fournir votre propre règle de fractionnement, transmettez une RegExp au constructeur qui définit le pattern , comme ceci :
// 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]+ / ,
} )
Le désinfectant par défaut effectue une recherche insensible à la casse. Si vous souhaitez remplacer ce comportement et effectuer une recherche sensible à la casse, définissez le bit caseSensitive sur true, comme ceci :
// custom sanitizer for case-sensitive searches
const searchApi = new SearchApi ( {
caseSensitive : true
} )
Par défaut, l'utilitaire de recherche renvoie uniquement les documents contenant chaque jeton de recherche. Il peut être configuré pour renvoyer des documents contenant n'importe quel jeton de recherche.
// Change search behavior from AND to OR
const searchApi = new SearchApi ( {
matchAnyToken : true
} )
Les modifications sont suivies dans le journal des modifications.
js-worker-search est disponible sous la licence MIT.