You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure AI Search中筛选去年同月及更早的DateTimeOffset字段数据?

问题:Azure AI Search筛选去年同月及更早的文档

索引定义(简化)

id: String
title: String
posted_at: DateTimeOffset

需求

需要筛选发布时间为去年同月及更早的文档,例如当前为2024年5月时,需获取2023年5月、2022年5月等时间发布的文档。

遇到的问题

尝试使用OData的month()函数时,Azure AI Search不支持该函数,报错:

azure.core.exceptions.HttpResponseError: () Invalid expression: Function 'month' is not supported.

解决方案(Python SDK实现)

由于Azure AI Search不支持month()这类日期函数,可通过计算目标日期阈值,直接用日期比较来实现需求:

  • 先计算当前日期的去年同月的第一天,筛选posted_at小于等于这个阈值的文档。比如当前是2024年5月,目标阈值就是2023年5月1日00:00:00,所有发布时间≤这个时间的文档都符合要求。
  • 若需要更精确的时间匹配(比如当前时刻的去年同月同一时间),可调整阈值计算逻辑,保留时分秒信息。

Python代码示例:

from azure.core.credentials import AzureKeyCredential
from azure.search.documents import SearchClient
from datetime import datetime

# 初始化SearchClient
service_endpoint = "你的搜索服务端点"
index_name = "你的索引名称"
key = "你的搜索密钥"
client = SearchClient(service_endpoint, index_name, AzureKeyCredential(key))

# 计算目标日期阈值:去年同月的第一天
now = datetime.now()
threshold_date = datetime(now.year - 1, now.month, 1)
# 转换为Azure AI Search支持的DateTimeOffset格式(带Z标识的ISO字符串)
threshold_str = threshold_date.isoformat() + "Z"

# 构建筛选条件
filter_expr = f"posted_at le '{threshold_str}'"

# 执行搜索
results = client.search(search_text="*", filter=filter_expr)

# 遍历输出结果
for result in results:
    print(f"ID: {result['id']}, 标题: {result['title']}, 发布时间: {result['posted_at']}")

补充说明

如果要匹配当前时刻的去年同月同一时间,可修改阈值计算逻辑:

# 保留时分秒的精确阈值
threshold_date = datetime(now.year - 1, now.month, now.day, now.hour, now.minute, now.second)

内容的提问来源于stack exchange,提问作者pez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 10:12:05