1

さて、検索可能なプラグインを現在のアプリで動作させようとしてきましたが、気になることが 1 つあります。

すべての検索は、Lucene インデックスのみに依存します。

そして、それはいくつかの厄介な問題につながります (次のように: http://jan-so.blogspot.mx/2009/04/eager-fetching-and-searchable-plugin-in.html )。基本的に、すべての 1 対多の関係は、検索結果に null 値が含まれます。それを避けるには、多くのドメインを検索可能にする必要がありますが、それは私のデータベースの半分が Lucene インデックスにマッピングされることを意味します...そしてそれは間違っているように聞こえます.

私は現在開発環境にいるので、すべてがメモリにロードされ、Lucene は Java で少なくとも 40% 多くのメモリを使用するようにします (合計で 1.2GB が使用されます。onlyおよびexclude)。

では、Lucene インデックスだけに依存するのを止めることはできますか? インデックスを検索したいのですが、インデックスにあるものだけを返す必要はありません。それとも、手動で HQL クエリを作成するよりも、すべてをインデックスに保持する (したがって、検索可能な方法で行う) 方が本当に便利ですか?

4

2 に答える 2

1

componentドメインクラス定義でのキーワードの使用について理解する必要があると思います。

ここを参照してください:http://grails.org/Searchable+Plugin+-+Mapping+-+Compass+concepts#Searchable Component

このようにして、非常に多くの追加クラスでインデックスを汚染することなく、ドメインモデルからの関連情報を含めることができます。

于 2012-04-20T14:33:06.243 に答える
0

答えは次のとおりです。はい、インデックスに追加しなくても、オブジェクトのすべての情報を取得できます。

そのためには、プラグインを構成する必要があります。まず、構成ファイルを作成します。

grails install-searchable-config

次に、それを開き、を見つけて、パラメータをにdefaultMethodOptions変更します。このようなもの:reloadtrue

defaultMethodOptions = [
    search: [reload: true, escape: false, offset: 0, max: 10, defaultOperator: "and"],
    suggestQuery: [userFriendly: true]
]

これで、検索によってDBからオブジェクトが再ロードされますが、構成ファイルに示されているように、DBに接続する必要があるため、検索が遅くなります。

于 2012-10-22T01:38:17.217 に答える