2009-12-10 67 views
2

在我的Grails应用程序,我有被检索的插件索引以下域类:Grails的搜索插件

class Foo implements Serializable { 

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

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

当我获取这个类的实例,详细属性总是空,即使有是数据库中的详细实例。我的结论是细节字段没有被存储在Lucene索引中。我尝试添加该字段的索引,而不通过添加以下可搜索的封闭使其可搜索的属性:

details index: 'no' 

但是看来这是仅适用于简单的属性,如LASTUPDATED。有没有什么办法可以确保当我从索引中检索Foo的实例时该属性被填充?理想情况下,我想这样做,但实际上并未将细节设置为可搜索字段?

+0

唐,吉恩的答案是否正确?我也在考虑这一点,我想知道你站在这里。 – 2010-06-17 17:50:18

回答

0

我不认为你可以做你想做的事情。假设BookletRootDetail有一个belongsTo子句(即引用返回父级),您可以索引该id,并创建第二个搜索查询以查找与Foo ID相对应的详细信息。

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有与富贵一个属于关联关系。

1

那么,你不能检索一个本身不可搜索的对象,这就是它的工作原理,因为你没有真正用可搜索插件触摸数据库。所以你有两个选择:

  1. 使'细节'搜索(显然你不想)。
  2. Refresh的对象。问题是您必须在列表的每个对象上调用refresh(),这意味着对数据库的查询,效率不高。

现在,这个问题没有其他解决方案。