7

小さなデータセットがあり、オートコンプリート入力ボックスに入力するために、巧妙な方法でそれを検索したいと考えています。ユーザーは 1 つのタイプのエンティティを検索したいと考えていますが、関連付けられたタイプの属性を入力できる必要があります。

私たちのアプリケーションは非常に業界固有のものであるため、抽象的な質問をより関連性の高いコンテキストに入れようとします。

: ユーザーは特定の種類の果物を選択したいと考えており、果物のさまざまな特性を使用して検索できます。彼女は、その名前 (リンゴ)、同じ果物の特別な種類 (ゴールデンデリシャス)、ローカライズされたバージョン ( apfelتفاحpomme ) だけでなく、果物を含む食品 ( pandowdycider )などの他の特性も検索する場合があります。その説明の全文検索の結果です。

通常、私はsolrelasticsearchのようなものを使用したいと考えていますが、データ セットはそれほど大きくなく、それぞれ最大 200 要素のエンティティが 4 ~ 5 個関連付けられています。さらに、それは非常に静的なままであり、隔週でいくつかの編集上の追加があります. そこで、ブラウザのデータ ストアを使用して、ある種のインデックスを管理および検索することを考えました。問題は、私たちの調査では、 Web SQLIndexed DBの抽象化をはるかに超えるものを見つけることができなかったことです。

solr や elasticsearch のようなことを行い、クライアント側で小さなデータセットに使用できるプロジェクトやライブラリはありますか? 以下の機能を求めています

  • 高速検索
  • 前処理 (トークン化、フィルタリングなど)
  • 注文
  • ランキング、クエリ ブースティング

最近のブラウザーとモバイルで動作するはずです。他のブラウザー (つまり、全文検索) のダム フォールバックは許容されます。

4

1 に答える 1

3

IndexedDBの操作 は非常に面倒であり、変更を加えなければ目的を達成できないと思います。

WebSql フルテキスト (FT3) で Chrome WebSql (sqlite) を使用しており、それを使用して高度なクエリを実行でき、結果に自動的に重み付けします。例えば:

table_ft3 structure=[ID、名前、説明、ペット]

そして、「SELECT id FROM table_ft3 WHERE table_ft3 MATCH 'word1 word2 wordfuzzy* -notme +required name:john edwar* mary pets:dog cat'」でクエリを実行できます。

ただし、これは Chrome に限定されます。それぞれ約 12 語の 56 万行のテーブルでは、10 ミリ秒以下で非常に高速です。

JSLinq - http://jslinq.codeplex.com/ これは大規模なデータ セットに適しています。すべてをメモリに保存することで、途方もなく高速ですが、高度な重み付けは行われていないと思います。独自の複雑なクエリ関数を記述できるという追加の利点があります。

JSII - http://karussell.wordpress.com/2010/11/02/jsii-full-text-search-in-1k-loc-of-javascript/ これは Lucene スタイルの重み付けを使用し、20k 行では 50ms で到着しますこれは素晴らしいことではありませんが、おそらくデータには十分です。

于 2012-06-21T12:14:58.507 に答える