js-search に基づいたクライアント側の全文検索ですが、パフォーマンスを向上させるために Web ワーカーのサポートが追加されています。
redux-search で統合例を確認してください。
または、NPM を使用して自分でインストールします。
npm install --save js-worker-search
JS 検索から分岐したこのユーティリティは、検索インデックスを構築し、実際の検索を実行します。現在の環境 (ブラウザまたはノード) の機能を自動検出し、可能な場合は Web ワーカー ベースの実装を使用します。 Web ワーカーのサポートが利用できない場合、検索はメイン (UI) スレッドで行われます。
SearchApi は次のパブリック メソッドを定義します。
constructor ({ caseSensitive, indexMode, tokenizePattern })
デフォルトでは、 SearchApi
すべての部分文字列に一致するインデックスを構築します。名前付きのindexMode
パラメータを渡すことで、この動作をオーバーライドできます。有効な値は、 INDEX_MODES.ALL_SUBSTRINGS
、 INDEX_MODES.EXACT_WORDS
、およびINDEX_MODES.PREFIXES
です。
検索はデフォルトでは大文字と小文字が区別されず、すべての空白文字で分割されます。デフォルト オプションのカスタマイズの詳細については、以下をお読みください。
indexDocument (uid, text)
検索インデックス内の uid を追加または更新し、それを指定されたテキストに関連付けます。現時点では、uid はインデックス内で追加または更新のみ可能であり、削除はできないことに注意してください。
パラメータ:
search(query)
現在のインデックスで指定されたクエリ テキストを検索します。テキスト内のすべての単語に一致する UID のみが受け入れられます。空のクエリ文字列を指定すると、すべてのインデックス付き UID が返されます。
ドキュメント検索では大文字と小文字が区別されません (たとえば、「検索」は「検索」と一致します)。文書検索では部分文字列の一致が使用されます (たとえば、「na」と「me」は両方とも「name」と一致します)。
パラメータ:
このメソッドは uid の配列を返します。
terminate()
検索が Web ワーカーで実行されている場合は、ガベージ コレクションを可能にするためにワーカーが終了します。
API を次のように使用します。
import SearchApi from 'js-worker-search'
const searchApi = new SearchApi ( )
// Index as many objects as you want.
// Objects are identified by an id (the first parameter).
// Each Object can be indexed multiple times (once per string of related text).
searchApi . indexDocument ( 'foo' , 'Text describing an Object identified as "foo"' )
searchApi . indexDocument ( 'bar' , 'Text describing an Object identified as "bar"' )
// Search for matching documents using the `search` method.
// In this case the promise will be resolved with the Array ['foo', 'bar'].
// This is because the word "describing" appears in both indices.
const promise = searchApi . search ( 'describing' )
デフォルトでは、 SearchApi
すべての部分文字列に一致するインデックスを構築します。次のように、 indexMode
パラメーターをコンストラクターに渡すことで、この動作をオーバーライドできます。
import SearchApi , { INDEX_MODES } from 'js-worker-search'
// all-substrings match by default; same as current
// eg "c", "ca", "a", "at", "cat" match "cat"
const searchApi = new SearchApi ( )
// prefix matching (eg "c", "ca", "cat" match "cat")
const searchApi = new SearchApi ( {
indexMode : INDEX_MODES . PREFIXES
} )
// exact words matching (eg only "cat" matches "cat")
const searchApi = new SearchApi ( {
indexMode : INDEX_MODES . EXACT_WORDS
} )
デフォルトでは、 SearchApi
スペースと改行を区切り文字として使用してテキストを単語に分割 (トークン化) します。独自の分割ルールを提供したい場合は、次のように、 pattern を定義するコンストラクターに RegExp を渡します。
// Custom tokenizer pattern to include all non alphanumerics as delimeters
// ex: searching "Swift" matches "Thomas Swift" and "Thomas (Swift)" but not "swiftly tilting"
const searchApi = new SearchApi ( {
indexMode : INDEX_MODES . EXACT_WORDS ,
tokenizePattern : / [^a-z0-9]+ / ,
} )
デフォルトのサニタイザーは、大文字と小文字を区別しない検索を実行します。その動作をオーバーライドして大文字と小文字を区別した検索を行う場合は、次のように caseSensitive ビットを true に設定します。
// custom sanitizer for case-sensitive searches
const searchApi = new SearchApi ( {
caseSensitive : true
} )
デフォルトでは、検索ユーティリティはすべての検索トークンを含むドキュメントのみを返します。任意の検索トークンを含むドキュメントを返すように構成できます。
// Change search behavior from AND to OR
const searchApi = new SearchApi ( {
matchAnyToken : true
} )
変更は変更ログで追跡されます。
js-worker-search は MIT ライセンスの下で利用できます。