【发布时间】: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