【问题标题】:Best strategy to index document with Solr使用 Solr 索引文档的最佳策略
【发布时间】:2014-04-02 19:14:20
【问题描述】:

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

我在两种策略之间犹豫:

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

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

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

【问题讨论】:

  • 不一定是答案,而是分享我的经验:两个场景在实践中都有自己的用例,虽然 1) 可能不如 2) 频繁,但它不时发生,以重新索引架构/配置更改所需的所有内容。
  • 你是对的,当架构/配置发生变化时,我有时必须重新索引所有文档。但是,在我的情况下,如果我的数据不是最新的(15 分钟是正确的延迟),这并不重要。

标签: solr indexing document batch-processing


【解决方案1】:

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

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

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

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

所以你的问题的答案真的取决于你的要求是什么。

【讨论】:

  • 我仍然不知道索引所有文档需要多长时间,文档不是很大(大约10个简单字段),最多可以索引10k个文档,我可以忍受最多延迟 15 分钟。在您的情况下,如果您可以在 1 分钟内索引 100k 文档,我不应该担心我的 10k 文档。我不使用 xml 数据导入处理程序来索引文档,我使用更新命令使用 spring data solr(使用 Solrj)索引文档。如果我决定每 15 分钟导入一次所有文档,也许我应该使用数据导入处理程序格式进行索引(更好的性能)?
  • 数据导入处理程序很容易设置,但我不会说它有更好的性能。您应该首先尝试使用您现在拥有的任何索引器,看看索引所有文档需要多长时间。你不应该在知道之前尝试优化。
猜你喜欢
  • 2013-04-10
  • 1970-01-01
  • 2021-02-07
  • 1970-01-01
  • 2013-07-15
  • 1970-01-01
  • 2012-05-06
  • 2010-10-25
  • 1970-01-01
相关资源
最近更新 更多