繁体   English   中英

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

[英]How execute query after the finishing delta-import on Solr

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

我该如何执行查询

TRUNCATE TABLE delete_item

执行delta导入后。

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

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

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

1.自定义EventListener

就像在这个答案中提到的那样https://stackoverflow.com/a/9100844/2160152Solr - 如何从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文件中。 然后你需要让你的jar及其所有'依赖项可用于如wiki中描述的Solr (文章是关于插件的,但对于任何自定义代码都适用)。

2.重新分配'deleted_item'表

如博客条目“ 数据导入处理程序 - 从索引中删除数据 ”中所示,您可以通过时间戳列deleted_at扩展表。 然后,您需要扩展onDelete触发器以将当前时间插入该列。

如果你有,你可以重新deletedPkQuery你的实体中的deletedPkQuery属性,如下所示

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM