2つのエンティティがあり、第1のエンティティは第2のエンティティに参照されます。アクセス方法Hibernate Lucene Searchを使用してエンティティの外部キーのソートフィールド名を検索しますか?
エンティティ1:
@Indexed
public abstract class Yesh implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "ID")
private Long id;
@Fields({ @Field(index = Index.YES, store = Store.NO), @Field(name = "YeshName_for_sort", index = Index.YES, analyzer = @Analyzer(definition = "customanalyzer")) })
@Column(name = "NAME", length = 100)
private String name;
public Yesh() {
}
public Yesh (Long id) {
this.id = id;
}
public Yesh (Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "com.Prac.Yesh[ id=" + id + " ]";
}
}
エンティティ2:
public class Kash implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "ID")
private Long id;
@IndexedEmbedded
@ManyToOne
Yesh yes; //Contain reference to first entity
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Yesh getYes() {
return yes;
}
public void setId(Yesh yes) {
this.yes = yes;
}
}
参照Yeshでエンティティ2には注釈がありません。エンティティ1は、 "YeshName_for_sort"という名前で注釈が付けられたフィールドを有する。
メインクラス:私は、次の例で与えられるフィールドの上にアクセスしようとする。しかし
FullTextEntityManager ftem = Search.getFullTextEntityManager(factory.createEntityManager());
QueryBuilder qb = ftem.getSearchFactory().buildQueryBuilder().forEntity(Kash.class).get();
org.apache.lucene.search.Query query = qb.all().getQuery();
FullTextQuery fullTextQuery = ftem.createFullTextQuery(query, Kash.class);
//fullTextQuery.setSort(new Sort(new SortField("YeshName_for_sort", SortField.STRING, true)));
The above statement is not working and i have also tried to replace YeshName_for_sort with 'yes' reference but it is not working.
fullTextQuery.setFirstResult(0).setMaxResults(150);
int size = fullTextQuery.getResultSize();
List<Yesh> result = fullTextQuery.getResultList();
for (Yeshuser : result) {
logger.info("Yesh Name:" + user.getName());
}
ソートは動作しません。私はまた、のようなステートメントを変更しようとしました:
ftem.createFullTextQuery(query, Kash.class, Yesh.class); //added entity 1
または
fullTextQuery.setSort(new Sort(new SortField("yes.name", SortField.STRING, true))); // Added property name for Yesh yes;
が、それは動作しません。
エンティティで実装する必要がある注釈や、ソートのためにフィールドにアクセスするためのメインプログラムの変更はありますか?
ありがとうございます。論理的に見える。最初のエンティティ(Yesh)が抽象的であるため、抽象クラスはインデックス文書を挿入できません "";それが働いていない理由。私はKashの索引を付けましたが、同じ問題です。それを解決する方法を探しています。そこにいくつかの文書があります。あなたが提案を持っている場合は、共有してください – fatherazrael
抽象クラスに@ Indexedを追加することはできません。各子クラスに@ Indexedを定義する必要があります。つまり、Hibernate Searchは多態性をサポートしているので、抽象クラスを検索することができます。 –
ありがとうございます。それをしました。私はルークを使用し、インデックスをチェックし、あなたが言及したように "yes.YeshName_for_sort"としてそれを格納していることがわかりました。私は抽象的なエンティティを索引付けしていませんが、それでもソートされた結果を表示していません "アナライザ= @Analyzer(定義=" customanalyzer "))"抽象クラスで動作しません。それをもっと見る。 – fatherazrael