0

次の機能を実装しようとしています。

すべてのユーザーからのすべてのドキュメントを含むメインの中央 solr サーバーがあります。
各クライアントで、自分のドキュメントのローカル キャッシュを作成したい (したがって、インターネット接続がない場合でも、ユーザーは自分のローカル キャッシュを検索できます): 最初に、最後の 2 で作成または変更されたユーザーのドキュメントのインデックスをインポートします。数週間 (たとえば)、その後毎日深夜に、この期間中にそのユーザーによって作成、変更、または削除されたドキュメントのインデックスを取得し、変更をローカル キャッシュにインポートします。

http://wiki.apache.org/solr/DataImportHandler#SolrEntityProcessorを使用します
1. 最初に、/dataimport&query=+from:jeffery +last_modified:[${last_2weeks_ago} TO NOW] を使用して、このユーザーが作成/変更したインデックスをインポートします過去 2 週間で。
2. デルタ インポートの場合、作成または変更された (インデックスを含まない) 削除されたインデックスをチェックインするには、/dataimport&query=+from:jeffery +last_modified:[${dataimporter.request.last_index_time} TO NOW]&clean=false を使用します。

しかし難しいのは、前日に削除されたドキュメントのインデックスを取得する方法です。これを行う方法をいくつか見つけましたが、まったく効率的ではありません。

解決策 1 - 効率的ではありません。
1. ${local_ids} という名前のローカル キャッシュ内のすべての ID (ロード ID のみ) を
読み取ります。 2. ${first_index_time} と ${last_index_time} の間のリモート中央サーバー内のすべての ID を読み取ります
。削除された ID は次のようになります = ${local_ids}-${ids_still_exist _in_remote_server}

これは、ローカル キャッシュ サーバーとリモート solr サーバーから毎回 N 個 (たとえば 10000) の ID を取得するだけで最適化できます。次に、ローカル サーバーとリモート サーバーに ID がなくなるまでループ内で差を計算します。

ソリューション 2:

リモートの中央 solr サーバーでは、ドキュメントが削除されたときに、{docid, deletedate} のようなレコード (おそらく作成者などの他の情報) を solr サーバーに追加します。delta-import を実行するとき、${last_index_time} から NOW までの間に削除された ID を取得するためのクエリを作成します。

これを実装する方法はまだわかりませんが、これは実装可能だと思います。ただし、これにより、リモートの中央 solr サーバーでの削除操作が遅くなり、削除されたドキュメントに関する記録がリモート サーバーで不要になります。(ただし、スレッドを使用して、削除されたドキュメントに関する古いインデックスを削除できます)

solrでこれを行うための他のより良い方法はありますか? あなたの助けとアドバイスをどうもありがとう:)

4

1 に答える 1

1

Solr レプリケーションを使用して、コンテンツをリモート サーバーからローカル サーバーに定期的に複製するか、イベント ベース (コミットまたは最適化) にすることができます。
更新を追跡する必要はありません。

于 2012-10-23T17:56:05.303 に答える