0

削除されたレコードのインデックスを更新する方法を見つけようとしていました。データベースからインデックスを作成しています。データベースでドキュメントを検索し、それらを配列に入れ、SolrInputDocument.

そのため、削除されたレコードのインデックスを更新する方法がわかりませんでした (現在データベースに存在しないため)。

php-solr-pecl拡張機能を使用しています。

4

3 に答える 3

0

ドキュメントの削除は、Solr とは別に処理する必要があります。
Solr はそれを処理しません。
インクリメンタルの場合、データベースから削除されたドキュメントを維持し、同じドキュメントの削除クエリを起動してインデックスをクリーンアップする必要があります。
このためには、ドキュメントを識別するためにタイムスタンプと削除フラグを維持する必要があります。フルの場合は、インデックスをクリーンアップしてすべて再インデックスできます。
ただし、障害が発生した場合、すべてのデータが失われる可能性があります。

Solr DIH は、同じものを少し処理します。

于 2013-06-11T09:48:22.963 に答える
0

私たちは同じ問題に直面し、バッチ削除アプローチを思い付きました。

uniqueid に基づいて SOLR からドキュメントを削除するプログラムを作成しました。一意の ID が SOLR に存在するがデータベースに存在しない場合は、そのドキュメントを SOLR から削除できます。

(SOLR から一意の ID リストを取得) マイナス (データベースから一意の ID リスト)

SQLマイナスを使用して、削除する必要があるドキュメントに属するuniqueidのリストを取得できます。

それ以外の場合は、JAVA 側ですべてを行うことができます。データベースからリストを取得し、solr からリストを取得します。2 つのリストを比較し、それに基づいて削除します。これは、膨大な数のドキュメントの場合、より速く失われます。二分探索法を使用して比較を行うことができます..

何かのようなもの

Collections.binarySearch(DatabaseUniqueidArray, "SOLRuniqueid");
于 2013-06-12T18:34:17.337 に答える
0

データベーステーブルに削除トリガーを作成し、削除されたレコードIDを別のテーブルに挿入します(または、booleanフィールド「deleted」を持ち、実際に削除する代わりにレコードをマークします。トリガーを選択するトレードオフを考慮します)

時々、「削除された」テーブルに基づいてインデックスのバッチ削除を行い、テーブル自体からも削除します。

于 2013-06-11T11:21:39.023 に答える