【问题标题】:Find Azure Search date without time part查找没有时间部分的 Azure 搜索日期
【发布时间】:2019-09-24 23:25:04
【问题描述】:

我找不到仅使用日期从 Azure 搜索中获取日期的方法。

索引中的日期类似于:“2019-10-15T18:00:00Z”、“2019-10-22T18:00:00Z”、“2019-10-29T18:00:00Z”

如果我尝试StartDate/any(s: s eq 2019-10-15T18:00:00Z) 我会得到结果 但是StartDate/any(s: s eq 2019-10-15) 什么都没有出现

我曾尝试使用 date OData 函数,如下所示:StartDate/any(s: date(s) eq 2019-10-15) 但我收到错误“不支持函数‘日期’”。

有什么方法可以在不使用时间部分的情况下获取日期?

【问题讨论】:

    标签: azure-cognitive-search


    【解决方案1】:

    从 api-version 2019-05-06-Preview 开始,将不再支持在 Azure 搜索的筛选器中使用日期文字。这是我们从未打算支持的“意外功能”。您没有得到任何结果的原因是因为从 Edm.DateEdm.DateTimeOffset 的隐式转换假定时间为 UTC 午夜,而索引中的日期是 UTC 下午 6 点。

    我们建议在过滤器中明确提供时间和偏移量(或 Z 表示 UTC)以避免此问题。

    如果您希望 Azure 搜索原生支持 Edm.Date 类型的字段和过滤器,请投票给 this User Voice suggestion

    【讨论】:

    • 但我也需要时代。下一个问题是“是否可以只搜索时间”?
    • 我很困惑。您是存储日期、时间还是两者都存储在一起?如果两者都在一起,也许您想要一个简单的范围过滤器?
    • 感谢您的回答,这实际上是解决方案。我遇到的时间问题完全不同。
    【解决方案2】:

    以 OData V4 格式表示的日期和时间值:yyyy-MM-ddTHH:mm:ss.fffZyyyy-MM-ddTHH:mm:ss.fff[+|-]HH:mmDateTimeOffset 字段的精度限制为毫秒。如果您上传 DateTimeOffset 精度为亚毫秒的值,则返回的值将四舍五入到毫秒。

    当您将带有时区信息的 DateTimeOffset 值上传到索引时,Azure 搜索会将这些值标准化为 UTC

    在 Azure 搜索中参考 supported data types

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-22
      • 2023-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-07
      • 2016-03-21
      • 1970-01-01
      相关资源
      最近更新 更多