高级搜索使用Hibernate搜索

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

  • 预订ID
  • 乘客姓名
  • 乘客年龄
  • 从位置
  • 到位置
  • 预订状态
  • 航空公司名称
  • 和13个这样的领域。

    我试图弄清楚是否

  • Hibernate搜索可以并且应该在这里使用? 如果是这样,怎么样? 我无法找到使用Hibernate Search进行如此复杂搜索的示例。

  • 不用Hibernate搜索,我可以简单地使用Hibernate,也可以设计一个多线程搜索,具体取决于参数的数量。 这是个好主意吗?

  • 在这里可以使用Hibernate Filters吗?

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


    对于这类查询,我通常使用带有表单对象的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查询可能足以在这些许多领域进行搜索。

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

    你也可以在后面的阶段介绍Hibernate Search。

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


    是的,在这种情况下,Hibernate Search将会非常有用。 你可以使用过滤器,但Hibernate Search也有过滤器。

    链接地址: http://www.djcxy.com/p/59137.html

    上一篇: Advanced Search Using Hibernate Search

    下一篇: FedEx api for shipping