Solr%100在优化期间写入可用性

时间:2011-02-24 07:48:11

标签: lucene solr

所以这就是我的困境......

我正在使用Solr运行实时搜索索引,每天索引大约6M文档。文件在大约7天后过期。所以每天,我都会添加6M文档,并删除6M文档。不幸的是,我需要经常运行“优化”,否则我将耗尽磁盘空间。

在“优化”期间,Solr继续为读取请求提供服务,但写入请求被阻止。我的所有写入都在队列后面,所以在操作上,一切都很好。但是,由于我的索引太大,“优化”大约需要一个小时,而在这个小时内,没有新的更新可用于读取。所以我的索引是实时的,除了我优化的每一小时。在此期间,看起来索引落后了长达一个小时。这不是最佳的。

我目前的解决方案是:将所有数据写入队列后面的两个Solr索引。每12小时交替“优化”两个索引。在索引1的“优化”期间,将所有读取流量指向索引2,反之亦然。这个基于时间的路由确实看起来非常脆弱和粗糙。

有更好的方法吗?

4 个答案:

答案 0 :(得分:4)

根据评论here和常见问题解答here,无需进行优化。不优化可能会最初增加索引大小,但不应该持续增加。我建议您禁用优化几天并监控索引大小。

答案 1 :(得分:1)

另一个基于时间的选项是为每天维护一个单独的索引,并每天写入所有索引。在这种情况下,您不需要执行删除操作,而是以先进先出(FIFO)方式旋转索引。

Index 1 = Day 1 + Day 2 + Day 3 + Day 4 + Day 5 + Day 6 + (no longer used)
Index 2 = empty + Day 2 + Day 3 + Day 4 + Day 5 + Day 6 + Day 7 + (no longer used)
Index 3 = empty + empty + Day 3 + Day 4 + Day 5 + Day 6 + Day 7 + Day 8
... 

你明白了。在第2天,索引1将完全停止使用,您将切换到使用索引2进行读取。

显然这是一个简单的例子,你想要旋转索引命名(索引2 变成索引1,依此类推),但希望这提供了另一种可能导致实现的方法

答案 2 :(得分:0)

您是否尝试使用不同的合并因子或不同的合并策略?如果你在不断写作,那可能是比优化更好的方法。

答案 3 :(得分:0)

使用复制。

写信给你的主人,复制给你的奴隶。优化将在您的主服务器上运行,并针对从服务器运行所有查询。