1

私はデルタデータインポートを行います。solr インデックスから削除する必要があるデータを取得するために delete_item テーブルを使用します。

クエリを実行するにはどうすればよいですか

TRUNCATE TABLE delete_item

デルタインポートの実行後。

solr で実行できますが、cron ジョブで実行する必要があります。

4

1 に答える 1

3

すぐに使用できるものはありません。このために XML ソリューションで構成してください。Solr の観点からすれば、これは理にかなっています。Solr は、他のデータ ソースを管理するのではなく、それ自体を管理したいと考えています。しかし、いくつかのことができます。

個人的には、(2) をお勧めします。これには、solr インスタンスにデプロイする必要があるカスタム コードを記述することが含まれていないためです。したがって、そのソリューションは solr クラウドに移行できます。

1. カスタム EventListener

この回答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 で使用できるようにする必要があります(この記事はプラグインに関するものですが、カスタム コードにも当てはまります)。

2.「deleted_item」テーブルを再設計する

ブログ エントリ「データ インポート ハンドラー – インデックスからデータを削除する」に示されているように、タイムスタンプ列によってテーブルを拡張できますdeleted_at。次に、onDelete トリガーを拡張して、現在の時刻をその列に挿入する必要があります。

deletedPkQuery次のように、エンティティの属性を再定式化できる場合

deletedPkQuery="SELECT id FROM deleted_item WHERE deleted_at > '${dataimporter.last_index_time}'"

そうすれば、ディスク容量を節約したい場合を除いて、テーブルを切り捨てる必要はありません。

于 2013-10-29T15:31:39.653 に答える