2014-08-28 220 views
0

我正在使用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; 
    ... 
} 
+0

只需使用crquery.addOrder(Order.desc( 「documentId」)); – user23123412 2014-08-28 07:58:39

回答