2017-07-05 10 views
0

を経由して、私は休止状態では、次の2つのクラスを持っているし、検索注釈を休止:休止検索:子供の店舗一覧や検索投影

親クラス:

@Indexed 
@Entity 
public class Parent { 
    @Id 
    @Column(name="parent_id") 
    private Long id; 

    @Field(store = Store.YES) 
    private String name; 

    @IndexedEmbedded 
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "parent", targetEntity = Child.class) 
    private List<Child> childList; 

    //getters and setters 
} 

子供クラス:

@Entity 
public class Child { 
    @Id 
    private Long id; 

    @ManyToOne(targetEntity = Parent.class) 
    @ContainedIn 
    @JoinColumn(name = "parent_id") 
    private Parent parent; 

    @Field(store = Store.YES) 
    private String name; 
} 

上記のシナリオのインデックスを作成しました。今私は、特定の親の名前を検索して、すべての子の名前を取得しようとしています。

次のように私はフィールド上の突起を使用:私は、検索結果を取得するためにクエリを実行しようとすると

Query searchQuery = queryBuilder.keyword().onField("name").matching("test").createQuery(); 
FullTextQuery fullTextQuery = fullTextEntityManager.createFullTextQuery(searchQuery, Parent.class); 
fullTextQuery.setProjection("childList.name"); 

は今、私は親モデルの唯一の最初の子の名前を取得しています。

ルークを使ってインデックスを見ると、ドキュメントのすべての値を見ることができます。

インデックスに格納されているすべての子名のリストを取得するにはどうすればよいですか?

+0

可能な重複[休止状態のLucene検索と投影を使用する方法](https://stackoverflow.com/questions/43370523/how-to-use-projections-with-hibernate-lucene-search) –

答えて

0

この例では、「回り」を必要とするモデルがあります。

あなたの目標はリスト子どもの名前を照会することで、Childエンティティを検索する必要があります。

各子には「親の名前」を含めることができますが、それについてのクエリは制限されています。

@Entity @Indexed 
public class Child { 
... 


Query searchQuery = queryBuilder.keyword().onField("parent.name").matching("test").createQuery(); 
FullTextQuery fullTextQuery = fullTextEntityManager.createFullTextQuery(searchQuery, Child.class); 
fullTextQuery.setProjection("name"); 
関連する問題