如何在阿尔及利亚按时间搜索
How to search by duration in Algolia
假设我正在构建一个酒店预订平台,每个房间记录都有可用性日历。常见的搜索条件是按持续时间进行搜索。其中用户输入开始日期和结束日期,数据库获取在该时间段内未被占用的房间。
我实现了一个非常简单的方法,我将占用的天数存储为天数数组。
attribute :occupied_at_i do
array = []
if !occupied_at.empty?
occupied_at.each do |date|
array << Time.parse(date).to_i
end
end
array
end
然后在客户端,我添加以下javascript代码来交叉检查日期是否在numericRefinement
// Date Filters
$('.date-field')
.on('change', function() {
if(_.every(_.map($('.date-field'), function(date) {return _.isEmpty(date.value) }), function(n) {return n==false;})) {
helper.clearRefinements('occupied_at_i');
var arrayOfDates = addDateFilters();
_.forEach(arrayOfDates, function(n) {
helper.addNumericRefinement('occupied_at_i', '!=', n);
});
showClearAllFilters();
helper.search();
}
});
所以,这显然不是一个好方法,我想知道什么是更好的利用algolia和搜索的持续时间?
谢谢
希望这对其他人有所帮助(因为问题已经问了很久)
最好在服务器端进行过滤并呈现结果。这里的一种方法是将datetime
字段添加到房间模型作为start_date
和end_date
。因此,当用户输入开始日期和结束日期时,将根据该持续时间内的占用状态获取记录。一个简单的查询是这样的:
Room.where.not("start_date >= ? AND end_date <= ?", start_date, end_date)
另一个最佳解决方案是使用另一个模型来保存带有开始和结束日期时间字段的Room booking详细信息。通过这种方式,我们可以为一个特定的房间预订多个房间,并且它可以同时保存在房间预订集合中。因此,查询将变成:
Room.left_joins(:room_bookings).
where(
"room_bookings.start_date > ? OR
room_bookings.end_date < ?", end_date, start_date
)
相关文章:
- 用程序搜索JQuery数据表中的文本
- 在html Select中添加搜索
- Java脚本时间添加
- Ajax Live搜索发布到Laravel视图
- 谷歌放置API:按国家或餐馆名称搜索餐馆
- 学生搜索项目jquery/javascript
- Json数据包含日期和时间格式
- JavaScript 设置具有对数搜索时间的数据结构
- 增加在选择元素HTML中搜索的时间
- 如何定义搜索词框来搜索用户'使用Twitter流API和meter.js的特定时间线
- Javascript/jQuery使用正则表达式搜索“分钟:秒”时间
- 向下搜索时,将X轴类型从类别更改为日期时间
- JS搜索通过一个嵌套的JSON结构,深度增加随着时间的推移
- 需要做多个搜索在一个时间与开始字符这是在自动完成搜索
- 如何在阿尔及利亚按时间搜索
- 我如何添加时间延迟到咖啡脚本搜索
- 如何做人们搜索多个名称在Linkedin javascript API的时间
- elasticsearch全文搜索包含开始和结束时间的所有字段
- 用于搜索时间戳的Javascript
- UTC(弹性搜索)到 MomentJs 本地时间