【问题标题】:SOLR data import handler skips or ignores requestSOLR 数据导入处理程序跳过或忽略请求
【发布时间】:2017-05-04 13:24:22
【问题描述】:

我正在使用 SOLR 6.0.0,并且我使用数据导入处理程序来处理从 MySQL 到 SOLR 的索引。

我的 db-data-config.xml 文件中有以下查询

<entity name="user" query="SELECT ID, A, B, C FROM `USER` U WHERE U.ID = '${dataimporter.request.id}' OR '' = '${dataimporter.request.id}'">
    <field column="A" name="A" ....
    .......
</entity>

基本上,如果我传递 id,它只会索引那个 ID,否则它会索引整个表。

现在问题是,

我有一个频繁的插入更新。

在第一次插入后,我向单个 id/doc/row 的索引发送请求,几毫秒后记录被更新,因此我再次发送请求以索引相同的 id。现在看来 SOLR 跳过了第二个请求,因为我可以看到两个请求都已完成,但 SOLR 中不存在更新的数据。

这也发生在非唯一的项目上(不同的 id)。我同时请求两个或三个数据导入,solr 跳过/忽略第二个请求。

我用http方法请求它,发送以下查询,

http://localhost:8983/solr/user/dataimport?command=full-import&verbose=false&clean=false&commit=true&optimize=false&core=user&id=1

【问题讨论】:

    标签: solr dataimporthandler solr6


    【解决方案1】:

    如果 DIH 处理程序正忙于运行请求,将忽略您发送给它的任何其他请求。

    因此,您必须审查有关如何/何时调用 DIH 的方法,一些想法:

    • 正如您所说,您的编辑频率很高,按 id 重新索引似乎不是最好的事情,基于时间的某些东西似乎更具可扩展性。您可以添加一个“lastUpdated”列(在创建/更新行时通过触发器填充),然后每 X 调用一次重新索引(1 分钟、5 分钟......无论你能负担得起什么)。如果一个请求被忽略,没有数据丢失,那么应该重新索引的行将在下一个运行的增量中重新索引。
    • 如果您想保留基于 id 的方法,您需要:\
      • 等到上一个 DIH 请求完成后再发送一个新请求
      • 允许一些缓冲区,您可以在等待时继续添加 ID
      • 允许在您的 dih 配置中使用多个 id

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多