2013-03-20 24 views
0

我们不时重新编制整个数据库的索引。它通常需要几个小时。但是只有最新的才会出现在首页。所以我在想,如果我将数据库向后重新编制索引,即首先将记录重新编入'id desc'顺序,我可以减少很多服务器的停机时间。先驯服最新的唱片可以吗?

但是,从性能的角度来看,这会好吗?它是否会对搜索时间产生负面影响?

+0

你正在做一个完整的索引或增量索引? – 2013-03-20 16:07:09

+0

我们做完整的索引 – lulalala 2013-03-20 16:15:16

回答

1

为什么你有宕机?

如果你提交的最终只有你只是将显示只记录在最后,当你做了承诺(和顺序并不重要)。

如果您正在使用maxDocs/maxTime设置(Solr 4+)进行软提交并从最新记录重新索引,那么您几乎可以立即看到这些记录,其他人将最终显示出来。

我会推荐阅读一下提交语义,看看是否会使事情更清晰。

+0

停机时间我的意思是什么都不能显示的时间。所以你说在向后重新分解时不会有任何性能问题? – lulalala 2013-04-25 02:42:13

+0

什么时候“没有”显示?如果我理解了你的场景,你会在提交之前显示*旧*记录。没什么'。无论如何,仔细看看软提交。它应该与您的需求非常接近。 – 2013-04-25 14:58:13

+0

没有显示,因为旧的过期项目隐藏在我的网站逻辑的索引页面中。完全重新索引是在主要更新期间完成的,因此solf-commits是无关紧要的。我会将此标记为答案,因为您认为稍后对查询不会有任何性能影响。 – lulalala 2013-04-26 02:59:07

2

既然你说你正在做一个全面的重新指数,我会建议索引在不同的核心,并进行交换。 This answer提供了一些有关如何实现此目的的参考。

在我们的设置,我们有一个主/从安装程序,其中索引发生在法师和指数复制到奴隶。从属服务于搜索请求。从性能的角度来看,这样做效果很好。

您可能想要考虑的另一件事 - 尝试了解您的索引时间为什么要花费几个小时。在我们的例子中,我们意识到DataImportHandler中的嵌套查询是导致n + 1 jdbc连接的罪魁祸首。我们通过创建视图对其进行了优化,索引时间从3小时缩短到不到2分钟!

+0

主/从确实是处理它的正确方法,但目前对我们来说是不可能的。 – lulalala 2013-03-21 01:38:17

+2

你不需要严格的主/从。核心交换也可以在单个实例中完成。 [文档](http://wiki.apache.org/solr/CoreAdmin#SWAP)为您提供了一个可以执行此操作的命令。 – 2013-03-21 01:41:20