文字列が検索クエリに一致するかどうかを判断できる JavaScript ライブラリはありますか? 効率的で、Google や LexisNexis のような高度なクエリ機能 (and/or 演算子、同義語、括弧など) を提供する必要があります。高度な検索機能があればどんなものでも結構です。特定の検索エンジンに完全に一致する必要はありません。
動機: 検索ボックスとそれに続く一連の段落 (一意の ID を持ち、JavaScript 配列から生成される) を含む HTML ページがあります。ユーザーがボックスに検索クエリを入力して Enter キーを押すと、クエリに一致しない段落はすべて非表示になります (つまり、display
に設定されます)。none
私の現在の戦略(jQuery を使用):
- クエリ文字列を空白で区切ってキーワードの配列に分割します。
- すべての段落を非表示にします
$('p').hide()
。 - 各キーワードについて、それを含む段落を で表示します
$('p:contains("'+keyword+'")').show()
。
これは、大文字と小文字を区別し、すべてのキーワードをオプションとして扱い、、、または括弧などの演算子を提供しない、非常に制限された検索機能ですand
。or
また、すでに一致している場合でも、キーワードごとに各文字列を 1 回ずつ処理するため、非効率的です。
ベストアンサー1
以下は、私がプロジェクト用に評価しているライブラリの一部です (2013 年 7 月現在)。これらのライブラリはいずれも、検索機能の中核を提供できるはずです。
- http://lunrjs.com/
- ステミング、スコアリングが組み込まれている
- 13.8 kb 縮小版
- 最近更新されました(https://github.com/olivernn/lunr.js/commits/master)
- 10人の寄稿者
- 外部依存関係なし
- 翻訳元:(以前はhttp://kiro.me/projects/fuse.html)
- あいまい検索
- 1.58 kb 縮小版
- 最近更新されました(https://github.com/krisk/Fuse/commits/master)
- 寄稿者 1人
- 外部依存関係なし
- http://reyesr.github.io/fullproof/
- グレースフルデグラデーションのHTML5ストレージを使用
- 459 KB 縮小版
- 最終更新日 2013 (https://github.com/reyesr/fullproof/commits/master)
- 寄稿者 2人
- 外部依存関係なし
- http://eikes.github.io/facetedsearch/
- ページネーション、テンプレートが組み込まれている
- 5.70 kb 縮小版
- 最終更新日 2014 (https://github.com/eikes/facetedsearch/commits/master)
- 寄稿者 1人
- jQueryとアンダースコアに依存
独自のものを構築したい場合は、次の 2 つの一般的なステミング アルゴリズムの実装を参考にしてください。
ブール論理検索演算子の扱いについては、おそらくjsクエリパーサーに関する質問役に立つでしょう。