【问题标题】:Other alternatives for date/timestamp during delta-import增量导入期间日期/时间戳的其他替代方案
【发布时间】:2013-03-15 19:54:56
【问题描述】:

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

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

  • 我们使用数据库中的一些其他列(比如 'id' 顺序增加)而不是日期/时间戳?
  • last_index_id 存储在 dataimport.properties 而不是 last_index_time ?
  • 在增量导入期间,我们可能会使用 'where id > dataimporter.last_index_id' 之类的条件?

提前致谢!

【问题讨论】:

    标签: solr data-import


    【解决方案1】:

    我相信您的用例是您有一个带有自动增量主键的仅附加表。 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,甚至不用自己更新它。)

    【讨论】:

    • 好主意!我完全同意“时间戳”是最好的选择,因为我们也可以处理更新。只是在寻找替代品!还是谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 2016-01-21
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 2020-05-03
    相关资源
    最近更新 更多