Dalam hal kecepatan keseluruhan , BulkSearch mengungguli semua perpustakaan pencarian yang ada dan juga menyediakan kemampuan pencarian yang fleksibel seperti pencocokan multi-kata, transformasi fonetik, atau pencocokan sebagian. Hal ini pada dasarnya didasarkan pada bagaimana HDD mengelola file dalam sistem file. Menambah, memperbarui, atau menghapus item sama cepatnya dengan mencarinya, namun juga menghabiskan sejumlah memori tambahan. Ketika indeks Anda tidak perlu sering diperbarui maka FlexSearch mungkin merupakan pilihan yang lebih baik. BulkSearch juga memberi Anda model pemrosesan asinkron untuk melakukan kueri di latar belakang.
Tolok ukur:
Platform yang Didukung:
Definisi Modul yang Didukung:
Semua Fitur:
< html >
< head >
< script src =" js/bulksearch.min.js " > </ script >
</ head >
...
Catatan: Gunakan bulksearch.min.js untuk produksi dan bulksearch.js untuk pengembangan.
Gunakan yang terbaru dari CDN:
< script src =" https://cdn.rawgit.com/nextapps-de/bulksearch/master/bulksearch.min.js " > </ script >
npm install bulksearch
Dalam kode Anda sertakan sebagai berikut:
var BulkSearch = require ( "bulksearch" ) ;
Atau berikan opsi saat membutuhkan:
var index = require ( "bulksearch" ) . create ( { /* options */ } ) ;
AMD
var BulkSearch = require ( "./bulksearch.js" ) ;
Keterangan | Pencarian Massal | Pencarian Fleksibel |
---|---|---|
Mengakses | Indeks baca-tulis yang dioptimalkan | Indeks Baca-Memori yang dioptimalkan |
Ingatan | Besar (~ 90 byte per kata) | Kecil (~ 2 byte per kata) |
Penggunaan |
|
|
Batasi Hasil | Ya | Ya |
Paginasi | Ya | TIDAK |
Metode global:
Metode indeks:
Pencarian Massal. buat(<pilihan>)
var index = new BulkSearch ( ) ;
sebagai alternatif, Anda juga dapat menggunakan:
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
} ) ;
Baca selengkapnya: Pencarian Fonetik, Perbandingan Fonetik, Tingkatkan Penggunaan Memori
Indeks. tambahkan(id, string)
index . add ( 10025 , "John Doe" ) ;
Indeks. pencarian(string|pilihan, <batas|halaman>, <panggilan balik>)
index . search ( "John" ) ;
Batasi hasilnya:
index . search ( "John" , 10 ) ;
Lakukan kueri secara asinkron:
index . search ( "John" , function ( result ) {
// array of results
} ) ;
Lewati parameter sebagai objek:
index . search ( {
query : "John" ,
page : '1:1234' ,
limit : 10 ,
callback : function ( result ) {
// async
}
} ) ;
Indeks. perbarui(id, string)
index . update ( 10025 , "Road Runner" ) ;
Indeks. hapus(id)
index . remove ( 10025 ) ;
index . reset ( ) ;
index . destroy ( ) ;
Indeks. init(<pilihan>)
Catatan: Inisialisasi ulang juga akan menghancurkan indeks lama!
Inisialisasi (dengan opsi yang sama):
index . init ( ) ;
Inisialisasi dengan opsi baru:
index . init ( {
/* options */
} ) ;
Pencarian Massal. addMatcher({ REGEX: MENGGANTI })
Tambahkan pencocokan global untuk semua instance:
BulkSearch . addMatcher ( {
'ä' : 'a' , // replaces all 'ä' to 'a'
'ó' : 'o' ,
'[ûúù]' : 'u' // replaces multiple
} ) ;
Tambahkan pencocokan pribadi untuk instance tertentu:
index . addMatcher ( {
'ä' : 'a' , // replaces all 'ä' to 'a'
'ó' : 'o' ,
'[ûúù]' : 'u' // replaces multiple
} ) ;
Tentukan encoder khusus pribadi selama pembuatan/inisialisasi:
var index = new BulkSearch ( {
encode : function ( str ) {
// do something with str ...
return str ;
}
} ) ;
Pencarian Massal. daftar (nama, pembuat enkode)
BulkSearch . register ( 'whitespace' , function ( str ) {
return str . replace ( / / g , '' ) ;
} ) ;
Gunakan pembuat enkode global:
var index = new BulkSearch ( { encode : 'whitespace' } ) ;
Pembuat enkode pribadi:
var encoded = index . encode ( "sample text" ) ;
Pembuat enkode 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 ( ) ;
Mengembalikan informasi tentang indeks, misalnya:
{
"bytes" : 103600 ,
"chunks" : 9 ,
"fragmentation" : 0 ,
"fragments" : 0 ,
"id" : 0 ,
"length" : 7798 ,
"matchers" : 0 ,
"size" : 10000 ,
"status" : false
}
Catatan: Ketika nilai fragmentasi sekitar 50% atau lebih tinggi, Anda harus mempertimbangkan untuk menggunakan cleanup() .
Mengoptimalkan indeks akan membebaskan semua memori yang terfragmentasi dan juga membangun kembali indeks dengan memberi skor.
index . optimize ( ) ;
Catatan: Penomoran halaman dapat dengan mudah mengurangi waktu kueri hingga 100 kali lipat.
Aktifkan penomoran halaman pada inisialisasi:
var index = BulkSearch . create ( { paging : true } ) ;
Lakukan kueri dan lewati batas (item per halaman):
index . search ( "John" , 10 ) ;
Responsnya akan menyertakan objek penomoran halaman seperti ini:
{
"current" : " 0:0 " ,
"prev" : null ,
"next" : " 1:16322 " ,
"results" : []
}
Penjelasan:
"saat ini" | Termasuk penunjuk ke halaman saat ini. |
"sebelumnya" | Termasuk penunjuk ke halaman sebelumnya. Setiap kali bidang ini bernilai null, maka tidak ada lagi halaman sebelumnya yang tersedia. |
"Berikutnya" | Termasuk penunjuk ke halaman berikutnya. Setiap kali bidang ini bernilai null, maka tidak ada halaman lagi yang tersisa. |
"hasil" | Array item yang cocok. |
Lakukan kueri dan teruskan penunjuk ke halaman tertentu:
index . search ( "John" , {
page : "1:16322" , // pointer
limit : 10
} ) ;
Pilihan | Nilai-nilai | Keterangan |
---|---|---|
jenis | "bita" "pendek" "bilangan bulat" "mengambang" "rangkaian" | Tipe data ID yang diteruskan harus ditentukan pada saat pembuatan. Direkomendasikan untuk menggunakan rentang data serendah mungkin di sini, misalnya gunakan "pendek" ketika ID tidak lebih tinggi dari 65.535. |
menyandi | PALSU "icase" "sederhana" "canggih" "tambahan" fungsi(string):string | Jenis pengkodean. Pilih salah satu fungsi pengkodean bawaan atau berikan fungsi pengkodean khusus. |
boolean | "Dan" "atau" | Model boolean yang diterapkan saat membandingkan beberapa kata. Catatan: Saat menggunakan "atau", kata pertama juga dibandingkan dengan "dan". Contoh: kueri dengan 3 kata, hasilnya memiliki: kata yang cocok 1 & 2 dan kata yang cocok 1 & 3. |
ukuran | 2500 - 10000 | Ukuran potongan. Tergantung pada panjang konten, nilai mana yang paling sesuai. Panjang konten yang pendek (misalnya Nama pengguna) lebih cepat dengan ukuran potongan 2.500. Teks yang lebih besar berjalan lebih cepat dengan ukuran potongan 10.000. Catatan: Disarankan untuk menggunakan ukuran potongan minimum dari panjang konten maksimum yang harus diindeks untuk mencegah fragmentasi. |
multi | BENAR PALSU | Aktifkan pemrosesan multi kata. |
dipesan | BENAR PALSU | Beberapa kata harus memiliki urutan yang sama dengan entri yang cocok. |
ketat | BENAR PALSU | Pencocokan persis harus dimulai dengan kueri. |
cache | BENAR PALSU | Aktifkan cache. |
Pembuat enkode | Keterangan | Positif Palsu | Tingkat Kompresi |
---|---|---|---|
PALSU | Matikan pengkodean | TIDAK | TIDAK |
"icase" | Pengkodean tidak peka huruf besar-kecil | TIDAK | TIDAK |
"sederhana" | Normalisasi fonetik | TIDAK | ~ 3% |
"canggih" | Normalisasi fonetik + Transformasi literal | TIDAK | ~ 25% |
"tambahan" | Normalisasi fonetik + transformasi Soundex | Ya | ~ 50% |
String Referensi: "Björn-Phillipp Mayer"
Pertanyaan | Pencarian Elastis | Pencarian Massal (iCase) | Pencarian Massal (Sederhana) | Pencarian Massal (Lanjutan) | Pencarian Massal (Ekstra) |
---|---|---|---|---|---|
bjorn | Ya | Ya | Ya | Ya | Ya |
björ | TIDAK | Ya | Ya | Ya | Ya |
bjorn | TIDAK | TIDAK | Ya | Ya | Ya |
bjoern | TIDAK | TIDAK | TIDAK | Ya | Ya |
Philipp | TIDAK | TIDAK | TIDAK | Ya | Ya |
filip | TIDAK | TIDAK | TIDAK | Ya | Ya |
björnphillip | TIDAK | TIDAK | Ya | Ya | Ya |
Meier | TIDAK | TIDAK | TIDAK | Ya | Ya |
bjorn meier | TIDAK | TIDAK | TIDAK | Ya | Ya |
lebih baik Philip | TIDAK | TIDAK | TIDAK | Ya | Ya |
byorn mair | TIDAK | TIDAK | TIDAK | TIDAK | Ya |
(positif palsu) | Ya | TIDAK | TIDAK | TIDAK | Ya |
Catatan: Tipe data ID yang diteruskan harus ditentukan pada saat pembuatan. Direkomendasikan untuk menggunakan rentang data serendah mungkin di sini, misalnya gunakan "pendek" ketika ID tidak lebih tinggi dari 65.535.
Tipe ID | Rentang Nilai | Penggunaan memori setiap ~ 100.000 kata yang diindeks |
---|---|---|
byte | 0 - 255 | 4,5 Mb |
Pendek | 0 - 65.535 | 5,3 Mb |
Bilangan bulat | 0 - 4.294.967.295 | 6,8 Mb |
Mengambang | 0 - * (16 digit) | 10 Mb |
Rangkaian | * (tidak terbatas) | 28,2 Mb |
Penulis Pencarian Massal: Thomas Wilkerling
Lisensi: Lisensi Apache 2.0