2

在我的 Grails 应用程序中,我有以下由 Searchable 插件索引的域类:

class Foo implements Serializable {

    BookletCategory bookletCategory
    Date lastUpdated
    static hasMany = [details: BookletRootDetail]

    static searchable = {
        bookletCategory component: true
        id name: 'bookletRootId'
        lastUpdated index: 'no'
    }
}

当我检索此类的实例时,详细信息属性始终为空,即使数据库中有详细信息实例。我的结论是 details 字段没有存储在 Lucene 索引中。我尝试通过将以下内容添加到可搜索闭包中,将此字段添加到索引而不使其成为可搜索属性:

details index: 'no'

然而,这似乎只对简单的属性有效,例如 lastUpdated。当我从索引中检索 Foo 的实例时,有什么方法可以确保填充此属性?理想情况下,我想在不实际将详细信息设为可搜索字段的情况下执行此操作?

4

3 回答 3

1

好吧,您无法检索本身不可搜索的对象,这就是它的工作原理,因为您并没有真正使用 Searchable 插件接触数据库。所以你有两个选择:

  1. 使“详细信息”可搜索(显然您不想这样做)。
  2. Refresh对象。问题是您必须在列表的每个对象上调用refresh() ,这意味着对数据库的查询,效率低下。

目前,这个问题没有其他解决方案。

于 2012-09-09T22:35:33.103 回答
0

您需要确保 BookletRootDetail 是可搜索的,然后在 Foo 中将其作为可搜索组件。

就像是:

class Foo implements Serializable {

    BookletCategory bookletCategory
    Date lastUpdated
    static hasMany = [details: BookletRootDetail]

    static searchable = {
        bookletCategory component: true
        id name: 'bookletRootId'
        lastUpdated index: 'no'
        details component: true
    }
}

然后

class BookletRootDetail {
  static searchable = true
}

您不需要 BookletRootDetail 与 Foo 建立 belongsTo 关系。

于 2011-01-18T23:28:41.630 回答
0

我不认为你可以做你想做的事。假设BookletRootDetail 有一个belongsTo 子句(即引用回父项),您可以索引该id,并为对应于Foo 的id 的详细信息进行第二次搜索查询。

于 2009-12-11T00:34:10.260 回答