全体的な速度に関しては、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" ) ;
説明 | 一括検索 | フレックスサーチ |
---|---|---|
アクセス | 読み取り/書き込みに最適化されたインデックス | 読み取りメモリに最適化されたインデックス |
メモリ | 大 (1 ワードあたり約 90 バイト) | 小さい (1 ワードあたり約 2 バイト) |
使用法 |
|
|
結果を制限する | はい | はい |
ページネーション | はい | いいえ |
グローバルメソッド:
インデックス方法:
一括検索。 create(<オプション>)
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
} ) ;
詳細:発音検索、発音比較、メモリ使用量の改善
索引。 add(id, 文字列)
index . add ( 10025 , "John Doe" ) ;
索引。 search(文字列|オプション, <制限|ページ>, <コールバック>)
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
}
} ) ;
索引。 update(id, 文字列)
index . update ( 10025 , "Road Runner" ) ;
索引。削除(ID)
index . remove ( 10025 ) ;
index . reset ( ) ;
index . destroy ( ) ;
索引。 init(<オプション>)
注:再初期化すると、古いインデックスも破壊されます。
初期化 (同じオプションを使用):
index . init ( ) ;
新しいオプションで初期化します。
index . init ( {
/* options */
} ) ;
一括検索。 addMatcher({正規表現: REPLACE })
すべてのインスタンスにグローバル マッチャーを追加します。
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 ;
}
} ) ;
一括検索。 register(名前, エンコーダ)
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 分の 1 に短縮できます。
初期化時にページネーションを有効にします。
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」を使用します。
IDの種類 | 値の範囲 | インデックス付けされた約 100,000 単語ごとのメモリ使用量 |
---|---|---|
バイト | 0~255 | 4.5MB |
短い | 0~65,535 | 5.3MB |
整数 | 0 - 4,294,967,295 | 6.8MB |
フロート | 0~*(16桁) | 10MB |
弦 | * (無制限) | 28.2MB |
著者一括検索: Thomas Wilkerling
ライセンス: Apache 2.0 ライセンス