Wenn es um die Gesamtgeschwindigkeit geht, übertrifft BulkSearch jede verfügbare Suchbibliothek und bietet außerdem flexible Suchfunktionen wie den Abgleich mehrerer Wörter, phonetische Transformationen oder teilweisen Abgleich. Es basiert im Wesentlichen darauf, wie eine Festplatte Dateien in einem Dateisystem verwaltet. Das Hinzufügen, Aktualisieren oder Entfernen von Elementen geht genauso schnell wie das Suchen danach, verbraucht aber auch etwas zusätzlichen Speicher. Wenn Ihr Index nicht häufig aktualisiert werden muss, ist FlexSearch möglicherweise die bessere Wahl. BulkSearch bietet Ihnen außerdem ein asynchrones Verarbeitungsmodell zur Durchführung von Abfragen im Hintergrund.
Benchmark:
Unterstützte Plattformen:
Unterstützte Moduldefinitionen:
Alle Funktionen:
< html >
< head >
< script src =" js/bulksearch.min.js " > </ script >
</ head >
...
Hinweis: Verwenden Sie bulksearch.min.js für die Produktion und bulksearch.js für die Entwicklung.
Neueste CDN-Version verwenden:
< script src =" https://cdn.rawgit.com/nextapps-de/bulksearch/master/bulksearch.min.js " > </ script >
npm install bulksearch
Fügen Sie in Ihren Code Folgendes ein:
var BulkSearch = require ( "bulksearch" ) ;
Oder übergeben Sie Optionen, wenn Folgendes erforderlich ist:
var index = require ( "bulksearch" ) . create ( { /* options */ } ) ;
AMD
var BulkSearch = require ( "./bulksearch.js" ) ;
Beschreibung | Massensuche | FlexSearch |
---|---|---|
Zugang | Lese-/Schreiboptimierter Index | Lesespeicheroptimierter Index |
Erinnerung | Groß (~ 90 Bytes pro Wort) | Winzig (~ 2 Bytes pro Wort) |
Verwendung |
|
|
Ergebnisse begrenzen | Ja | Ja |
Pagination | Ja | NEIN |
Globale Methoden:
Indexmethoden:
Massensuche. create(<Optionen>)
var index = new BulkSearch ( ) ;
Alternativ können Sie auch Folgendes verwenden:
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
} ) ;
Lesen Sie mehr: Phonetische Suche, phonetischer Vergleich, Verbesserung der Speichernutzung
Index. add(id, string)
index . add ( 10025 , "John Doe" ) ;
Index. search(string|options, <limit|page>, <callback>)
index . search ( "John" ) ;
Begrenzen Sie das Ergebnis:
index . search ( "John" , 10 ) ;
Führen Sie Abfragen asynchron durch:
index . search ( "John" , function ( result ) {
// array of results
} ) ;
Parameter als Objekt übergeben:
index . search ( {
query : "John" ,
page : '1:1234' ,
limit : 10 ,
callback : function ( result ) {
// async
}
} ) ;
Index. update(id, string)
index . update ( 10025 , "Road Runner" ) ;
Index. entfernen(id)
index . remove ( 10025 ) ;
index . reset ( ) ;
index . destroy ( ) ;
Index. init(<Optionen>)
Hinweis: Bei einer Neuinitialisierung wird auch der alte Index zerstört!
Initialisieren (mit denselben Optionen):
index . init ( ) ;
Mit neuen Optionen initialisieren:
index . init ( {
/* options */
} ) ;
Massensuche. addMatcher({ REGEX: REPLACE })
Fügen Sie globale Matcher für alle Instanzen hinzu:
BulkSearch . addMatcher ( {
'ä' : 'a' , // replaces all 'ä' to 'a'
'ó' : 'o' ,
'[ûúù]' : 'u' // replaces multiple
} ) ;
Fügen Sie private Matcher für eine bestimmte Instanz hinzu:
index . addMatcher ( {
'ä' : 'a' , // replaces all 'ä' to 'a'
'ó' : 'o' ,
'[ûúù]' : 'u' // replaces multiple
} ) ;
Definieren Sie während der Erstellung/Initialisierung einen privaten benutzerdefinierten Encoder:
var index = new BulkSearch ( {
encode : function ( str ) {
// do something with str ...
return str ;
}
} ) ;
Massensuche. registrieren(Name, Encoder)
BulkSearch . register ( 'whitespace' , function ( str ) {
return str . replace ( / / g , '' ) ;
} ) ;
Globale Encoder verwenden:
var index = new BulkSearch ( { encode : 'whitespace' } ) ;
Privater Encoder:
var encoded = index . encode ( "sample text" ) ;
Globaler Encoder:
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 ( ) ;
Gibt Informationen über den Index zurück, z. B.:
{
"bytes" : 103600 ,
"chunks" : 9 ,
"fragmentation" : 0 ,
"fragments" : 0 ,
"id" : 0 ,
"length" : 7798 ,
"matchers" : 0 ,
"size" : 10000 ,
"status" : false
}
Hinweis: Wenn der Fragmentierungswert etwa 50 % oder mehr beträgt, sollten Sie die Verwendung von cleanup() in Betracht ziehen.
Durch die Optimierung eines Index wird der gesamte fragmentierte Speicher freigegeben und der Index durch Scoring neu erstellt.
index . optimize ( ) ;
Hinweis: Durch die Paginierung kann die Abfragezeit lediglich um den Faktor 100 verkürzt werden.
Paginierung bei Initialisierung aktivieren:
var index = BulkSearch . create ( { paging : true } ) ;
Führen Sie eine Abfrage durch und übergeben Sie ein Limit (Elemente pro Seite):
index . search ( "John" , 10 ) ;
Die Antwort enthält ein Paginierungsobjekt wie dieses:
{
"current" : " 0:0 " ,
"prev" : null ,
"next" : " 1:16322 " ,
"results" : []
}
Erläuterung:
"aktuell" | Enthält den Zeiger auf die aktuelle Seite. |
„vorher“ | Enthält den Zeiger auf die vorherige Seite. Immer wenn dieses Feld den Wert Null hat, sind keine vorherigen Seiten mehr verfügbar. |
"nächste" | Enthält den Zeiger auf die nächste Seite. Immer wenn dieses Feld den Wert Null hat, sind keine Seiten mehr übrig. |
„Ergebnisse“ | Array übereinstimmender Elemente. |
Führen Sie eine Abfrage durch und übergeben Sie einen Zeiger auf eine bestimmte Seite:
index . search ( "John" , {
page : "1:16322" , // pointer
limit : 10
} ) ;
Option | Werte | Beschreibung |
---|---|---|
Typ | "Byte" "kurz" "ganze Zahl" "schweben" „Zeichenfolge“ | Der Datentyp der übergebenen IDs muss bei der Erstellung angegeben werden. Es wird empfohlen, hier einen möglichst geringen Datenbereich zu verwenden, z. B. „kurz“, wenn die IDs nicht höher als 65.535 sind. |
kodieren | FALSCH „icase“ "einfach" "fortschrittlich" "Extra" Funktion(Zeichenfolge):Zeichenfolge | Der Codierungstyp. Wählen Sie eine der integrierten Funktionen oder übergeben Sie eine benutzerdefinierte Kodierungsfunktion. |
Boolescher Wert | "Und" "oder" | Das angewendete boolesche Modell beim Vergleich mehrerer Wörter. Hinweis: Bei der Verwendung von „oder“ wird das erste Wort auch mit „und“ verglichen. Beispiel: Eine Abfrage mit 3 Wörtern hat entweder folgende Ergebnisse: übereinstimmendes Wort 1 und 2 und übereinstimmendes Wort 1 und 3. |
Größe | 2500 - 10000 | Die Größe der Brocken. Es hängt von der Länge des Inhalts ab, welcher Wert am besten passt. Kurze Inhalte (z. B. Benutzernamen) sind mit einer Blockgröße von 2.500 schneller. Größere Texte werden mit einer Blockgröße von 10.000 schneller ausgeführt. Hinweis: Es wird empfohlen, eine minimale Blockgröße der maximalen Inhaltslänge zu verwenden, die indiziert werden muss, um eine Fragmentierung zu verhindern. |
multi | WAHR FALSCH | Aktivieren Sie die Verarbeitung mehrerer Wörter. |
bestellt | WAHR FALSCH | Mehrere Wörter müssen dieselbe Reihenfolge haben wie der übereinstimmende Eintrag. |
strikt | WAHR FALSCH | Übereinstimmungen müssen genau mit der Abfrage gestartet werden. |
Cache | WAHR FALSCH | Caching aktivieren. |
Encoder | Beschreibung | Falsch Positive | Komprimierungsstufe |
---|---|---|---|
FALSCH | Deaktivieren Sie die Codierung | NEIN | NEIN |
„icase“ | Bei der Codierung wird die Groß-/Kleinschreibung nicht beachtet | NEIN | NEIN |
"einfach" | Phonetische Normalisierungen | NEIN | ~ 3% |
"fortschrittlich" | Phonetische Normalisierungen + wörtliche Transformationen | NEIN | ~ 25 % |
"Extra" | Phonetische Normalisierungen + Soundex-Transformationen | Ja | ~ 50 % |
Referenzzeichenfolge: „Björn-Phillipp Mayer“
Abfrage | ElasticSearch | Massensuche (iCase) | BulkSearch (einfach) | BulkSearch (Adv.) | BulkSearch (Extra) |
---|---|---|---|---|---|
björn | Ja | Ja | Ja | Ja | Ja |
björ | NEIN | Ja | Ja | Ja | Ja |
Björn | NEIN | NEIN | Ja | Ja | Ja |
björn | NEIN | NEIN | NEIN | Ja | Ja |
Philipp | NEIN | NEIN | NEIN | Ja | Ja |
Filip | NEIN | NEIN | NEIN | Ja | Ja |
björnphillip | NEIN | NEIN | Ja | Ja | Ja |
meier | NEIN | NEIN | NEIN | Ja | Ja |
Björn Meier | NEIN | NEIN | NEIN | Ja | Ja |
Meier Philip | NEIN | NEIN | NEIN | Ja | Ja |
Byorn Mair | NEIN | NEIN | NEIN | NEIN | Ja |
(falsch positive Ergebnisse) | Ja | NEIN | NEIN | NEIN | Ja |
Hinweis: Der Datentyp der übergebenen IDs muss bei der Erstellung angegeben werden. Es wird empfohlen, hier einen möglichst geringen Datenbereich zu verwenden, z. B. „kurz“, wenn die IDs nicht höher als 65.535 sind.
ID-Typ | Wertebereich | Speichernutzung von jeweils ca. 100.000 indizierten Wörtern |
---|---|---|
Byte | 0 - 255 | 4,5 MB |
Kurz | 0 - 65.535 | 5,3 MB |
Ganze Zahl | 0 - 4.294.967.295 | 6,8 MB |
Schweben | 0 - * (16 Ziffern) | 10 MB |
Zeichenfolge | * (unbegrenzt) | 28,2 MB |
Autor BulkSearch: Thomas Wilkerling
Lizenz: Apache 2.0-Lizenz