質問

Hibernate Search を使用し、ドメイン オブジェクトの 1 つのテーブルに Lucene インデックスを適用しました。このテーブルからドメイン オブジェクトを選択し、インデックスが作成されていない他のテーブルとの結合に基づいてフィルタリングを適用したいと考えています。

たとえば、インデックスを作成した Auction Lots テーブルがあります。そして、Quotesテーブルがあります。見積書にはオークションロットへの参照が含まれています。

AuctionLots テーブルで完全なテスト検索を実行し、引用符のない一致したエンティティを返したいと考えています。通常の SQL では、これは JOIN によって実現されます。

しかし、HibernateSearch の状況では、ドメイン オブジェクトを取得するために完全なテスト検索を行う必要がありますが、JOIN によるフィルタリングを実行する方法がわかりません。

これを行う方法を知っている団体はありますか?

役に立ちましたか?

解決

検索のためのインデックスを作成するときに

私はフィルタリングをお勧めしません。それは私が知っている限りのHibernate Searchがサポートされていますが、されていない主な理由もそれは意味がありませんので。あなたは私の意見では何をすべきか、インデックスが「子」オブジェクトへの関係を含めて検索するオブジェクトです。 私はあなたのActionLotオブジェクトは、あなたの引用のオブジェクトへの1対多の関係を持っていると仮定します。 @IndexEmbeddedアノテーションで、あなたにもインデックスを作成する必要があるオブジェクトとして、あなたの引用をマークすることができます。 あなたが引用符なしActionLotsを検索すると、あなたは、またはあなたの検索にグローバルフィルタを適用することにより、検索クエリ内のいずれかの制限を使用して、検索の際に、これをフィルタリングすることができます。これはフィルタオプションを使用して行うことができますする Hibernateは検索によって提供さています。

他のヒント

@IndexEmbedded または ClassBridge を使用するのが間違いなく正しいアプローチです。また、データを変更しても問題は発生しません。それが自動インデックス作成の目的です。Quoteが変更されるたびにすべてのデータのインデックスを再作成する必要はありません。自動インデックス作成に依存すると、追加/更新されたデータのみが再インデックス付けされます。注意として、関連する引用が変更されたときに ActionLot インスタンスのインデックスが更新されるようにしたい場合は、双方向のリレーションシップを確立し、 @ConstainedIn を使用する必要があります。

--ハーディ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top