【发布时间】:2015-05-12 16:13:47
【问题描述】:
我正在使用 Elasticsearch 创建一个酒店预订系统,并试图找到一种方法来返回在一系列日期中具有可变数量可用连续日期(例如 7 天)的酒店
我目前正在将日期和价格作为子文档存储到酒店,但不确定如何进行搜索,或者是否可以使用我当前的设置进行搜索?
编辑:添加映射
酒店地图
{
"hotel":{
"properties":{
"city":{
"type":"string"
},
"hotelid":{
"type":"long"
},
"lat":{
"type":"double"
},
"long":{
"type":"double"
},
"name":{
"type":"multi_field",
"fields":{
"name":{
"type":"string"
},
"name.exact":{
"type":"string",
"index":"not_analyzed",
"omit_norms":true,
"index_options":"docs",
"include_in_all":false
}
}
},
"star":{
"type":"double"
}
}
}
}
日期映射
{
"dates": {
"_parent": {
"type": "hotel"
},
"_routing": {
"required": true
},
"properties": {
"date": {
"type": "date",
"format": "dateOptionalTime"
},
"price": {
"type": "double"
}
}
}
}
我目前正在使用日期范围来选择可用日期,然后使用字段查询来匹配城市 - 稍后将使用其他字段
【问题讨论】:
-
我建议提供您想要实现的实际文档和具体示例。会让这个问题更容易回答。
-
你能发布至少一个文件来源吗?
-
我已经添加了酒店(父)和日期(子)文档的映射 - 对格式很抱歉,我似乎无法缩进..
-
我在几分钟前看到了你的问题,swleighton,但找不到如何联系你,所以我决定对这个问题发表评论。这是一个答案:stackoverflow.com/questions/21566334/… 如果您想要一些效率较低但更容易想到的东西,您可以在排序数组上运行此函数:
-
function findStartOfLowestNConsecutiveElements(array, N) { var low = 0; var i; for (i = 0; i < array.length; i++) { if (i - low === N) { return array.slice(low, low + N); } if (array[i] !== array[i - 1] + 1) { low = i; } } if (i - low === N) { return array.slice(low, low + N); } }
标签: elasticsearch