2012-04-15 55 views
1

嗯,我一直在试图让我的当前应用程序可搜索插件,但有一件事困扰我:Grails - 可搜索插件:我可以阻止它仅依赖于Lucene索引吗?

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

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

我目前处于开发环境,所以所有东西都加载到内存中,Lucene使得Java使用至少40%以上的内存(总共使用了1.2GB,并且我限制了其中包含的内容尽可能用onlyexclude)。

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

回答

0

那么答案是:是的,你可以检索一个对象的所有信息,而不必将其添加到索引。

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

grails install-searchable-config 

然后打开它,找到defaultMethodOptions并更改reload参数去true。事情是这样的:

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

现在搜索将重新从数据库中的对象,但是,作为配置文件的状态,因为现在它需要连接到数据库的搜索将变得更慢。

1

我认为您需要详细了解在域类定义中使用component关键字。

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

这样你可以包括你的域模型的相关信息,而不会有这么多的其他类污染指数。

+0

我阅读了关于组件的内容,但是如果你注意到文档说的话。 “[...]可搜索组件的数据存储在拥有对象自己的可搜索数据中”。看看Lucene索引,你可以确认这是真的,索引是用组件的数据填充的。 – GalmWing 2012-04-20 21:16:30

+0

这意味着索引不会获得额外的类,但具有_component_的类会变得更大,因为数据会附加到它。 – GalmWing 2012-04-20 21:19:41