【问题标题】:Elasticsearch sequential datesElasticsearch 连续日期
【发布时间】: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


【解决方案1】:

我不得不做类似的事情,我最终在索引期间每天都存储了酒店(房间)被预订的情况。 (所以是[2014-02-15、2014-02-16、2014-02-17等]的列表)

之后,编写查询以查找在特定日期范围内所有空闲的酒店房间是非常简单的。

似乎仍然应该有更优雅的解决方案,但这对我来说效果很好。

【讨论】:

  • 您能在这里写下您是如何进行搜索的,特别是您的搜索查询是什么样的吗?
【解决方案2】:

在我的项目中,我们的停留时间有限,所以我在映射中创建了一个对象,并指定了每个时间段的可用预订日期,例如:

  • 可入住 2 天的预订日期列表
  • 3 天住宿的可用预订日期列表
  • ....
  • 可入住 10 天的预订日期列表

【讨论】:

    猜你喜欢
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2010-12-10
    相关资源
    最近更新 更多