Elasticsearch顺序日期

时间:2014-02-04 11:12:05

标签: elasticsearch

我正在使用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"
            }
        }
    }
}

我目前正在使用日期范围来选择可用日期,然后使用字段查询来匹配城市 - 其他字段将在以后使用

2 个答案:

答案 0 :(得分:1)

我不得不做类似的事情,我最终每天都会在索引时预订酒店(房间)。 (所以[2014-02-15,2014-02-16,2014-02-17等]的清单

在那之后,写一个查询以查找在特定日期范围内免费的所有酒店房间是一件小事。

似乎仍然应该有优雅的解决方案,但这最终对我有用。

答案 1 :(得分:0)

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

  • 2天的预订日期列表
  • 3天的预订日期列表
  • ....
  • 10天的预订日期列表