2017-05-04 78 views
0

我使用的是SOLR 6.0.0,我使用数据导入处理程序来处理从MySQL到SOLR的索引。SOLR数据导入处理程序跳过或忽略请求

我有以下查询在我的DB-数据-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 

回答

0

如果DIH处理器正忙于一个请求,将忽略你发送给它任何额外要求。

所以,你必须检查你的关于如何/何时调用DIH,一些想法,做法:

  • ,你说你有很高的编辑频率,似乎并通过ID重新索引不是最好的东西,somethign时间基础似乎更具可扩展性。你可以添加一个'lastUpdated'列(当这个行被创建/更新时通过触发器填充),然后每X(1分钟,5分钟......任何你能负担得起)调用reindex。如果忽略一个请求,则不会丢失数据,应该重新索引的行将在下一个运行的增量上重新索引。
  • ,如果你想保留根据你的ID的方法,你需要:\
    • 等到前面的DIH请求发送之前一个新
    • 允许一定的缓冲,你可以不断加入IDS同时完成您等待
    • 允许多个ID在你二氢配置