在Solr中索引数据库表数据的最佳方法?

时间:2012-02-06 15:04:15

标签: database solr indexing batch-processing

目前我有一张约100,000行的表格。我想在Solr索引中索引此表中的数据。

所以天真的方法是:

  • 获取所有行
  • 对于每一行:转换为SolrDocument并将每个文档添加到请求
  • 转换完所有行后,发布请求

我能想到的这种方法的一些问题是:

  • 将太多数据(整个表格的内容)加载到内存中
  • 发布大请求

然而,一些优点:

  • 只有一个数据库请求
  • 只有一个对Solr的POST请求

这种方法不可扩展,我看到,因为随着表的增长,内存需求和POST请求的大小也会增加。我需要花费n个行,处理它们,然后选择下一个n

我想知道是否有人对如何最好地实施这个有任何建议?

(ps。我确实搜索过该网站,但我没有发现任何类似的问题。)

感谢。

3 个答案:

答案 0 :(得分:2)

如果要在一次POST所有文档和为每个文档执行一次POST之间取得平衡,可以使用队列来收集文档并运行一个单独的线程,一旦收集到足够的文档就会发送文档。这样您就可以管理内存与请求时间问题。

答案 1 :(得分:1)

我使用了nikhil500的建议:

  

DIH支持许多变形金刚。您也可以编写自定义变换器。如果可能的话,我会建议使用DIH - 我认为它需要最少量的编码,并且比POST文档更快。 - nikhil500 2月6日17:42

答案 2 :(得分:0)

我曾经不得不从DB上传~3000行(每个5个字段)到Solr。我分别上传了每个文件并做了一次提交。整个操作只用了几秒钟,但是一些上传(3000个中的8个)都失败了。

完美无缺的是在提交之前分批上传50个。 50可能一直很低。在进行提交之前,建议限制可以上载的文档数量。这取决于文件的大小。


但是,这是一次性操作,您可以使用黑客脚本进行监督。 后续操作会让您一次索引100,000行吗?或者,您是否可以在每次操作中仅为几百个更新文档编制索引?