En ce qui concerne la vitesse globale , BulkSearch surpasse toutes les bibliothèques de recherche et offre également des capacités de recherche flexibles telles que la correspondance de plusieurs mots, les transformations phonétiques ou la correspondance partielle. Cela dépend essentiellement de la façon dont un disque dur gère les fichiers dans un système de fichiers. L'ajout, la mise à jour ou la suppression d'éléments sont aussi rapides que leur recherche, mais consomment également de la mémoire supplémentaire. Lorsque votre index n'a pas besoin d'être mis à jour fréquemment, FlexSearch peut être un meilleur choix. BulkSearch vous fournit également un modèle de traitement asynchrone pour effectuer des requêtes en arrière-plan.
Référence :
Plateformes prises en charge :
Définitions de modules pris en charge :
Toutes les fonctionnalités :
< html >
< head >
< script src =" js/bulksearch.min.js " > </ script >
</ head >
...
Remarque : utilisez Bulksearch.min.js pour la production et Bulksearch.js pour le développement.
Utiliser la dernière version du CDN :
< script src =" https://cdn.rawgit.com/nextapps-de/bulksearch/master/bulksearch.min.js " > </ script >
npm install bulksearch
Dans votre code, incluez ce qui suit :
var BulkSearch = require ( "bulksearch" ) ;
Ou transmettez les options lorsque vous avez besoin :
var index = require ( "bulksearch" ) . create ( { /* options */ } ) ;
DMLA
var BulkSearch = require ( "./bulksearch.js" ) ;
Description | Recherche groupée | FlexRecherche |
---|---|---|
Accéder | Index optimisé en lecture-écriture | Index optimisé en lecture-mémoire |
Mémoire | Grand (~ 90 octets par mot) | Minuscule (~ 2 octets par mot) |
Usage |
|
|
Limiter les résultats | Oui | Oui |
Pagination | Oui | Non |
Méthodes globales :
Méthodes d'indexation :
Recherche en masse. créer(<options>)
var index = new BulkSearch ( ) ;
alternativement, vous pouvez également utiliser :
var index = BulkSearch . create ( ) ;
var index = new BulkSearch ( {
// default values:
type : "integer" ,
encode : "icase" ,
boolean : "and" ,
size : 4000 ,
multi : false ,
strict : false ,
ordered : false ,
paging : false ,
async : false ,
cache : false
} ) ;
Lire la suite : Recherche phonétique, comparaison phonétique, amélioration de l'utilisation de la mémoire
Indice. ajouter (identifiant, chaîne)
index . add ( 10025 , "John Doe" ) ;
Indice. recherche(chaîne|options, <limite|page>, <rappel>)
index . search ( "John" ) ;
Limitez le résultat :
index . search ( "John" , 10 ) ;
Effectuez des requêtes de manière asynchrone :
index . search ( "John" , function ( result ) {
// array of results
} ) ;
Passer le paramètre en tant qu'objet :
index . search ( {
query : "John" ,
page : '1:1234' ,
limit : 10 ,
callback : function ( result ) {
// async
}
} ) ;
Indice. mise à jour (identifiant, chaîne)
index . update ( 10025 , "Road Runner" ) ;
Indice. supprimer (identifiant)
index . remove ( 10025 ) ;
index . reset ( ) ;
index . destroy ( ) ;
Indice. init(<options>)
Remarque : La réinitialisation détruira également l'ancien index !
Initialiser (avec les mêmes options) :
index . init ( ) ;
Initialisez avec de nouvelles options :
index . init ( {
/* options */
} ) ;
Recherche en masse. addMatcher({ REGEX : REPLACE })
Ajoutez des correspondants globaux pour toutes les instances :
BulkSearch . addMatcher ( {
'ä' : 'a' , // replaces all 'ä' to 'a'
'ó' : 'o' ,
'[ûúù]' : 'u' // replaces multiple
} ) ;
Ajoutez des correspondants privés pour une instance spécifique :
index . addMatcher ( {
'ä' : 'a' , // replaces all 'ä' to 'a'
'ó' : 'o' ,
'[ûúù]' : 'u' // replaces multiple
} ) ;
Définissez un encodeur personnalisé privé lors de la création/initialisation :
var index = new BulkSearch ( {
encode : function ( str ) {
// do something with str ...
return str ;
}
} ) ;
Recherche en masse. registre(nom, encodeur)
BulkSearch . register ( 'whitespace' , function ( str ) {
return str . replace ( / / g , '' ) ;
} ) ;
Utilisez des encodeurs globaux :
var index = new BulkSearch ( { encode : 'whitespace' } ) ;
Encodeur privé :
var encoded = index . encode ( "sample text" ) ;
Encodeur global :
var encoded = BulkSearch . encode ( "whitespace" , "sample text" ) ;
BulkSearch . register ( 'mixed' , function ( str ) {
str = this . encode ( "icase" , str ) ; // built-in
str = this . encode ( "whitespace" , str ) ; // custom
return str ;
} ) ;
BulkSearch . register ( 'extended' , function ( str ) {
str = this . encode ( "custom" , str ) ;
// do something additional with str ...
return str ;
} ) ;
index . info ( ) ;
Renvoie des informations sur l'index, par exemple :
{
"bytes" : 103600 ,
"chunks" : 9 ,
"fragmentation" : 0 ,
"fragments" : 0 ,
"id" : 0 ,
"length" : 7798 ,
"matchers" : 0 ,
"size" : 10000 ,
"status" : false
}
Remarque : lorsque la valeur de fragmentation est d'environ 50 % ou plus, vous devriez envisager d'utiliser cleanup() .
Optimiser un index libérera toute la mémoire fragmentée et reconstruira également l'index par notation.
index . optimize ( ) ;
Remarque : La pagination peut simplement réduire le temps de requête d'un facteur 100.
Activer la pagination à l'initialisation :
var index = BulkSearch . create ( { paging : true } ) ;
Effectuer une requête et dépasser une limite (éléments par page) :
index . search ( "John" , 10 ) ;
La réponse inclura un objet de pagination comme celui-ci :
{
"current" : " 0:0 " ,
"prev" : null ,
"next" : " 1:16322 " ,
"results" : []
}
Explication:
"actuel" | Inclut le pointeur vers la page actuelle. |
"précédent" | Inclut le pointeur vers la page précédente. Chaque fois que ce champ a la valeur null, aucune page précédente n'est disponible. |
"suivant" | Inclut le pointeur vers la page suivante. Chaque fois que ce champ a la valeur null, il ne reste plus de pages. |
"résultats" | Tableau d’éléments correspondants. |
Effectuez une requête et transmettez un pointeur vers une page spécifique :
index . search ( "John" , {
page : "1:16322" , // pointer
limit : 10
} ) ;
Option | Valeurs | Description |
---|---|---|
taper | "octet" "court" "entier" "flotter" "chaîne" | Le type de données des identifiants transmis doit être spécifié lors de la création. Il est recommandé d'utiliser ici la plage de données la plus basse possible, par exemple en utilisant "short" lorsque les ID ne sont pas supérieurs à 65 535. |
encoder | FAUX "icase" "simple" "avancé" "supplémentaire" fonction (chaîne):chaîne | Le type d'encodage. Choisissez l’un des éléments intégrés ou transmettez une fonction d’encodage personnalisée. |
booléen | "et" "ou" | Le modèle booléen appliqué lors de la comparaison de plusieurs mots. Remarque : lorsque vous utilisez « ou », le premier mot est également comparé à « et ». Exemple : une requête avec 3 mots, les résultats ont soit : les mots correspondants 1 et 2 et les mots correspondants 1 et 3. |
taille | 2500 - 10000 | La taille des morceaux. La valeur qui convient le mieux dépend de la longueur du contenu. Les contenus courts (par exemple les noms d'utilisateurs) sont plus rapides avec une taille de fragment de 2 500. Un texte plus gros s'exécute plus rapidement avec une taille de bloc de 10 000. Remarque : Il est recommandé d'utiliser une taille de bloc minimale correspondant à la longueur maximale du contenu qui doit être indexé pour éviter la fragmentation. |
multi | vrai FAUX | Activer le traitement de plusieurs mots. |
ordonné | vrai FAUX | Plusieurs mots doivent être dans le même ordre que l’entrée correspondante. |
strict | vrai FAUX | Les correspondances doivent exactement être démarrées avec la requête. |
cache | vrai FAUX | Activez la mise en cache. |
Encodeur | Description | Faux positifs | Niveau de compression |
---|---|---|---|
FAUX | Désactiver l'encodage | Non | Non |
"icase" | Encodage insensible à la casse | Non | Non |
"simple" | Normalisations phonétiques | Non | ~ 3% |
"avancé" | Normalisations phonétiques + Transformations littérales | Non | ~ 25% |
"supplémentaire" | Normalisations phonétiques + transformations Soundex | Oui | ~ 50% |
Chaîne de référence : "Björn-Phillipp Mayer"
Requête | Recherche élastique | Recherche groupée (iCase) | Recherche groupée (simple) | Recherche groupée (Adv.) | Recherche groupée (extra) |
---|---|---|---|---|---|
björn | Oui | Oui | Oui | Oui | Oui |
björ | Non | Oui | Oui | Oui | Oui |
björn | Non | Non | Oui | Oui | Oui |
Björn | Non | Non | Non | Oui | Oui |
philipp | Non | Non | Non | Oui | Oui |
Philippe | Non | Non | Non | Oui | Oui |
björnphilip | Non | Non | Oui | Oui | Oui |
meier | Non | Non | Non | Oui | Oui |
Björn Meier | Non | Non | Non | Oui | Oui |
Philippe Meier | Non | Non | Non | Oui | Oui |
Maire Byorn | Non | Non | Non | Non | Oui |
(faux positifs) | Oui | Non | Non | Non | Oui |
Remarque : Le type de données des identifiants transmis doit être spécifié lors de la création. Il est recommandé d'utiliser ici la plage de données la plus basse possible, par exemple en utilisant "short" lorsque les ID ne sont pas supérieurs à 65 535.
Type d'identification | Plage de valeurs | Utilisation de la mémoire pour environ 100 000 mots indexés |
---|---|---|
Octet | 0 - 255 | 4,5 Mo |
Court | 0 - 65 535 | 5,3 Mo |
Entier | 0 - 4 294 967 295 | 6,8 Mo |
Flotter | 0 - * (16 chiffres) | 10 Mo |
Chaîne | * (illimité) | 28,2 Mo |
Auteur BulkSearch: Thomas Wilkerling
Licence : Licence Apache 2.0