【问题标题】:Hibernate Search Results OrderingHibernate 搜索结果排序
【发布时间】:2014-08-28 07:12:54
【问题描述】:

我正在使用 Hibernate Search 在我的数据库表中的字段上应用全文搜索。 我是这样使用它的:

FullTextSession fts=Search.createFullTextSession(session);
QueryBuilder qb2 = fts.getSearchFactory().buildQueryBuilder()
                   .forEntity(DocumentVersion.class).get();
org.apache.lucene.search.Query searchQuery2 = qb2.keyword()
                                              .onField("content")
                                              .matching(search)
                                              .createQuery();

FullTextQuery fullTextQuery2 = fts.createFullTextQuery(searchQuery2,DocumentVersion.class);
fullTextQuery2.setMaxResults(100);
List res=fullTextQuery2 .list();

最后一行是根据与查询的相关性排列的 DocumentVersion 对象。 但是当我使用标准只获取 DocumentVersion中最相关的前100个documentId字段时,它总是返回按升序排列的documentId,这表明它不是照顾相关性或排名

代码如下:

FullTextSession fts=Search.createFullTextSession(session);
QueryBuilder qb2 =fts.getSearchFactory().buildQueryBuilder().forEntity(DocumentVersion.class).get();
    org.apache.lucene.search.Query searchQuery2 = qb2.keyword()
            .onField("content")
            .matching(search)
            .createQuery();

FullTextQuery fullTextQuery2 = fts.createFullTextQuery(searchQuery2, DocumentVersion.class);
org.hibernate.Criteria crquery = session.createCriteria(DocumentVersion.class);
crquery.setProjection(Projections.property("documentId"));
crquery.setMaxResults(100);
fullTextQuery2.setCriteriaQuery(crquery);
List res=crquery.list();

如上所述,我已经在 Google 上进行了很多搜索,以找到一种方法来选择前 100 个最相关或排名最高的 documentId,但找不到这样做的方法。有人请帮帮我! DocumentVersion 类是这样的:

@Entity
@Indexed
@Table(name = "t_document_version")
public class DocumentVersion {

  private long id;
  private long documentId;

  @Field(index=Index.TOKENIZED, store=Store.NO, name="content")
  private String content;
  private Timestamp tstamp;
   ...
}

【问题讨论】:

  • 只需使用 crquery.addOrder(Order.desc("documentId"));

标签: java hibernate hibernate-criteria hibernate-search


【解决方案1】:

您不能将 Hibernate Search 查询与 Hibernate ORM Criteria 查询 (org.hibernate.Criteria) 混合使用。通过 ORM Criteria 查询仅支持设置 fetch 样式。如果您想使用 Hibernate Search Projection,请查看 http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#projections

你必须这样做:

fullTextQuery2.setProjection("documentId");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多