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

Posted

技术标签:

【中文标题】在 Solr 中索引数据库表数据的最佳方法?【英文标题】:Best way to index database table data in Solr? 【发布时间】:2012-02-28 01:07:15 【问题描述】:

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

所以天真的方法是:

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

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

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

不过,也有一些优点:

对数据库只有一个请求 只有一个向 Solr 发出的 POST 请求

该方法不可扩展,我发现随着表的增长,内存需求和 POST 请求的大小也会随之增长。我可能需要获取n 的行数,处理它们,然后获取下一个n

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

(ps。我确实搜索了该网站,但没有找到任何与此类似的问题。)

谢谢。

【问题讨论】:

DataImportHandler ? 我读到过,但这不是直接的 column-to-indexField 映射,应用了一些转换,因此想在代码中执行此操作。 DIH 确实支持许多transformers。你也可以写custom transformers。如果可能,我会推荐使用 DIH - 我认为它需要最少的编码,并且比 POST 文档更快。 您的客户端平台是什么?爪哇? 【参考方案1】:

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

【讨论】:

【参考方案2】:

我使用了 nikhil500 的建议:

DIH 确实支持许多转换器。您还可以编写自定义转换器。如果可能的话,我会推荐使用 DIH——我认为它需要最少的编码,并且比 POST 文档更快。 – nikhil500 2 月 6 日 17:42

【讨论】:

【参考方案3】:

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

完美的做法是在提交之前分批上传 50 个。 50可能已经很低了。在进行提交之前,您可以上传多少个文档,有一些建议的限制。这取决于文档的大小。


但是,这是一次性操作,您可以使用被黑脚本进行监督。 后续操作会让您一次索引 100,000 行吗?或者您可以避免每次操作仅索引几百个更新的文档吗?

【讨论】:

以上是关于在 Solr 中索引数据库表数据的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用单个 solr 实例索引和搜索位于同一数据源中的两个不同表或 Solr 模板字段无法正常工作

为啥solr增量更新修改过的数据在solr中显示不出来了

Solr“实时”索引

如何自动从数据库中索引solr中的数据

solr最佳实践

在 datastax 图中使用 gremlin 访问 Solr 的最佳方法