0

Jboss アプリケーションでデータを検索するために Hibernate-search を使用しています。すべて BaseEntity クラスを拡張し、それぞれが Lucene によってインデックス付けされる 3 つの JPA エンティティ クラスがあります。例えば:

@MappedSuperclass
public abstract class BaseEntity implements Serializable {
    @Temporal(TemporalType.TIMESTAMP)
    private Date created;
    public abstract Long getId();
}

@Entity
@Table(name = "DVD")
public class Dvd extends BaseEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Field
    private String title;
}

@Entity
@Table(name = "BOOK")
public class Book extends BaseEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Field
    private String author;
}

ここで、ワイルドカード検索クエリで DVD タイトルまたは本の著者を検索し、結果リストをリストとして取得したいと考えています。これは私がこれまでに持っているものです:

public List<BaseEntity> search(String query, int firstResult, int maxResults) {
    List<BaseEntity> results = null;
    FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);
    Query luceneQuery = new WildcardQuery(new Term("*", "*" + query + "*"));
    FullTextQuery fullTextQuery = fullTextEntityManager.createFullTextQuery(luceneQuery, BaseEntity.class);
    fullTextQuery.setFirstResult(firstResult);
    fullTextQuery.setMaxResults(maxResults);
    results = fullTextQuery.getResultList();
    return results;
}

しかし、これでは結果が得られません。これを機能させるにはどうすればよいですか、またはエンティティごとに buildQueryBuilder を使用しない方法もありますか? ありがとう!

4

1 に答える 1

1

次のように、クラスに varargs-style メソッドを使用する必要があります。

FullTextQuery fullTextQuery = fullTextEntityManager.createFullTextQuery(luceneQuery, DVD.class, Book.class);

これは、Hibernate Search が検索クエリを作成するときに、クラス名をクエリに追加するためです (インデックス化されたクラスの名前である _hibernate_class フィールド用)。

于 2013-06-12T21:07:06.243 に答える