2015-12-31 35 views
0

我正在使用hibernate搜索4.4.2使用lucene进行全文搜索。请参阅下面的方法,在这里我添加排序标准的日期字段并添加到全文检索查询休眠搜索4.4.2按日期排序不起作用

方法进行全文搜索

public List<TransactionDetails> getRechargeListBySearch(int start,int range,String searchinput,User user){ 
    Session session = CommonUtil.getSession(sessionFactory); 
    FullTextSession fullTextSession = Search.getFullTextSession(session); 
    Transaction tx = fullTextSession.beginTransaction(); 
    QueryBuilder qb = fullTextSession.getSearchFactory() 
     .buildQueryBuilder().forEntity(TransactionDetails.class).get(); 
    org.apache.lucene.search.Query query = null; 
    if(user.getUserType().equals("R")) 
    query = qb.bool(). 
      should(qb.keyword().onField("userId").matching(user.getUserId().toString()).createQuery()) 
      .should(qb.keyword().onField("user.distrId").matching(user.getDistrId()).createQuery()) 
      .must(qb.keyword().onFields("custMobNo", "user.name", "user.orgName","rechargeAmt","createdDate") 
      .matching(searchinput).createQuery()) 
      .createQuery(); 
    else if(user.getUserType().equals("D")) 
     query = qb.bool(). 
     should(qb.keyword().onField("user.distrId").matching(user.getUserId().toString()).createQuery()) 
     .must(qb.keyword().onFields("custMobNo", "user.name", "user.orgName","rechargeAmt") 
     .matching(searchinput).createQuery()) 
     .createQuery(); 
    // Adding sort criteria by createdDate desc 
    Criteria c = session.createCriteria(TransactionDetails.class).addOrder(Order.desc("createdDate")); 
    org.hibernate.Query hibQuery = 
     fullTextSession.createFullTextQuery(query).setCriteriaQuery(c); 
    hibQuery.setFirstResult(start); 
    hibQuery.setMaxResults(range); 
    // execute search 
    List<TransactionDetails> result = (List<TransactionDetails>) hibQuery.list(); 
    tx.commit(); 
    session.close(); 
    return result; 
} 

Hibernate的实体类 - TransactionDetails

@Entity 
@Table(name="mr_transaction_tbl") 
@Indexed 
public class TransactionDetails { 

    @DocumentId 
    @Id @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name="TransID") 
    private Long transID; 


    @Column(name="MsgTransID",insertable=false,updatable=false) 
    private Long msgTransID; 

    @Field(index= Index.YES,analyze=Analyze.YES,store=Store.NO) 
    @Column(name="UserID") 
    private Long userId; 

    @Field(index= Index.YES,analyze=Analyze.YES,store=Store.NO) 
    @Column(name="CustMobNo") 
    private String custMobNo; 

    @Column(name="ServPdr") 
    private String servPdr; 

    @Field(index= Index.YES,analyze=Analyze.YES,store=Store.NO) 
    @Column(name="RechargeAmt") 
    private BigDecimal rechargeAmt; 

    @Column(name="MarsReferences") 
    private String marsReferences; 

    @Column(name="CreatedDate",insertable=false,updatable=false) 
    private Date createdDate; 

    @Column(name="Status") 
    private String status; 

    @OneToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER) 
    @JoinColumn(name="MsgTransID",insertable=true,updatable=true,nullable=false,unique=true) 
    private TransactionMsg transactionMsg; 

    @IndexedEmbedded 
    @OneToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER) 
    @JoinColumn(name="UserID",insertable=false,updatable=false) 
    private User user; 

搜索结果的降序排列的排序不会发生。我感谢你的帮助。

回答

2

,而不是新增Criteria的,你需要使用SortField

org.hibernate.search.FullTextQuery query = s.createFullTextQuery(query, Book.class); 
org.apache.lucene.search.Sort sort = new Sort(
new SortField("title", SortField.STRING)); 
query.setSort(sort); 
List results = query.list(); 

documentation在这里。

+0

非常感谢。有效。 – Keerthivasan