JForum 重建索引的一个愚蠢问题

红薯 发布于 2010/03/31 09:01
阅读 528
收藏 0

JForum 提供两种重建索引的方法,详细请看:重建 JForum 的 Lucene 索引的方法

但是,经过测试发现不管是用什么方法都存在一个愚蠢的问题(因为这两种方法用的是相同的代码)

假设,数据库中有10篇帖子,其中前两篇的 id 分别是 1 和 2,其余 8 篇 id > 200

那么你会发现,重建完索引后,索引库中只有两篇帖子,其他的 8 篇不翼而飞。why?

按 JForum 的方法,一般我们重建索引时需要指定一个帖子id的起始值和结束值,因为我们一般不知道这些id到底在一个什么范围内,因此我们会输入起始值1,最大值是很大的一个数,例如 99999999

而 JForum 是根据起始值开始,每次默认取 50 个帖子来生成索引,那么我们模拟 JForum 重建索引的过程就会看到下面的对应关系:

第一批: 1-51 , 获取两篇帖子
第二批:51-101,获取0篇帖子

因为数据库中不存在编号为 51-100的帖子,所以取第二批帖子时返回0个元素。但是接下来 JForum 就判断了,如果取回的帖子数为0,则退出索引重建过程。

因此id大于200的帖子就不会被索引到。

还好,每次取多少帖子这是可以配置的,在 SystemGlobals.properties 中的 lucene.indexer.db.fetch.count 项,你只要将它改为 200 或者更大,就可以解决这个问题。

但是!假设数据库中帖子的id间隔超过10万呢?难道我们要设置的配置超过10万吗?(这可能导致索引失败,因为内存溢出)

所以你只能用其他的方法来重建索引,或者去改改 JForum 重建索引的代码吧,代码在 LuceneReindexer 的 reindex 方法中。

加载中
返回顶部
顶部