簡體   English   中英

Grails可搜索插件

[英]Grails searchable plugin

在我的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實例,details屬性也始終為null。 我的結論是,細節字段未存儲在Lucene索引中。 我嘗試通過將以下內容添加到可搜索閉包中來將此字段添加到索引中而不使其成為可搜索屬性:

details index: 'no'

但是,這似乎僅對簡單屬性(如lastUpdated)有效。 從索引中檢索Foo實例時,有什么方法可以確保填充此屬性? 理想情況下,我想在不將詳細信息實際變為可搜索字段的情況下執行此操作?

好吧,您無法檢索本身不可搜索的對象,這就是它的工作原理,因為您實際上並沒有使用Searchable插件接觸數據庫。 因此,您有兩種選擇:

  1. 使“詳細信息”可搜索(顯然您不想這樣做)。
  2. Refresh對象。 問題是您必須在列表的每個對象上調用refresh() ,這暗示着對數據庫的查詢,效率低下。

目前,沒有其他解決方案可以解決此問題。

我認為您無法做自己想做的事情。 假設BookletRootDetail有一個belongsTo子句(即返回父對象的引用),則可以為該ID編制索引,並針對與Foo的ID相對應的詳細信息進行第二次搜索查詢。

您需要確保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關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM