我一直在努力让可搜索的插件与我当前的应用程序一起使用,但有一件事困扰着我:
每次搜索都只依赖于Lucene索引。
这会导致一些令人不安的问题(如:http://jan-so.blogspot.mx/2009/04/eager-fetching-and-searchable-plugin-in.html)。基本上,每个一对多关系在搜索结果中都将具有空值。为了避免这种情况,你必须让很多域名可搜索,但是,这意味着我的数据库的一半将被映射到Lucene索引......这听起来不对。
我目前处于开发环境中,因此所有内容都被加载到内存中,Lucene使java使用至少40%的内存(总共使用了1.2GB,并且我已经限制了包含在内的内容尽可能使用only
和exclude
)。
那么,我可以阻止它仅仅依靠Lucene索引吗?我希望它搜索索引,但不要只返回索引的内容。或者将所有内容保存在索引中(从而以可搜索的方式)而不是进行手动HQL查询是否真的很方便?
答案 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]
]
现在搜索将从数据库重新加载对象,但是,正如配置文件所述,搜索将变慢,因为现在它需要连接到数据库。