如何在Solr上完成delta-import后执行查询

问题描述 投票:1回答:1

我做delta dataimport。我使用delete_item表来获取数据,我应该从solr索引中删除它。

我该如何执行查询

TRUNCATE TABLE delete_item

执行delta导入后。

它可以与solr一起使用,或者我应该使用cron作业。

solr dataimporthandler
1个回答
3
投票

没有开箱即用,为此配置我的XML解决方案。从Solr的角度来看,这是有道理的。 Solr希望自我管理而不管理其他数据源。但你可以做几件事。

我个人建议(2)因为这不包括编写需要部署到solr实例的自定义代码。因此,该解决方案可转移到solr云。

1. A Custom EventListener

就像在这个答案中提到的https://stackoverflow.com/a/9100844/2160152Solr - How can I receive notifications of failed imports from my DataImportHandler?你可以写a custom 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文件中。然后you need to make your jar and all its' dependencies available to Solr as described in the wiki(文章是关于插件,但对任何自定义代码都适用)。

2. Redisign 'deleted_item' Table

如博客条目“Data Import Handler – removing data from index”中所示,您可以通过时间戳列deleted_at扩展您的表。然后,您需要扩展onDelete触发器以将当前时间插入该列。

如果你有,你可以如下改变你的实体中的deletedPkQuery属性

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

这样就不需要截断表了,除非你想保存磁盘空间。

© www.soinside.com 2019 - 2024. All rights reserved.