2012-04-15 1 views
1

私は現在のアプリケーションで検索可能なプラグインを取得しようとしていましたが、気になるものが1つあります:Grails - 検索可能なプラグイン:Luceneインデックスのみに依存しないようにすることはできますか?

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

これはいくつかの邪魔な問題につながります(例:http://jan-so.blogspot.mx/2009/04/eager-fetching-and-searchable-plugin-in.html)。基本的に、1対多の関係はすべて、検索結果にNULL値を持ちます。それを避けるためには、多くのことを行う必要があります。ドメイン検索可能ですが、それは私のデータベースの半分がLuceneインデックスにマップされることを意味します。

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

Luceneインデックスだけに頼るのを止めることはできますか?私はそれがインデックスを検索するが、インデックスは何を返していいですか。または、手動のHQLクエリを作成するのではなく、インデックス内のすべてを保持すること(そして検索可能な方法)は本当に便利ですか?

答えて

0

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

そのためには、プラグインを設定する必要があります。

grails install-searchable-config 

次に、それを開くdefaultMethodOptionsを見つけ、truereloadのparamを変更:最初の設定ファイルを作成します。このような何か:

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

今すぐ検索はDBからオブジェクトをリロードしますが、今、それはDBに接続する必要があるため、設定ファイルの状態として、検索が遅くなります。

1

ドメインクラスの定義でcomponentキーワードを使用して読んでおく必要があると思います。

はこちらをご覧ください:http://grails.org/Searchable+Plugin+-+Mapping+-+Compass+concepts#Searchable Component

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

+0

コンポーネントについては読んでいますが、ドキュメントに記載されているとわかりましたら"[...]検索可能なコンポーネントのデータは、所有オブジェクトの検索可能なデータ内に格納されます"。 Luceneインデックスを見ると、これが真であることを確認できます。インデックスにはコンポーネントのデータが格納されます。 – GalmWing

+0

つまり、インデックスには追加のクラスはありませんが、データが追加されているため_component_が大きいクラスは大きくなります。 – GalmWing

関連する問題