【问题标题】:SOLR delta-import timestamp issueSOLR 增量导入时间戳问题
【发布时间】:2011-12-28 10:47:10
【问题描述】:

我是 SOLR 的新手,正在对这项技术进行一些研究。我现在有一个关于 delta-import 函数的问题,所以我查看了 SO,发现了这个:Solr DataImportHandler delta import。在答案中提到了一个字段[date_update],它似乎是记录的时间戳。

我的问题是:[date_update] 是在创建记录时存储在表中的时间戳吗?如果是这样,如果数据库服务器的日期与安装 SOLR 的服务器不完全同步,这会不会产生问题?如果 Solr 服务器时间早于 SQLServer 时间,这可能会遗漏一些记录。

【问题讨论】:

    标签: solr dataimporthandler delta


    【解决方案1】:

    此解决方案可能会留下一些记录(如果服务器配置不正确)。

    我正在使用类似的解决方案,但做了一些修改。当项目以任何方式更改时,数据库中的项目会更新时间戳字段。

    在更新索引之前,我从 Solr 获取最后一个时间戳(此字段已存储),然后我将索引查询中的此时间戳传递给 Solr (/?command=full-import&clean=false&timestamp=...)。

    Using query attribute for both full and delta import

    这样 Solr 机器上的时间与 DB 机器上的时间无关。但是在我的情况下,索引完成后,我正在使用 DB 执行快速验证(检查是否由于某种原因丢失了任何内容,或者必须删除某些内容)。

    您也可以在使用 dataimporter.last_index_time 时使用这种验证。

    【讨论】:

    • 新年快乐,感谢您的回答。在上面的答案中,我认为问题仍然存在,因为 Solr 时间戳“来自 Solr 的时间戳(此字段已存储)”仍在与数据库表时间戳进行比较,否?我认为这只是您之后提到的验证所有内容是否已导入的过程。您是否遇到过某些数据未导入的情况?
    • 是的,该时间戳与数据库中的时间戳进行比较,但它也是从数据库中索引的,因此 Solr 机器上的时间并不重要(未使用)。
    • 感谢您的回复。但是我仍然没有正确理解这一点。令我困惑的是这句话:“在更新索引之前,我从 Solr 获取最后一个时间戳(此字段已存储) 这是 dataimporter.last_index_time 吗? ,然后我将索引查询中的这个时间戳传递给 Solr (/?command=full-import&clean=false&timestamp=...)。"。另外,我假设来自 Solr 的时间戳随后作为参数传递给导入查询 no?
    • 我在 DB 和 Solr 中都有时间戳字段(以指示每条记录的最后修改时间)。这个时间戳不是dataimporter.last_index_time,而是“/select/?q=*:*&fl=timestamp&rows=1&sort=timestamp+desc&wt=xslt&tr=timestamp.xsl”。 XSL 转换用于获取 DB 可以理解的格式。正如你所说,我在导入查询中使用该时间戳(作为参数)。
    • 哦,所以实际上您正在向数据库传递与数据库之前提供的相同(最新)时间戳,是这样吗?另外请您给我一个您正在使用的 xsl 文件的示例或指出一个好的来源?
    【解决方案2】:

    您可以使用 FlexCDC,它会监控 MySQL 二进制日志中的表数据更改:

    http://www.mysqlperformanceblog.com/2011/03/25/using-flexviews-part-two-change-data-capture/

    【讨论】:

      猜你喜欢
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-07
      相关资源
      最近更新 更多