【问题标题】:Grails - Searchable plugin: Can I stop it from relying just on Lucene index?Grails - 可搜索插件:我可以阻止它仅依赖 Lucene 索引吗?
【发布时间】:2012-04-15 19:23:49
【问题描述】:

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

每次搜索都完全依赖于 Lucene 索引。

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

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

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

【问题讨论】:

    标签: grails searchable searchable-plugin


    【解决方案1】:

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

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

    通过这种方式,您可以包含域模型中的相关信息,而不会因过多的附加类而污染索引。

    【讨论】:

    • 我阅读了有关组件的信息,但是如果您注意到文档中说。 “[...] 可搜索组件的数据存储在拥有对象自己的可搜索数据中”。通过查看 Lucene 索引,您可以确认这是真的,索引中填充了来自组件的数据。
    • 这意味着索引没有额外的类,但是有一个组件的类变得更大,因为数据被附加到它上面。
    【解决方案2】:

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

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

    grails install-searchable-config
    

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-05-02
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多