SOLR旅游网站:日期查询

时间:2012-02-02 18:52:54

标签: solr

我希望在酒店预订网站上实施SOLR。根据位置,酒店名称,设施搜索工作非常好,刻面也是如此。我无法弄清楚的是如何在Checkin和Checkout日期搜索酒店。

例如:用户将搜索搜索查询 - “Newyork的酒店”,并从日期选择框中选择CheckIn Date:2012年2月10日和CheckOut Date:2012年2月12日。

这就是我拥有数据的方式 -

Hotel_Name 10thFeb2012    11thFEB2012 ........   31DEC2012
Hotel1      2room            3room                  10rooms
Hotel2      1room            4room    ........      12rooms

现在,如果查询的是从入住日期10thFeb2012到11thFeb2012的3个房间的酒店2,它是shdnt匹配,因为10thFeb只有一个房间可用。 如果Hotel2的查询是从入住日期10thFeb2012到11thFeb2012的1个房间,那么它应该是搜索结果的一部分。

1 个答案:

答案 0 :(得分:1)

使用ISO 8601 format作为日期时间。

 Complete date plus hours, minutes, seconds and a decimal fraction of a second
 YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45Z)

您的数据库和Solr都将从符合该格式的字符串中了解日期时间。

所以,

  1. 使用兼容的日期时间格式将数据存储在DB和Solr中。 (在我的脑海中,Solr必须在日期时间附加Z,否则无效。
  2. 您的搜索界面必须格式化该格式的所有日期以查询solr。
  3. Solr可以使用日期来完成条件表达式,构面,范围桶刻面等。


    我会选择以下架构:

    hotel_name : string (for faceting)
    hotel_name_searchable : text (for searching, this is a copy field:look it up)
    room_id : string
    start_date : date (when the room is availabe)
    end_date : date (if not booked, set it to an infinite date, say 2040)
    

    对于您要跟踪的每个房间,请存储免费的日期 - 时间。 您可以在start_date和end_date之间搜索房间。

    hotel_name上进行分区,以便搜索房间“登记日期2012年10月10日至2012年11月12日”为您提供:

    Hotel1:[r1,r2,r3]
    Hotel2:[r8]
    Hotel3:[r2,r3,r4]
    

    通过hotel_name过滤到一家酒店,facet.mincount room_id可以返回拥有所需房间数的酒店。

    一点警告:我可能在刻面上有点生疏,因为我曾经在Solr结果上做了很多处理。