SOLR数据导入处理程序跳过或忽略请求



我正在使用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跳过了第二个请求,因为我可以看到两个请求都进行了,但是更新的数据不存在。

这也发生在非唯一项目(不是同一ID(中。我要求同时导入两个或三个数据,然后Solr跳过/忽略第二请求。

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

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

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

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

  • 正如您所说的,您的编辑频率很高,ID的重新索引似乎不是最好的事情,基于时间的时间似乎更可扩展。您可以添加一个"倒完整的"列(创建/更新行时通过触发填充(,然后每x调用ReIndex(1分钟,5分钟,5分钟...您可以负担得起(。如果忽略一个请求不会丢失数据,则本应重新索引的行将在运行的下一个delta上重新索引。
  • 如果要保留基于ID的方法,则需要:
    • 等到以前的DIH请求完成,然后发送新的请求
    • 允许一些缓冲区,您可以在等待时继续添加ID
    • 允许您在您的dih配置中有多个ID

最新更新