0

ご挨拶

私のドメインモデルは次のとおりです

class Species {
 private String name;
 ..
 ..
 List<Family> families;
}

class Family{
 private String name;
 private String locusId;
 ..
 List<Member> members; 
}

class Members{
 private String name;
 private String repTranscript;

}

「Hibernate Search」を使用して次のようなクエリを実行したい

org.hibernate.lucene.search.Query luceneQuery = parser.parse( "name:ASpeciesName or name:AGroupName or locudID:someLocusID" );
    org.hibernate.Query fullTextQuery = fullTextSession.createFullTextQuery( luceneQuery );
List result = fullTextQuery.list();

3 つのクラスはすべて同じフィールド「name」を持っているので、すべてのクラスを再検索するのでしょうか?

「結果」にはすべてのタイプのオブジェクトがありますか?

4

2 に答える 2

2

また、索引付けの方法にも依存します。各クラスに個別にインデックスを付け (つまり、各クラスに @Indexed アノテーションがあることを意味します)、FullTextQuery の作成時に予想されるクラス タイプを指定しないと、実際には混合クラスが結果に含まれます。

ただし、この例では、属性familyおよびmembersで @IndexedEmbedded を使用することを検討してください。この場合、Luceneドキュメント内のフィールド名は、 familys.nameおよびfamilys.members.nameになります。

Hibernate Search のオンライン ドキュメントと組み込みインデックス機能を参照してください。

――ハーディー

于 2009-12-26T16:41:20.950 に答える
2

論理的には、そうです。クエリのどこにも、必要なオブジェクトのタイプを指定していないからです。

結果を特定の型に制限したい場合は、それらの型を vararg リストとして渡す必要があります:

fullTextSession.createFullTextQuery( luceneQuery, A.class, B.class );

これはdocsで説明されています。

于 2009-12-25T09:02:25.847 に答える