首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate搜索结果排序

Hibernate搜索结果排序
EN

Stack Overflow用户
提问于 2014-08-28 07:12:54
回答 1查看 269关注 0票数 0

我使用Hibernate搜索将全文搜索应用于数据库表中的一个字段。我就是这样用的:

代码语言:javascript
复制
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最相关的documentId字段时,总是返回按升序排列的documentId,这表明它没有考虑相关性或排名。

这方面的代码是:

代码语言:javascript
复制
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();

正如上面所解释的那样,我已经搜索了很多搜索方法来选择前100名最相关或排名最高的documentIds,但无法找到这样做的方法。有人请救救我!DocumentVersion类如下所示:

代码语言:javascript
复制
@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;
   ...
}
EN

回答 1

Stack Overflow用户

发布于 2014-08-28 12:36:46

您不能将Hibernate搜索查询与Hibernate ORM标准查询(org.hibernate.Criteria)混合使用。通过ORM标准查询,只支持设置提取样式。如果您想使用Hibernate搜索投影,请查看single/#projections

你必须这样做:

代码语言:javascript
复制
fullTextQuery2.setProjection("documentId");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25542825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档