Cuando se trata de velocidad general , BulkSearch supera a todas las bibliotecas de búsqueda que existen y también proporciona capacidades de búsqueda flexibles como concordancia de varias palabras, transformaciones fonéticas o concordancia parcial. Se basa esencialmente en cómo un disco duro gestiona los archivos en un sistema de archivos. Agregar, actualizar o eliminar elementos es tan rápido como buscarlos, pero también consume algo de memoria adicional. Cuando no es necesario actualizar su índice con frecuencia, FlexSearch puede ser una mejor opción. BulkSearch también le proporciona un modelo de procesamiento asincrónico para realizar consultas en segundo plano.
Punto de referencia:
Plataformas compatibles:
Definiciones de módulos admitidos:
Todas las características:
< html >
< head >
< script src =" js/bulksearch.min.js " > </ script >
</ head >
...
Nota: Utilice Bulksearch.min.js para producción y Bulksearch.js para desarrollo.
Utilice lo último de CDN:
< script src =" https://cdn.rawgit.com/nextapps-de/bulksearch/master/bulksearch.min.js " > </ script >
npm install bulksearch
En su código incluya lo siguiente:
var BulkSearch = require ( "bulksearch" ) ;
O pase opciones cuando lo requiera:
var index = require ( "bulksearch" ) . create ( { /* options */ } ) ;
AMD
var BulkSearch = require ( "./bulksearch.js" ) ;
Descripción | Búsqueda masiva | Búsqueda flexible |
---|---|---|
Acceso | Índice optimizado de lectura y escritura | Índice optimizado para memoria de lectura |
Memoria | Grande (~ 90 bytes por palabra) | Pequeño (~ 2 bytes por palabra) |
Uso |
|
|
Limitar resultados | Sí | Sí |
Paginación | Sí | No |
Métodos globales:
Métodos de índice:
Búsqueda masiva. crear(<opciones>)
var index = new BulkSearch ( ) ;
alternativamente también puedes usar:
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
} ) ;
Leer más: Búsqueda fonética, Comparación fonética, Mejorar el uso de la memoria
Índice. agregar (identificación, cadena)
index . add ( 10025 , "John Doe" ) ;
Índice. buscar(cadena|opciones, <límite|página>, <devolución de llamada>)
index . search ( "John" ) ;
Limitar el resultado:
index . search ( "John" , 10 ) ;
Realizar consultas de forma asincrónica:
index . search ( "John" , function ( result ) {
// array of results
} ) ;
Pasar parámetro como objeto:
index . search ( {
query : "John" ,
page : '1:1234' ,
limit : 10 ,
callback : function ( result ) {
// async
}
} ) ;
Índice. actualizar (id, cadena)
index . update ( 10025 , "Road Runner" ) ;
Índice. eliminar (identificación)
index . remove ( 10025 ) ;
index . reset ( ) ;
index . destroy ( ) ;
Índice. inicio(<opciones>)
Nota: ¡La reinicialización también destruirá el índice anterior!
Inicializar (con las mismas opciones):
index . init ( ) ;
Inicializar con nuevas opciones:
index . init ( {
/* options */
} ) ;
Búsqueda masiva. addMatcher({ REGEX: REEMPLAZAR })
Agregue comparadores globales para todas las instancias:
BulkSearch . addMatcher ( {
'ä' : 'a' , // replaces all 'ä' to 'a'
'ó' : 'o' ,
'[ûúù]' : 'u' // replaces multiple
} ) ;
Agregue comparadores privados para una instancia específica:
index . addMatcher ( {
'ä' : 'a' , // replaces all 'ä' to 'a'
'ó' : 'o' ,
'[ûúù]' : 'u' // replaces multiple
} ) ;
Defina un codificador personalizado privado durante la creación/inicialización:
var index = new BulkSearch ( {
encode : function ( str ) {
// do something with str ...
return str ;
}
} ) ;
Búsqueda masiva. registrar (nombre, codificador)
BulkSearch . register ( 'whitespace' , function ( str ) {
return str . replace ( / / g , '' ) ;
} ) ;
Utilice codificadores globales:
var index = new BulkSearch ( { encode : 'whitespace' } ) ;
Codificador privado:
var encoded = index . encode ( "sample text" ) ;
Codificador 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 ( ) ;
Devuelve información sobre el índice, por ejemplo:
{
"bytes" : 103600 ,
"chunks" : 9 ,
"fragmentation" : 0 ,
"fragments" : 0 ,
"id" : 0 ,
"length" : 7798 ,
"matchers" : 0 ,
"size" : 10000 ,
"status" : false
}
Nota: Cuando el valor de fragmentación es aproximadamente del 50% o más, debería considerar usar cleanup() .
Optimizar un índice liberará toda la memoria fragmentada y también reconstruirá el índice mediante puntuación.
index . optimize ( ) ;
Nota: La paginación puede simplemente reducir el tiempo de consulta en un factor de 100.
Habilite la paginación en la inicialización:
var index = BulkSearch . create ( { paging : true } ) ;
Realizar consulta y pasar un límite (elementos por página):
index . search ( "John" , 10 ) ;
La respuesta incluirá un objeto de paginación como este:
{
"current" : " 0:0 " ,
"prev" : null ,
"next" : " 1:16322 " ,
"results" : []
}
Explicación:
"actual" | Incluye el puntero a la página actual. |
"anterior" | Incluye el puntero a la página anterior. Siempre que este campo tenga el valor nulo no habrá más páginas anteriores disponibles. |
"próximo" | Incluye el puntero a la página siguiente. Siempre que este campo tenga el valor nulo no quedarán más páginas. |
"resultados" | Conjunto de elementos coincidentes. |
Realizar consulta y pasar un puntero a una página específica:
index . search ( "John" , {
page : "1:16322" , // pointer
limit : 10
} ) ;
Opción | Valores | Descripción |
---|---|---|
tipo | "byte" "corto" "entero" "flotar" "cadena" | El tipo de datos de los ID pasados debe especificarse en el momento de la creación. Se recomienda utilizar el rango de datos más bajo posible aquí, por ejemplo, utilizar "corto" cuando los ID no sean superiores a 65.535. |
codificar | FALSO "icase" "simple" "avanzado" "extra" función (cadena): cadena | El tipo de codificación. Elija una de las funciones integradas o pase una función de codificación personalizada. |
booleano | "y" "o" | El modelo booleano aplicado al comparar varias palabras. Nota: Cuando se utiliza "o", la primera palabra también se compara con "y". Ejemplo: una consulta con 3 palabras, los resultados tienen: palabras coincidentes 1 y 2 y palabras coincidentes 1 y 3. |
tamaño | 2500 - 10000 | El tamaño de los trozos. Depende de la longitud del contenido qué valor se ajusta mejor. El contenido corto (por ejemplo, nombres de usuario) es más rápido con un tamaño de fragmento de 2500. El texto más grande se ejecuta más rápido con un tamaño de fragmento de 10.000. Nota: Se recomienda utilizar un tamaño de fragmento mínimo de la longitud máxima del contenido que debe indexarse para evitar la fragmentación. |
multi | verdadero FALSO | Habilite el procesamiento de textos múltiples. |
ordenado | verdadero FALSO | Varias palabras deben estar en el mismo orden que la entrada coincidente. |
estricto | verdadero FALSO | Las coincidencias deben iniciarse exactamente con la consulta. |
cache | verdadero FALSO | Habilite el almacenamiento en caché. |
Codificador | Descripción | Falsos positivos | Nivel de compresión |
---|---|---|---|
FALSO | Desactivar la codificación | No | No |
"icase" | Codificación que no distingue entre mayúsculas y minúsculas | No | No |
"simple" | Normalizaciones fonéticas | No | ~ 3% |
"avanzado" | Normalizaciones fonéticas + Transformaciones literales | No | ~ 25% |
"extra" | Normalizaciones fonéticas + transformaciones Soundex | Sí | ~ 50% |
Cadena de referencia: "Björn-Phillipp Mayer"
Consulta | Búsqueda elástica | Búsqueda masiva (iCase) | Búsqueda masiva (simple) | Búsqueda masiva (avanzado) | Búsqueda masiva (extra) |
---|---|---|---|---|---|
bjorn | Sí | Sí | Sí | Sí | Sí |
bjor | No | Sí | Sí | Sí | Sí |
björn | No | No | Sí | Sí | Sí |
björn | No | No | No | Sí | Sí |
felipe | No | No | No | Sí | Sí |
filipino | No | No | No | Sí | Sí |
björnphillip | No | No | Sí | Sí | Sí |
meier | No | No | No | Sí | Sí |
björn meier | No | No | No | Sí | Sí |
Felipe Meier | No | No | No | Sí | Sí |
byorn mayor | No | No | No | No | Sí |
(falsos positivos) | Sí | No | No | No | Sí |
Nota: El tipo de datos de los ID pasados debe especificarse en el momento de la creación. Se recomienda utilizar el rango de datos más bajo posible aquí, por ejemplo, utilizar "corto" cuando los ID no sean superiores a 65.535.
Tipo de identificación | Rango de valores | Uso de memoria cada ~ 100.000 palabras indexadas |
---|---|---|
Byte | 0 - 255 | 4,5 MB |
Corto | 0 - 65.535 | 5,3 MB |
Entero | 0 - 4.294.967.295 | 6,8 MB |
Flotar | 0 - * (16 dígitos) | 10 MB |
Cadena | * (ilimitado) | 28,2 MB |
Autor BulkSearch: Thomas Wilkerling
Licencia: Licencia Apache 2.0