我做增量数据导入。我使用 delete_item 表来获取数据,我应该从 solr 索引中删除它。
如何执行查询
TRUNCATE TABLE delete_item
在执行增量导入之后。
它可以用 solr 来做,或者我应该用 cron 作业来做。
我做增量数据导入。我使用 delete_item 表来获取数据,我应该从 solr 索引中删除它。
如何执行查询
TRUNCATE TABLE delete_item
在执行增量导入之后。
它可以用 solr 来做,或者我应该用 cron 作业来做。
没有开箱即用,为此在 XML 解决方案中配置我。在 Solr 看来,这是有道理的。Solr 想要管理自己而不是管理其他数据源。但是你可以做几件事。
我个人建议(2),因为这不包括编写需要部署到您的 solr 实例的自定义代码。因此,该解决方案可以转移到 solr cloud。
就像在这个答案中提到的那样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 文件中。然后,您需要使您的 jar 及其所有依赖项对 Solr 可用,如 wiki 中所述(这篇文章是关于插件的,但适用于任何自定义代码)。
如博客条目“数据导入处理程序 - 从索引中删除数据”中所示,您可以通过时间戳列扩展您的表deleted_at
。然后您需要扩展您的 onDelete 触发器以将当前时间插入该列。
如果你有,你可以重新格式化deletedPkQuery
你的实体中的属性,如下所示
deletedPkQuery="SELECT id FROM deleted_item WHERE deleted_at > '${dataimporter.last_index_time}'"
这样就不需要截断表,除非你想节省磁盘空间。