在elasticsearch中保存商店时间

时间:2017-03-20 05:56:59

标签: search elasticsearch

我有一种情况可以在弹性搜索中保存商店时间。例如,有一个商店有这样的时间

星期一:上午7点至下午2点,下午4点至晚上8点 星期二:上午7点至下午2点,下午4点至晚上8点 星期三:上午7点至下午2点,下午4点至晚上8点 星期四:上午7点至下午2点,下午4点至晚上8点 星期五:上午7点至下午2点,下午4点至晚上8点 星期六:上午7点至下午2点,下午4点至晚上8点 星期天:关闭

我必须保存这个时间并执行搜索,例如哪个商店开放或哪个商店关闭。

例如,如果用户在星期一上午7:04进行搜索,则商店的状态为 OPEN ,如果用户在下午2:10进行搜索,则商店的状态为 BREAK 如果用户在晚上9点搜索,则状态为已关闭
任何最好的方法如何找到商店的状态将有助于我。

1 个答案:

答案 0 :(得分:0)

您可以设计您的架构,如:

{
  "day":"Monday"
  "slots"  : [
        {
        "startTime":420, //7*60 // MINUTE_OF_DAY (7am)
        "endTime":840,//12 + 2 * 60 //(2 pm)
        "type":"OPEN"
      },
      {
        "startTime":960, //16*60
        "endTime":1200,//20 * 60
        "type":"OPEN"

      },
      {
        "startTime":840, //14*60
        "endTime":960,//16 * 60
        "type":"BREAK"

      },
      {
        "startTime":1200, //20*60
        "endTime":1440, //24*60
        "type":"CLOSED"

      },
      {
        "startTime":0
        "endTime":420,
        "type":"CLOSED"

      },
  ]
}

注意:广告位的类型为" nested"

现在,当您收到day = Monday和time = 7:10 am的查询时,请将上午7:10转换为分钟,即430 进行类似

的查询
where day=Monday AND slots.startTime < 430 AND slots.endTime>430

使用inner_hits找出符合条件的嵌套文档

希望,这有帮助