delta-import期间日期/时间戳的其他替代方法

时间:2013-03-26 05:25:35

标签: solr data-import

对于在Solr中执行增量更新,将last_index_time(存储在dataimport.properties中)与数据库中的日期/时间戳列进行比较。

是否可以在Solr中进行配置,以便:

  
      
  • 我们从数据库而不是日期/时间戳中使用其他一些列(比如'id',它会逐渐增加)?
  •   
  • last_index_id 存储在dataimport.properties而不是last_index_time中?
  •   
  • 在delta-import期间,我们可能会使用类似的条件,其中id> dataimporter.last_index_id'
  •   

提前致谢!

1 个答案:

答案 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,甚至不用费心去更新它。)