0

短縮版

データベース内の任意のオブジェクト セット内で全文検索を効率的に実行したいと考えています。すべてのオブジェクトは検索エンジンで索引付けされます。

私の考え

これを2部構成にする予定です。最初に、検索エンジンは、全文検索に一致する加重/ソートされた一連の ID を照会されます。この一連の ID はフィルター処理され、ユーザーの元のセットにない ID はすべて削除されます。

これを行うより良い方法はありますか?そうでない場合は、これを効率的に行うためのアドバイスを提供できますか?

ロングバージョン

私は、ユーザーが高度にリンクされたデータのセットを視覚化し、これらの視覚化を操作して、さらなる分析のために興味深い頂点のセットを導出できるようにする Web アプリケーションを構築する計画段階にいます。ユーザーが GUI を介して実行するフィルタリング アクションは複雑であり、インデックス可能な数量として表現するのは非常に困難です。

ユーザーがこれらのデータ セット内の結果に対して全文検索を実行できるようにしたいと考えています。Google が結果セット内の検索に対して行っていることを見ると、以前の検索クエリを新しいクエリに単純に追加して「検索範囲」を有効にするという Google のアプローチは、私のデータには適していない可能性があります。

この質問に対する受け入れられた答えは、データベース操作を使用して検索エンジンからの結果をフィルタリングするという考えを促進します。

解決策の一部として、ユーザーが検索したい頂点のセットがフロントエンドで処理できるほど小さくなったときに、フロントエンドをlunrの使用に切り替えることも検討しています。この制限が何であるかを理解するには、いくつかのテストが必要ですが、数千になるとは思えないため、サーバー側のソリューションの必要性は残ります.

環境の詳細

appengine で python 2.7 を実行しています。

このアプリケーションでは、最初の結果セット (検索対象) に 10 ~ 2000 個の頂点が含まれると予想しています。データベース全体の頂点の総数は、数桁大きくなる可能性があります。

4

2 に答える 2

1

TLDNR: 前処理を行って、クライアントがさまざまなクエリをサポートするために使用できる大きなハッシュ ディクショナリを設定できますか?

データはどのくらい動的で大きいですか? データが比較的静的な場合に似たようなものに取り組んでいます。ユーザーが約 300 の変数の任意の組み合わせを選択して AND および OR 選択を作成できる Web ページがあります。各変数には、何百ものアイテムを関連付けることができます。変数のデータセットは比較的静的で巨大ではないため、TextProperty フィールドに json.dumped テキストとして作成しました。ブラウザーによって解析されると、json は単純に、変数 ID をキーとする大きな辞書になります。各キーの値は、選択したキーに関連付けられたアイテム (この場合はイメージ ID) の配列です。すべての共通部分と組み合わせは、これらの配列で供給されるいくつかの小さな Javascript 関数で行われます。これは非常にうまく機能しています。ユーザーは速度を補完し、このアプローチは非常に効果的です。GAE 側を大幅に簡素化します。すべての json 変数は、cron と taskqueues を介して、やや遅延したほぼリアルタイムの方法でロード/更新されます。最終的な表示のために、結果はフォーマットされ、div の innerHTML に挿入されます。すべての画像がキャッシュされると、何百もの 420x280 ピクセルの画像をフォーマットして表示するためのブラウザーの応答は、ほぼ瞬時になります。見るのは非常にクールであり、ブラウザで作業している人々へのオマージュ - レイアウトと JS の最適化の両方. (JQuery のようなものに対して最小限のオーバーヘッドを確保するために、純粋な JS を使用していることに注意してください。) HTH -stevep 何百もの 420x280 ピクセルの画像をフォーマットして表示するためのブラウザの応答は、ほぼ瞬時です。見るのは非常にクールであり、ブラウザで作業している人々へのオマージュ - レイアウトと JS の最適化の両方. (JQuery のようなものに対して最小限のオーバーヘッドを確保するために、純粋な JS を使用していることに注意してください。) HTH -stevep 何百もの 420x280 ピクセルの画像をフォーマットして表示するためのブラウザの応答は、ほぼ瞬時です。見るのは非常にクールであり、ブラウザで作業している人々へのオマージュ - レイアウトと JS の最適化の両方. (JQuery のようなものに対して最小限のオーバーヘッドを確保するために、純粋な JS を使用していることに注意してください。) HTH -stevep

于 2013-07-13T19:36:54.830 に答える