Quando se trata de velocidade geral , o BulkSearch supera todas as bibliotecas de pesquisa existentes e também oferece recursos de pesquisa flexíveis, como correspondência de várias palavras, transformações fonéticas ou correspondência parcial. É essencialmente baseado em como um HDD gerencia arquivos em um sistema de arquivos. Adicionar, atualizar ou remover itens é tão rápido quanto procurá-los, mas também consome memória adicional. Quando o seu índice não precisa ser atualizado com frequência, o FlexSearch pode ser uma escolha melhor. BulkSearch também fornece um modelo de processamento assíncrono para realizar consultas em segundo plano.
Referência:
Plataformas suportadas:
Definições de módulos suportados:
Todos os recursos:
< html >
< head >
< script src =" js/bulksearch.min.js " > </ script >
</ head >
...
Observação: use bulksearch.min.js para produção e bulksearch.js para desenvolvimento.
Use o mais recente do CDN:
< script src =" https://cdn.rawgit.com/nextapps-de/bulksearch/master/bulksearch.min.js " > </ script >
npm install bulksearch
No seu código inclua o seguinte:
var BulkSearch = require ( "bulksearch" ) ;
Ou passe opções quando exigir:
var index = require ( "bulksearch" ) . create ( { /* options */ } ) ;
AMD
var BulkSearch = require ( "./bulksearch.js" ) ;
Descrição | Pesquisa em massa | FlexSearch |
---|---|---|
Acesso | Índice otimizado de leitura e gravação | Índice otimizado de memória de leitura |
Memória | Grande (~ 90 bytes por palavra) | Minúsculo (~ 2 bytes por palavra) |
Uso |
|
|
Limitar resultados | Sim | Sim |
Paginação | Sim | Não |
Métodos globais:
Métodos de índice:
Pesquisa em massa. criar(<opções>)
var index = new BulkSearch ( ) ;
alternativamente você também pode 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
} ) ;
Leia mais: Pesquisa Fonética, Comparação Fonética, Melhorar o Uso da Memória
Índice. adicionar(id, string)
index . add ( 10025 , "John Doe" ) ;
Índice. pesquisar(string|opções, <limite|página>, <retorno de chamada>)
index . search ( "John" ) ;
Limite o resultado:
index . search ( "John" , 10 ) ;
Execute consultas de forma assíncrona:
index . search ( "John" , function ( result ) {
// array of results
} ) ;
Passe o parâmetro como um objeto:
index . search ( {
query : "John" ,
page : '1:1234' ,
limit : 10 ,
callback : function ( result ) {
// async
}
} ) ;
Índice. atualizar(id, string)
index . update ( 10025 , "Road Runner" ) ;
Índice. remover (id)
index . remove ( 10025 ) ;
index . reset ( ) ;
index . destroy ( ) ;
Índice. init(<opções>)
Nota: A reinicialização também destruirá o índice antigo!
Inicializar (com as mesmas opções):
index . init ( ) ;
Inicialize com novas opções:
index . init ( {
/* options */
} ) ;
Pesquisa em massa. addMatcher({ REGEX: SUBSTITUIR })
Adicione correspondentes globais para todas as instâncias:
BulkSearch . addMatcher ( {
'ä' : 'a' , // replaces all 'ä' to 'a'
'ó' : 'o' ,
'[ûúù]' : 'u' // replaces multiple
} ) ;
Adicione matchers privados para uma instância específica:
index . addMatcher ( {
'ä' : 'a' , // replaces all 'ä' to 'a'
'ó' : 'o' ,
'[ûúù]' : 'u' // replaces multiple
} ) ;
Defina um codificador personalizado privado durante a criação/inicialização:
var index = new BulkSearch ( {
encode : function ( str ) {
// do something with str ...
return str ;
}
} ) ;
Pesquisa em massa. registrar(nome, codificador)
BulkSearch . register ( 'whitespace' , function ( str ) {
return str . replace ( / / g , '' ) ;
} ) ;
Use codificadores globais:
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 ( ) ;
Retorna informações sobre o índice, por exemplo:
{
"bytes" : 103600 ,
"chunks" : 9 ,
"fragmentation" : 0 ,
"fragments" : 0 ,
"id" : 0 ,
"length" : 7798 ,
"matchers" : 0 ,
"size" : 10000 ,
"status" : false
}
Nota: Quando o valor de fragmentação for cerca de 50% ou superior, você deve considerar o uso de cleanup() .
Otimizar um índice liberará toda a memória fragmentada e também reconstruirá o índice por meio de pontuação.
index . optimize ( ) ;
Nota: A paginação pode simplesmente reduzir o tempo de consulta por um fator de 100.
Habilite a paginação na inicialização:
var index = BulkSearch . create ( { paging : true } ) ;
Realize a consulta e passe um limite (itens por página):
index . search ( "John" , 10 ) ;
A resposta incluirá um objeto de paginação como este:
{
"current" : " 0:0 " ,
"prev" : null ,
"next" : " 1:16322 " ,
"results" : []
}
Explicação:
"atual" | Inclui o ponteiro para a página atual. |
"anterior" | Inclui o ponteiro para a página anterior. Sempre que este campo tiver o valor nulo não existem mais páginas anteriores disponíveis. |
"próximo" | Inclui o ponteiro para a próxima página. Sempre que este campo tiver o valor nulo não restam mais páginas. |
"resultados" | Matriz de itens correspondentes. |
Execute a consulta e passe um ponteiro para uma página específica:
index . search ( "John" , {
page : "1:16322" , // pointer
limit : 10
} ) ;
Opção | Valores | Descrição |
---|---|---|
tipo | "byte" "curto" "inteiro" "flutuador" "corda" | O tipo de dados dos IDs passados deve ser especificado na criação. É recomendado usar o intervalo de dados mais baixo possível aqui, por exemplo, usar "curto" quando os IDs não forem superiores a 65.535. |
codificar | falso "caso" "simples" "avançado" "extra" função(string):string | O tipo de codificação. Escolha um dos integrados ou passe uma função de codificação personalizada. |
booleano | "e" "ou" | O modelo booleano aplicado ao comparar várias palavras. Nota: Ao usar “ou” a primeira palavra também é comparada com “e”. Exemplo: uma consulta com 3 palavras, os resultados têm: palavras correspondentes 1 e 2 e palavras correspondentes 1 e 3. |
tamanho | 2.500 - 10.000 | O tamanho dos pedaços. Depende do comprimento do conteúdo qual valor se ajusta melhor. Conteúdo curto (por exemplo, nomes de usuário) é mais rápido com um tamanho de bloco de 2.500. Texto maior é executado mais rápido com um tamanho de bloco de 10.000. Nota: Recomenda-se usar um tamanho mínimo de bloco igual ao comprimento máximo do conteúdo que deve ser indexado para evitar fragmentação. |
multi | verdadeiro falso | Ative o processamento de várias palavras. |
encomendado | verdadeiro falso | Várias palavras devem estar na mesma ordem da entrada correspondente. |
estrito | verdadeiro falso | As correspondências precisam ser iniciadas exatamente com a consulta. |
esconderijo | verdadeiro falso | Habilite o cache. |
Codificador | Descrição | Falsos Positivos | Nível de compressão |
---|---|---|---|
falso | Desative a codificação | não | não |
"caso" | Codificação que diferencia maiúsculas de minúsculas | não | não |
"simples" | Normalizações fonéticas | não | ~ 3% |
"avançado" | Normalizações fonéticas + transformações literais | não | ~ 25% |
"extra" | Normalizações fonéticas + transformações Soundex | sim | ~ 50% |
Sequência de referência: "Björn-Phillipp Mayer"
Consulta | ElasticSearch | Pesquisa em massa (iCase) | Pesquisa em massa (simples) | Pesquisa em massa (Adv.) | Pesquisa em massa (extra) |
---|---|---|---|---|---|
björn | sim | sim | sim | sim | sim |
björ | não | sim | sim | sim | sim |
bjorn | não | não | sim | sim | sim |
bjoern | não | não | não | sim | sim |
Filipe | não | não | não | sim | sim |
Filipe | não | não | não | sim | sim |
björnphillip | não | não | sim | sim | sim |
mais | não | não | não | sim | sim |
Björn Meier | não | não | não | sim | sim |
Meier Filipe | não | não | não | sim | sim |
Byorn Mair | não | não | não | não | sim |
(falsos positivos) | sim | não | não | não | sim |
Nota: O tipo de dados dos IDs passados deve ser especificado na criação. Recomenda-se usar o intervalo de dados mais baixo possível aqui, por exemplo, usar "curto" quando os IDs não forem superiores a 65.535.
Tipo de identificação | Faixa de Valores | Uso de memória de cada aproximadamente 100.000 palavras indexadas |
---|---|---|
Byte | 0 - 255 | 4,5 MB |
Curto | 0 - 65.535 | 5,3 MB |
Inteiro | 0 - 4.294.967.295 | 6,8 MB |
Flutuador | 0 - * (16 dígitos) | 10 MB |
Corda | * (ilimitado) | 28,2 MB |
Pesquisa em massa do autor: Thomas Wilkerling
Licença: Licença Apache 2.0