我正在使用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