1

私はHibernateSearchを使用しており、ドメインオブジェクトの1つのテーブルにLuceneインデックスを適用しています。ここで、このテーブルからドメインオブジェクトを選択し、インデックス付けされていない他のテーブルとの結合に基づいてフィルタリングを適用します。

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

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

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

これを行う方法を知っている人はいますか?

4

2 に答える 2

2

検索用のインデックスを作成するときにフィルタリングすることはお勧めしません。主な理由は、私が知る限り、Hibernate Searchでサポートされていないためですが、意味がないためでもあります。私の意見では、「子」オブジェクトとの関係を含め、検索するオブジェクトにインデックスを付ける必要があります。ActionLotオブジェクトはQuotesオブジェクトと1対多の関係にあると思います。注釈を使用する@IndexEmbeddedと、Quotesをオブジェクトとしてマークすることもできます。オブジェクトにもインデックスを付ける必要があります。引用符なしでActionLotsを検索する場合、検索クエリの制限を使用するか、検索にグローバルフィルタを適用することにより、検索中にこれをフィルタリングできます。これは、HibernateSearchが提供するフィルターオプションを使用して実行できます。

于 2009-12-02T12:01:02.793 に答える
1

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

-ハーディ

于 2009-12-03T11:02:09.340 に答える