对于在Solr中执行增量更新,将last_index_time(存储在dataimport.properties中)与数据库中的日期/时间戳列进行比较。
是否可以在Solr中进行配置,以便:
- 我们从数据库而不是日期/时间戳中使用其他一些列(比如'id',它会逐渐增加)?
- last_index_id 存储在dataimport.properties而不是last_index_time中?
- 在delta-import期间,我们可能会使用类似的条件,其中id> dataimporter.last_index_id'?
提前致谢!
答案 0 :(得分:3)
我相信你的用例是你有一个只有附加表的自动增量主键。 Solr DIH似乎不支持你想要的东西。 (尝试询问Solr用户邮件列表。)
但是有一种替代方法可以尝试使用Solr Wiki DataImportHandlerDeltaQueryViaFullImport中给出的示例中的想法。如果您可以将Solr索引中最大的id
作为参数传递给导入请求,那么您可以在数据导入查询中使用它。
为此,您需要首先向Solr发出查询以获取最大的id:
q=*:*&sort=id desc&rows=1&fl=id
拨打此MAXID
。然后当你调用完全导入的传递时,这个id就像:
/dataimport?command=full-import&id=MAXID
您可以使用${dataimporter.request.id}
在数据配置中获取ID请求参数。
在您的data-config.xml中,您的查询应该是:
<entity name="item"
pk="id"
query="SELECT id, name FROM item
WHERE id > '${dataimporter.request.id}'">
当然,为了对所有文档进行完整的重新索引,您将传递id=0
,假设0是您获得的最小键值。
我自己没试过,但你可以试验并告诉你发现了什么。
(有了这一切,显然很容易在你的表中添加一个时间戳列。如果你使用的是MySQL,你可以将时间戳列保持为DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
,甚至不用费心去更新它。)