如何在elasticsearch中过滤时间频率?

utugiqy6  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(364)

考虑一下下面的情况,我有两个菜单-汉堡和比萨饼,如下所示-

item  | Week day |startTime(UTC)| end Time(UTC)
----------------------------------------
Burger | Sunday   | 8:00         |  11:00
Burger | Monday   | 7:00         |  11:00
Burger | Tuesday  | 7:00         |  11:00
Pizza  | Sunday   | 8:00         |  11:00
Pizza  | Monday   | 7:00         |  11:00
Pizza  | Tuesday  | 7:00         |  11:00

我在时区(gmt+4)有三个分支b1、b2、b3,在时区(gmt+6)有两个分支b4、b5。考虑到所有分支中都有所有项目。如何存储上述数据并在ElasticSearch中进行查询,以便根据用户时区获取当前时间内具有分支的可用项?

oogrdqng

oogrdqng1#

你可以组合一组时间范围 must 他是顶级的 should 像这样:

{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "range": {
                  "startTime": {
                    "time_zone": "+04:00",
                    "gte": "08:00:00"
                  }
                }
              },
              {
                "range": {
                  "endTime": {
                    "time_zone": "+04:00",
                    "lte": "11:00:00"
                  }
                }
              }
            ]
          }
        },
        {
          "bool": {
            "must": [
              {
                "range": {
                  "startTime": {
                    "time_zone": "+06:00",
                    "gte": "08:00:00"
                  }
                }
              },
              {
                "range": {
                  "endTime": {
                    "time_zone": "+06:00",
                    "lte": "11:00:00"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}

不过,要注意,存储时间范围就像没有日期的开放时间(所以 time 而不是 datetime )很可能会导致误解。例如,这里讨论的解决开放时间问题有更好的方法。

相关问题