我希望在酒店预订网站上实施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个房间,那么它应该是搜索结果的一部分。
答案 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都将从符合该格式的字符串中了解日期时间。
所以,
Z
,否则无效。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结果上做了很多处理。