solr - 使用 Solr 索引文档的最佳策略

标签 solr indexing document batch-processing

我正在使用 Solr 版本 4(api spring data solr 来索引、获取...文档),我必须决定应用哪种策略来索引我的文档。

我在两种策略之间犹豫:

  1. 定期启动批处理以索引所有文档

  2. 仅在文档发生更改时才索引该文档

哪种策略最好?也许是混合??或其他.. 我对每种方法的优缺点都有一些想法,但我对 solr 没有丰富的经验。

最佳答案

取决于为所有文档建立索引需要多长时间以及您希望索引更新的时间。

我们有几个 Solr 核心 - 有些核心有不到 100K 的非常小的文档,并且通过数据导入处理程序(optimize=true)的完全导入运行时间不到 1 分钟。我们可以容忍最多 15 分钟的延迟,因此我们每 15 分钟对此核心运行一次完整导入。

另一个极端是核心,有数百万个文档,每个文档的大小都相当大,完整的索引需要几个小时才能完成。对于这样的核心,我们在 MySQL 中有一个更改日志表,它仅记录更改的文档,并且我们每隔几分钟仅对这些文档进行增量索引。

最后,中间有一些核心,拥有大约 500K 大小合适的文档,但在这些核心上,我们需要每 5 到 10 分钟对某些字段进行原子更新,并每隔几分钟对某些文档进行完整文档更新。我们为这些进行增量进口。完整索引本身需要大约 1.5 到 2 小时来运行,我们每晚都会这样做。

因此,您问题的答案实际上取决于您的要求。

关于solr - 使用 Solr 索引文档的最佳策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22117971/

相关文章:

lucene - Solr/Lucene 记分员

full-text-search - 在 Solr 中,如何针对一个字段查询多值字段中不同的一组值

java - 如何查找 elasticsearch 6.2.1 中存在的索引?

mysql - 在非常大的 MySQL 分析表中 - 我应该索引时间戳吗?

sorting - CouchDB - 按位置对文档进行排序

search - Solr 仅在邻近搜索中突出显示术语

mysql - Apache solr + mysql 连接

java - 在什么条件下对 lucene 索引(指南针)进行 I/O 操作(移动/替换)是安全的

xcode - 恢复文件文档基础应用程序

ios - 获取多个 ids 文档 firestore