私のGrailsアプリは、検索機能を提供するためにCompassとLuceneに基づいて構築された検索可能なプラグインを使用しています。著者と本という2つの検索可能なクラスがあります。これらのクラスを検索インデックスにマップしたので、特定のフィールドのみを検索できます。
両方のクラスで検索を実行するには、単に呼び出します
def results = searchableService.search(query)
両方のクラスを同時に検索することの優れた機能の1つは、results
含まれる結果の数、使用可能な結果の数、ページネーションの詳細などに関するメタデータがオブジェクトに含まれることです。
最近、Bookクラスにブールapproved
フラグを追加しましたが、未承認の本を検索結果に表示したくありません。1つのオプションは、上記の呼び出しを次のように置き換えることです。
def bookResults = Book.search(query + " approved:1")
def authorResults = Author.search(query)
ただし、ここで、両方の結果のメタデータを組み合わせる方法を理解する必要があります。これは、注意が必要な場合があります(特にページネーション)。
単一のクエリで本と著者を検索する方法はありますが、承認された本のみを返しますか?