Solr“实时”索引

Posted

技术标签:

【中文标题】Solr“实时”索引【英文标题】:Solr "real time" indexing 【发布时间】:2011-10-24 02:02:48 【问题描述】:

我知道有几个与此类似的问题,但它们并没有为手头的问题提供简单的答案。抱歉,如果您觉得这是重复的,但我认为清晰易懂的答案将使许多人受益。那么问题来了。

Solr 索引更新可以自动化吗?如果可以,最好的方法是什么?

这里有一个简单的用例来澄清这个问题:我有一个数据库表,其中包含几列不同类型的数据。有一个用于管理数据的网络应用程序。我有单独的 Solr 服务器来索引上述表中的指定列。我怎样才能达到这样的结果:当用户在所述表中添加、删除或修改数据时,Solr 会注意到更改并修改索引。

它必须是“实时的”。这意味着几秒钟后就会发生变化。当然,如果数据量大,它可以更多。

提前致谢

【问题讨论】:

【参考方案1】:

您可能想看看 Apache Solr 3.3 和 RankingAlgorithm 1.2。它支持 NRT (Near Real Time Indexing) 并且可以更新 10,000 文档/秒。您可以在更新期间同时搜索。您不需要提交或关闭搜索器。您可以从此处获取有关使用 Solr 3.3 和 RankingAlgorithm 的 NRT 的更多信息:

http://solr-ra.tgels.org/wiki/en/Near_Real_Time_Search_ver_3.x

【讨论】:

【参考方案2】:

这里有两个问题:

Solr 索引更新可以自动化吗?

是的,它们可以,而且它们应该始终是自动化的。您不想为每次更改手动启动索引过程。

它必须是“实时的”。

我已经提到了一些方法来减少更改数据和更新索引 in this answer 之间的延迟。您可以使用autoCommit 确保您的数据在更新后的 x 秒内提交。根据时间间隔,您可能希望减少自动升温并调整其他设置,请参阅this 了解更多详细信息。

也请关注NRT wiki page,了解相关信息和解决方案。

【讨论】:

感谢您提供明确的答案和指向更多资源的链接。我将深入研究这些信息,看看如何在我的场景中实现它。 我还有一个关于“实时”部分的问题。在您的第一个链接中,您指出 ORM 和类似功能可用于触发索引。我为此使用 Solr API,因此它似乎是最佳选择。基本上 data-config.xml 定义了我来自 db 的表数据是一个文档,每一行都是一个实体。我可以在实体级别对索引执行更新吗?我记得只能在文档级别阅读它。 @frustrated:我认为你不能混合使用 DIH 和 ORM 事件。

以上是关于Solr“实时”索引的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Flume准实时建立Solr的全文索引

Flume+Morphline+Solr+Hue实时索引调试及问题定位

在HBase之上的solr中创建索引

如何使用 Solr 进行实时搜索

solr 近实时搜索

和我一起打造个简单搜索之Logstash实时同步建立索引