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'
    }
}

このクラスのインスタンスを取得すると、データベースに詳細インスタンスが存在する場合でも、詳細プロパティは常に null になります。私の結論は、詳細フィールドが Lucene インデックスに格納されていないということです。検索可能なクロージャーに以下を追加して、検索可能なプロパティにせずに、このフィールドをインデックスに追加しようとしました。

details index: 'no'

ただし、これは lastUpdated などの単純なプロパティに対してのみ有効なようです。インデックスから Foo のインスタンスを取得するときに、このプロパティが設定されていることを確認する方法はありますか? 理想的には、実際に詳細を検索可能なフィールドにせずにこれを行いたいですか?

4

3 に答える 3

1

それ自体が検索可能でないオブジェクトを取得することはできません。それがどのように機能するかです。なぜなら、Searchable プラグインを使用して実際に DB に触れていないからです。したがって、次の 2 つのオプションがあります。

  1. 「詳細」を検索可能にします (明らかにしたくないことです)。
  2. Refreshオブジェクト。問題は、リストのすべてのオブジェクトでrefresh()を呼び出す必要があることです。これは DB へのクエリを意味し、非効率的です。

現在、この問題に対する他の解決策はありません。

于 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
}

FooとbelongsTo関係を持つためにBookletRootDetailは必要ありません。

于 2011-01-18T23:28:41.630 に答える
0

あなたがやろうとしていることはできないと思います。BookletRootDetail に属している句 (つまり、親への参照) があると仮定すると、id にインデックスを付けて、Foo の id に対応する詳細の 2 番目の検索クエリを作成できます。

于 2009-12-11T00:34:10.260 に答える