gpt4 book ai didi

java - Hibernate 搜索 4.4.2 按日期排序不起作用

转载 作者:行者123 更新时间:2023-12-02 04:04:08 41 4
gpt4 key购买 nike

我正在使用 hibernate search 4.4.2 和 lucene 进行全文搜索。请参阅下面的方法,我在其中添加日期字段的排序条件并添加到全文搜索查询

执行全文搜索的方法

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;

搜索结果不会按降序排序。我感谢您的所有帮助。

最佳答案

您不需要添加新的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在这里。

关于java - Hibernate 搜索 4.4.2 按日期排序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34542637/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com