Grails 可搜索插件

Posted

技术标签:

【中文标题】Grails 可搜索插件【英文标题】:Grails searchable plugin 【发布时间】:2011-05-02 07:24:15 【问题描述】:

我的应用程序正在使用,在下面使用Compass。

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

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

异常 org.compass.core.engine.SearchEngineException: 无法删除别名 [TellMeEntity] 和 ids [[stored/uncompressed,indexed,omitNorms,omitTf]];嵌套异常是 java.io.FileNotFoundException: /var/www/web17/log/mne/index/tellmeentity/segments_2 (No such file or directory) at org.compass.core.lucene.engine.transaction.readcommitted.ReadCommittedTransaction(doDelete :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 个新条目,这听起来并不高,所以我认为这与数量无关。

如何解决这个问题?

【问题讨论】:

您在代码中的哪个位置重新编制索引?我怀疑某处创建了一个 .lock 文件并导致您的问题。更多代码会有所帮助。 已添加代码段。我也在考虑不使用默认的本地文件索引,而是使用 JDBCDirectory 将缓存存储在数据库中。 为什么在对象保存后立即调用reindex?当对象被保存时,它应该被自动索引。 在配置中,自动索引已被关闭,因为它不能始终如一地工作,但显式调用它确实会导致索引发生。 我建议你看看 ElasticSearch。它由 Compass 开发者开发,是 Compass 的未来。它还有一个 grails 插件。 kimchy.org/the_future_of_compass 【参考方案1】:

从臀部射击:您的索引位置 /var/www/web17/log/mne 是否受到某些日志文件旋转过程的影响,该过程会错误地尝试旋转索引文件? 24 小时似乎有一些基于 cron 的工作在这里干扰。

【讨论】:

以上是关于Grails 可搜索插件的主要内容,如果未能解决你的问题,请参考以下文章

在 Grails 2.2 中覆盖插件视图

弹性搜索 hibernate 和 mongodb 域类 - Grails

扩展 Grails 插件的功能

Grails 插件中的自定义 CSS 和 JS

Grails hibernate/Searchable 通过给出以下异常来停止服务器启动

使用 Grails 创建 Google 登录