1

A、B、C の 3 つのドメインがあります。

A と C は B を介して多対多の関係にあります。A と C は検索可能です。

Aドメインのリストを検索して取得すると、Aのすべてのフィールドにアクセスできますが、関係フィールドは常に「null」です。リレーショナル フィールドにアクセスできないのはなぜですか? なぜ「null」になるのですか? オブジェクトに直接アクセスするとリレーションが表示されますが、searchable が A ドメインを返すと、リレーション フィールドで「null」が返されます。

PS: B を検索可能にしようとしましたが、多対多の関係のみのために存在するため、B のインデックス作成に何の意味もありません。

助けが必要です。検索可能なリターンで A 経由で C に到達できる必要があります。

ありがとうございました。

【追記】本日プロトタイププロジェクト(小規模DB)を作成し、ドメインBを検索可能にしました。これでリレーショナル フィールドにアクセスできます。ただし、実際のプロジェクトでは、データベースが大きく、インデックス作成に時間がかかりすぎるため、 B を検索可能にしたくありません。それを回避する方法はありますか?

4

2 に答える 2

2

結果リストのすべてのインスタンスを再フラッシュするか、検索メソッドにreload:trueプロパティを使用できます

searchableService.search(query,[reload:true]) 

オプションの完全なリストを見つけることができます: http://grails.org/Searchable+Plugin+-+Methods+-+search

reload - true の場合、データベースからオブジェクトをリロードし、それらを Hibernate セッションにアタッチします。それ以外の場合、オブジェクトはインデックスから再構築されます。デフォルトは false

于 2014-02-19T18:56:18.800 に答える
0

わかりました、私は私の問題を解決したと信じています。同様の質問への最初のチェックアウト リンク: Grails 検索可能プラグイン-- GalmWing にクレジットを与えてください。

私の解決策は次のとおりです。私は独自のコントローラーを実装しており、次のコードは検索可能なサービス呼び出しを実装しています。

    if (params.q) {
        try{
            def searchResults = searchableService.search(params.q, params)


            searchResults.results.each {
                it.refresh()
            }

            return [carInstanceList:searchResults.results, carInstanceTotal:searchResults.total]
        } catch (SearchEngineQueryParseException ex) {
            return [parseException: true]
        }

ご覧のとおり、ドメイン「A」の各項目で更新を行うループがあります。更新すると、すべてのリンクを含む DB から実際のレコードが取得されます。リストを GSP に返すと、「A」ドメインに関連付けられたすべての「C」ドメインが抽出されます。

この方法ではパフォーマンスが低下する可能性がありますが、私の場合、検索可能は実際には「B」ドメインにインデックスを付けることができず、しばらく動作していてクラッシュするため、少なくとも今のところ、別の選択肢はありません.

于 2012-12-23T04:12:50.933 に答える