私はデルタデータインポートを行います。solr インデックスから削除する必要があるデータを取得するために delete_item テーブルを使用します。
クエリを実行するにはどうすればよいですか
TRUNCATE TABLE delete_item
デルタインポートの実行後。
solr で実行できますが、cron ジョブで実行する必要があります。
私はデルタデータインポートを行います。solr インデックスから削除する必要があるデータを取得するために delete_item テーブルを使用します。
クエリを実行するにはどうすればよいですか
TRUNCATE TABLE delete_item
デルタインポートの実行後。
solr で実行できますが、cron ジョブで実行する必要があります。
すぐに使用できるものはありません。このために XML ソリューションで構成してください。Solr の観点からすれば、これは理にかなっています。Solr は、他のデータ ソースを管理するのではなく、それ自体を管理したいと考えています。しかし、いくつかのことができます。
個人的には、(2) をお勧めします。これには、solr インスタンスにデプロイする必要があるカスタム コードを記述することが含まれていないためです。したがって、そのソリューションは solr クラウドに移行できます。
この回答https://stackoverflow.com/a/9100844/2160152に記載されているように、 Solr - DataImportHandler から失敗したインポートの通知を受け取るにはどうすればよいですか? カスタム EventListenerを作成できます。そのリスナーがデータベースに接続し、トランケートを実行する場合があります。
import java.sql.Connection;
import java.sql.SQLException;
import org.apache.solr.handler.dataimport.Context;
import org.apache.solr.handler.dataimport.EventListener;
public class ImportEndListener implements EventListener {
@Override
public void onEvent(Context aContext) {
Connection connection = getConnection();
try {
connection.createStatement()
.executeUpdate("TRUNCATE TABLE delete_item");
} catch (SQLException e) {
// TODO think of something better
e.printStackTrace();
} finally {
try {
connection.close();
} catch (SQLException e) {
// TODO think of something better
e.printStackTrace();
}
}
}
private Connection getConnection() {
// TODO get a connection to your database, somehow
return null;
}
}
そのリスナーは、jar ファイルにコンパイルしてバンドルする必要があります。次に、wiki で説明されているように、jar とそのすべての依存関係を Solr で使用できるようにする必要があります(この記事はプラグインに関するものですが、カスタム コードにも当てはまります)。
ブログ エントリ「データ インポート ハンドラー – インデックスからデータを削除する」に示されているように、タイムスタンプ列によってテーブルを拡張できますdeleted_at
。次に、onDelete トリガーを拡張して、現在の時刻をその列に挿入する必要があります。
deletedPkQuery
次のように、エンティティの属性を再定式化できる場合
deletedPkQuery="SELECT id FROM deleted_item WHERE deleted_at > '${dataimporter.last_index_time}'"
そうすれば、ディスク容量を節約したい場合を除いて、テーブルを切り捨てる必要はありません。