Grails - 可搜索的插件:我可以阻止它依赖Lucene索引吗?

时间:2012-04-15 19:23:50

标签: grails searchable searchable-plugin

我一直在努力让可搜索的插件与我当前的应用程序一起使用,但有一件事困扰着我:

每次搜索都只依赖于Lucene索引。

这会导致一些令人不安的问题(如:http://jan-so.blogspot.mx/2009/04/eager-fetching-and-searchable-plugin-in.html)。基本上,每个一对多关系在搜索结果中都将具有空值。为了避免这种情况,你必须让很多域名可搜索,但是,这意味着我的数据库的一半将被映射到Lucene索引......这听起来不对。

我目前处于开发环境中,因此所有内容都被加载到内存中,Lucene使java使用至少40%的内存(总共使用了1.2GB,并且我已经限制了包含在内的内容尽可能使用onlyexclude)。

那么,我可以阻止它仅仅依靠Lucene索引吗?我希望它搜索索引,但不要只返回索引的内容。或者将所有内容保存在索引中(从而以可搜索的方式)而不是进行手动HQL查询是否真的很方便?

2 个答案:

答案 0 :(得分:1)

我认为您需要阅读在域类定义中使用component关键字。

见这里:http://grails.org/Searchable+Plugin+-+Mapping+-+Compass+concepts#Searchable Component

通过这种方式,您可以包含域模型中的相关信息,而不会使用如此多的其他类来污染索引。

答案 1 :(得分:0)

答案是:是的,您可以检索对象的所有信息,而无需将其添加到索引中。

为此您需要配置插件。首先创建配置文件:

grails install-searchable-config

然后打开它,找到defaultMethodOptions并将reload参数更改为true。像这样:

defaultMethodOptions = [
    search: [reload: true, escape: false, offset: 0, max: 10, defaultOperator: "and"],
    suggestQuery: [userFriendly: true]
]

现在搜索将从数据库重新加载对象,但是,正如配置文件所述,搜索将变慢,因为现在它需要连接到数据库。