就整體速度而言,BulkSearch 優於所有搜尋庫,並且還提供靈活的搜尋功能,例如多詞匹配、語音轉換或部分匹配。它本質上基於 HDD 如何管理檔案系統中的檔案。新增、更新或刪除項目與搜尋項目一樣快,但也會消耗一些額外的記憶體。當您的索引不需要經常更新時,FlexSearch 可能是更好的選擇。 BulkSearch 也為您提供了一個非同步處理模型來在背景執行查詢。
基準:
支援的平台:
支援的模組定義:
所有功能:
< html >
< head >
< script src =" js/bulksearch.min.js " > </ script >
</ head >
...
注意:使用bulksearch.min.js進行生產,使用bulksearch.js進行開發。
使用 CDN 的最新版本:
< script src =" https://cdn.rawgit.com/nextapps-de/bulksearch/master/bulksearch.min.js " > </ script >
npm install bulksearch
在您的程式碼中包含如下:
var BulkSearch = require ( "bulksearch" ) ;
或在需要時傳入選項:
var index = require ( "bulksearch" ) . create ( { /* options */ } ) ;
AMD
var BulkSearch = require ( "./bulksearch.js" ) ;
描述 | 大量搜尋 | 彈性搜尋 |
---|---|---|
使用權 | 讀寫優化索引 | 讀記憶體優化索引 |
記憶 | 大(每個字約 90 位元組) | 很小(每個字約 2 個位元組) |
用法 |
|
|
限制結果 | 是的 | 是的 |
分頁 | 是的 | 不 |
全局方法:
索引方法:
批量搜尋。建立(<選項>)
var index = new BulkSearch ( ) ;
或者你也可以使用:
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
} ) ;
閱讀更多:拼音搜尋、拼音比較、提高記憶體使用率
指數。添加(id,字串)
index . add ( 10025 , "John Doe" ) ;
指數。搜尋(字串|選項,<限制|頁>,<回呼>)
index . search ( "John" ) ;
限制結果:
index . search ( "John" , 10 ) ;
異步執行查詢:
index . search ( "John" , function ( result ) {
// array of results
} ) ;
將參數作為物件傳遞:
index . search ( {
query : "John" ,
page : '1:1234' ,
limit : 10 ,
callback : function ( result ) {
// async
}
} ) ;
指數。更新(id,字串)
index . update ( 10025 , "Road Runner" ) ;
指數。刪除(id)
index . remove ( 10025 ) ;
index . reset ( ) ;
index . destroy ( ) ;
指數。初始化(<選項>)
注意:重新初始化也會破壞舊索引!
初始化(使用相同的選項):
index . init ( ) ;
使用新選項初始化:
index . init ( {
/* options */
} ) ;
批量搜尋。 addMatcher({正規表示式: 替換})
為所有實例新增全域匹配器:
BulkSearch . addMatcher ( {
'ä' : 'a' , // replaces all 'ä' to 'a'
'ó' : 'o' ,
'[ûúù]' : 'u' // replaces multiple
} ) ;
為特定實例新增私有匹配器:
index . addMatcher ( {
'ä' : 'a' , // replaces all 'ä' to 'a'
'ó' : 'o' ,
'[ûúù]' : 'u' // replaces multiple
} ) ;
在建立/初始化期間定義私有自訂編碼器:
var index = new BulkSearch ( {
encode : function ( str ) {
// do something with str ...
return str ;
}
} ) ;
批量搜尋。暫存器(名稱,編碼器)
BulkSearch . register ( 'whitespace' , function ( str ) {
return str . replace ( / / g , '' ) ;
} ) ;
使用全域編碼器:
var index = new BulkSearch ( { encode : 'whitespace' } ) ;
私有編碼器:
var encoded = index . encode ( "sample text" ) ;
全域編碼器:
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 ( ) ;
傳回有關索引的信息,例如:
{
"bytes" : 103600 ,
"chunks" : 9 ,
"fragmentation" : 0 ,
"fragments" : 0 ,
"id" : 0 ,
"length" : 7798 ,
"matchers" : 0 ,
"size" : 10000 ,
"status" : false
}
注意:當碎片值約為 50% 或更高時,您應該考慮使用cleanup() 。
優化索引將釋放所有碎片內存,並透過評分重建索引。
index . optimize ( ) ;
注意:分頁可以簡單地將查詢時間減少 100 倍。
在初始化時啟用分頁:
var index = BulkSearch . create ( { paging : true } ) ;
執行查詢並傳遞限制(每頁項目):
index . search ( "John" , 10 ) ;
響應將包含一個分頁對象,如下所示:
{
"current" : " 0:0 " ,
"prev" : null ,
"next" : " 1:16322 " ,
"results" : []
}
解釋:
“當前的” | 包括指向目前頁面的指標。 |
“上一頁” | 包括指向上一頁的指標。每當此欄位的值為null時,就不再有可用的先前頁面。 |
“下一個” | 包括指向下一頁的指標。每當該欄位的值為null時,就沒有剩餘頁面了。 |
“結果” | 匹配項的陣列。 |
執行查詢並傳遞指向特定頁面的指標:
index . search ( "John" , {
page : "1:16322" , // pointer
limit : 10
} ) ;
選項 | 價值觀 | 描述 |
---|---|---|
類型 | "位元組" “短的” “整數” “漂浮” “細繩” | 必須在建立時指定傳遞的 ID 的資料類型。建議在這裡使用盡可能低的資料範圍,例如,當 ID 不高於 65,535 時,請使用「short」。 |
編碼 | 錯誤的 “情況” “簡單的” “先進的” “額外的” 函數(字串):字串 | 編碼類型。選擇內建函數之一或傳遞自訂編碼函數。 |
布林值 | “和” “或者” | 比較多個單字時應用的布林模型。注意:使用“or”時,第一個單字也與“and”進行比較。範例:包含 3 個單字的查詢,結果有:相符的單字 1 & 2 和相符的單字 1 & 3。 |
尺寸 | 2500 - 10000 | 塊的大小。這取決於內容長度,哪個值最適合。內容長度較短(例如使用者名稱)的區塊大小為 2,500 時速度較快。當區塊大小為 10,000 時,文字越大,運行速度越快。注意:建議使用最大內容長度的最小區塊大小,必須對其進行索引以防止碎片。 |
多 | 真的 錯誤的 | 啟用多字處理。 |
已訂購 | 真的 錯誤的 | 多個單字的順序必須與符合條目的順序相同。 |
嚴格的 | 真的 錯誤的 | 精確比對需要從查詢開始。 |
快取 | 真的 錯誤的 | 啟用快取。 |
編碼器 | 描述 | 誤報 | 壓縮等級 |
---|---|---|---|
錯誤的 | 關閉編碼 | 不 | 不 |
“情況” | 不區分大小寫的編碼 | 不 | 不 |
“簡單的” | 語音規範化 | 不 | 〜3% |
“先進的” | 語音規範化 + 文字轉換 | 不 | 〜25% |
“額外的” | 語音規範化 + Soundex 轉換 | 是的 | 〜50% |
參考字串: “Björn-Phillipp Mayer”
詢問 | 彈性搜尋 | 批量搜尋(iCase) | 批量搜尋(簡單) | 大量搜尋(進階) | 大量搜尋(額外) |
---|---|---|---|---|---|
比約恩 | 是的 | 是的 | 是的 | 是的 | 是的 |
比約爾 | 不 | 是的 | 是的 | 是的 | 是的 |
比約恩 | 不 | 不 | 是的 | 是的 | 是的 |
比約恩 | 不 | 不 | 不 | 是的 | 是的 |
菲利普 | 不 | 不 | 不 | 是的 | 是的 |
菲利普 | 不 | 不 | 不 | 是的 | 是的 |
比約恩菲利普 | 不 | 不 | 是的 | 是的 | 是的 |
梅爾 | 不 | 不 | 不 | 是的 | 是的 |
比約恩·邁爾 | 不 | 不 | 不 | 是的 | 是的 |
梅爾·菲利普 | 不 | 不 | 不 | 是的 | 是的 |
拜恩梅爾 | 不 | 不 | 不 | 不 | 是的 |
(誤報) | 是的 | 不 | 不 | 不 | 是的 |
注意:必須在建立時指定傳遞的 ID 的資料類型。建議在這裡使用盡可能低的資料範圍,例如,當 ID 不高於 65,535 時,請使用「short」。
身分證類型 | 值範圍 | 每約 100,000 個索引詞的記憶體使用情況 |
---|---|---|
位元組 | 0 - 255 | 4.5MB |
短的 | 0 - 65,535 | 5.3MB |
整數 | 0 - 4,294,967,295 | 6.8MB |
漂浮 | 0 - *(16 位數字) | 10兆位元組 |
細繩 | *(無限制) | 28.2MB |
作者 BulkSearch:托馬斯威爾克林
許可證:Apache 2.0 許可證