2010-10-29 101 views
6

我的应用程序正在使用Grails可搜索的插件,下面使用CompassGrails搜索插件

开始索引的表大约为36   MB,并且正在构建大约350个MB的索引。这在大多数人们的书中很小。

如果我们删除索引并启动Grails应用程序,那么索引文件将按照预期进行重建,但在运行大约一天后,我们会发现此错误。我们在TellMeEntity实例上调用“reindex”,因为它们已保存,以确保索引已更新。

异常org.compass.core.engine.SearchEngineException:无法删除别名[TellMeEntity]和IDS [[存储/未压缩的,索引omitNorms,omitTf]];嵌套的异常是org.compass.core.lucene.engine.transaction.readcommitted.ReadCommittedTransaction(doDelete)中的java.io.FileNotFoundException:/ var/www/web17/log/mne/index/tellmeentity/segments_2(没有这样的文件或目录) :348)

很明显,一旦这个错误命中,索引不会更新,并且搜索不会对新输入的数据起作用。

我们检查了磁盘空间等简单的东西。'segments_2'不存在,但我希望Compass自己创建它。

grails-app/conf/Searchable.groovy文件:

....

mirrorChanges = true 
    bulkIndexOnStartup = "fork" 

....

在我的代码:

....

def formInstance = new TellMeEntity(name:'form',dataOwner:session.community,createBy:session.zoner,tellMeSite:form).save() 
formInstance.reindex() 

....

我目前的经验是,这段代码在24小时内运行良好,但随后开始出现问题。我们每天产生大约3000个新条目,这听起来不像高音量,所以我不认为它与音量有关。

如何解决这个问题?

+0

在你的代码中你在哪里重新索引?我怀疑有一个.lock文件创建并导致你的问题。更多的代码会有帮助。 – 2010-10-29 12:22:35

+0

代码已更新。 – user304217 2010-10-29 15:18:45

+1

已添加代码段。我也在考虑不使用默认的本地文件索引,而是使用JDBCDirectory将缓存存储在数据库中。 – user304217 2010-10-29 15:25:28

回答

0

从臀部拍摄:是您的索引位置/ var/www/web17/log/mne受到一些日志文件旋转过程的影响,通过错误尝试旋转索引文件? 24小时看起来像一些基于cron的工作正在干扰这里。