我正在使用Hibernate Search在數據庫表中的字段上應用全文搜索。 我使用它是這樣的:Hibernate搜索結果排序
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名最相關的或者排名最高的documentIds如上所述,但無法找到一個方法來做到這一點。有人請幫助我! 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」)); – user23123412 2014-08-28 07:58:39