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

使用Python SDK在Qdrant中过滤日期时间遇解析错误求解决

Qdrant日期过滤时datetime类型解析错误的解决方法

问题描述

使用Qdrant向量数据库的Python SDK按日期时间过滤数据时,触发解析错误:Qdrant期望接收数值类型输入,但实际传入了datetime对象。

简化代码如下:

from datetime import datetime
from qdrant_client import QdrantClient

# Qdrant客户端配置
qdrant_client = QdrantClient(...)

# 待过滤的日期时间对象
datetime_obj = datetime(2024, 2, 22, 10, 4, 28, 658690)

# 查询过滤条件
query = {
    "bool": {
        "filter": {
            "range": {
                "timestamp": {"gte": datetime_obj }
            }
        }
    }
}

# 执行查询
result = qdrant_client.query(query)

错误信息:
Input should be a valid number:

[type=float_type, input_value=datetime.datetime(2024, 2, 22, 10, 5, 46, 966824), input_type=datetime]

解决思路

Qdrant的range过滤器仅支持数值类型(整数、浮点数),无法直接识别datetime对象。核心解决方式是将datetime对象转换为时间戳数值,且需和存入Qdrant时的时间戳格式(秒级/毫秒级、整数/浮点数)保持一致。

具体解决步骤

  1. 将datetime对象转换为时间戳

    • 若存入数据时用秒级时间戳:
      timestamp = datetime_obj.timestamp()  # 返回浮点数,示例:1708591468.65869
      
    • 若存入时用毫秒级时间戳:
      timestamp = datetime_obj.timestamp() * 1000  # 返回浮点数,示例:1708591468658.69
      
    • 也可转换为整数形式:
      timestamp = int(datetime_obj.timestamp())  # 秒级整数,示例:1708591468
      
  2. 修改查询条件,传入时间戳数值
    修改后的完整代码:

from datetime import datetime
from qdrant_client import QdrantClient

qdrant_client = QdrantClient(...)

datetime_obj = datetime(2024, 2, 22, 10, 4, 28, 658690)

转换为秒级时间戳

timestamp = datetime_obj.timestamp()

query = {
"bool": {
"filter": {
"range": {
"timestamp": {"gte": timestamp }
}
}
}
}

result = qdrant_client.query(query)

3. **注意事项**
   - 必须保证过滤时的时间戳格式与**存入Qdrant时的格式完全一致**,否则过滤结果会不符合预期。
   - 若存入时是字符串格式的日期,建议先统一转换为时间戳后再存入;若坚持用字符串过滤,需注意字符串比较是字典序逻辑,可能不符合日期的先后顺序判断。

内容的提问来源于stack exchange,提问作者pankaj
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:42:38