使用休眠搜索进行高级搜索



在我的一个应用程序中,我要对多个字段/列执行搜索。它是一个高级搜索,有超过20个字段可供用户搜索结果。例如,用户可以根据

  1. 预订编号
  2. 乘客姓名
  3. 乘客年龄
  4. 从位置
  5. 到位置
  6. 预订状态
  7. 航空公司名称

和 13 个这样的字段。

我试图弄清楚是否

  1. 休眠搜索可以而且应该在这里使用吗?如果是这样,如何?我找不到使用Hibernate搜索进行如此复杂搜索的示例。

  2. 代替Hibernate搜索
  3. ,我可以简单地使用Hibernate,并可能根据参数的数量设计一个多线程搜索。这是个好主意吗?

  4. 是否可以在此处使用休眠过滤器?

有人可以提供输入或参考链接吗?

对于这些类型的查询,我通常将Criteria查询与表单对象一起使用。 然后,我检查每个传递的表单字段中的null,如果不null,则使用该字段在查询中添加另一个Restriction。 使用 Criteria 查询可使 Java 代码保持非常干净,并消除混乱的字符串连接。 您的案例示例:

// Form object
public class bookingSearchForm {
    private String bookingId;
    public getBookingId()...
    public setBookingId()...
}
// Hibernate
Criteria criteria = getSession().createCriteria(Booking.class);
if(form.getBookingId() != null) {
    criteria.add(Restrictions.eq("bookingId", form.getBookingId()));
}
criteria.list();
我认为

您的决定应该基于对容量的要求。普通的休眠查询可能足以搜索这些字段。

如果您想使用反向索引快速获取大量数据的搜索查询,Hibernate 搜索会有所帮助。例如,您应该做的是使用您在未来 5 年内预期的容量加载您的数据库。如果你的普通Hibernate查询被认为是可以接受的,我认为你应该坚持使用普通的Hibernate查询。

您也可以在稍后阶段引入休眠搜索。

编辑:您可以选择不使用Hibernte Search,而是转到较低级别并使用Apache Lucene。您可以生成自己的Apache Lucene索引。这样,您就不必担心要查找记录的字段,因为您可以完全控制标记化和索引过程。如果选择这种方式,则可以将行名和列名存储为搜索结果的一部分。

是的,在这种情况下,Hibernate搜索将非常有用。您可以使用过滤器,但休眠搜索也有过滤器。

最新更新