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

将数据索引到AWS OpenSearch时的日期格式解析问题

Pandas数据导入AWS OpenSearch日期字段解析失败问题

报错信息

elasticsearch.helpers.errors.BulkIndexError: ('3 document(s) failed to index.', [{'index': {'_index': 'document', '_type': '_doc', '_id': '8db2e0ac6b659499cb0fd977a59bc3ce', 'status': 400, 'error': {'type': 'mapper_parsing_exception', 'reason': "failed to parse field [APPROVED_ON] of type [date] in document with id '8db2e0ac6b659499cb0fd977a59bc3ce'. Preview of field's value: '2020-07-06 08:05:00'", 'caused_by': {'type': 'illegal_argument_exception', 'reason': 'failed to parse date field [2020-07-06 08:05:00] with format [strict_date_optional_time||epoch_millis]', 'caused_by': {'type': 'date_time_parse_exception', 'reason': 'Failed to parse with all enclosed parsers'}}},

已尝试操作

尝试将APPROVED_ON字段转为字符串类型,但报错依旧:

data=data.astype({"APPROVED_ON": str})

数据结构信息

data.info()输出:

<class 'pandas.core.frame.DataFrame'>
Int64Index: 11740 entries, 0 to 11739
Data columns (total 17 columns):
 #   Column             Non-Null Count  Dtype  
---  ------             --------------  -----  
 0   ORDERS_NO          11740 non-null  object 
 1   SUBJECT            11740 non-null  object 
 2   ORG_FILENAME       11740 non-null  object 
 3   IS_LAB_REP         11740 non-null  float64
 4   DOC_PATH           11740 non-null  object 
 5   DM_FILENAME        11740 non-null  object 
 6   ORDERS_ID          11740 non-null  object 
 7   STATUS             11740 non-null  object 
 8   PROJECT_NO         11740 non-null  object 
 9   MODEL              11740 non-null  object 
 10  PQM_NO             560 non-null    object 
 11  REPORT_SENT_ON     11740 non-null  object 
 12  APPROVED_ON        11002 non-null  object 
 13  CONFIDENTIAL       11740 non-null  float64
 14  ORDER_DESCRIPTION  11740 non-null  object 
 15  TASK_DESCRIPTION   11737 non-null  object 
 16  TEXT_RESULT        5377 non-null   object 
dtypes: float64(2), object(15)
memory usage: 1.6+ MB

解决方案

方案1:调整OpenSearch索引的日期格式映射

问题核心是OpenSearch中APPROVED_ON字段被设为date类型,默认格式strict_date_optional_time||epoch_millis不支持空格分隔的yyyy-MM-dd HH:mm:ss格式(strict_date_optional_time要求用T分隔日期和时间,如2020-07-06T08:05:00)。

修改索引映射,添加兼容的日期格式:

PUT /document/_mapping
{
  "properties": {
    "APPROVED_ON": {
      "type": "date",
      "format": "strict_date_optional_time||epoch_millis||yyyy-MM-dd HH:mm:ss"
    }
  }
}

方案2:在Pandas中转换日期格式为OpenSearch兼容格式

将APPROVED_ON字段转为标准ISO格式的日期字符串:

import pandas as pd

# 先转为datetime类型,自动处理空值
data['APPROVED_ON'] = pd.to_datetime(data['APPROVED_ON'], errors='coerce')
# 转为ISO格式字符串(带T分隔符)
data['APPROVED_ON'] = data['APPROVED_ON'].dt.isoformat()
# 空值保留为None,OpenSearch会按null处理
data['APPROVED_ON'] = data['APPROVED_ON'].where(data['APPROVED_ON'].notna(), None)

方案3:强制将字段映射为字符串类型(不推荐)

如果不需要对该字段做日期相关查询,可修改索引映射将其设为keyword类型:

PUT /document/_mapping
{
  "properties": {
    "APPROVED_ON": {
      "type": "keyword"
    }
  }
}

注意:修改已有数据的索引映射时,需创建新索引重新导入数据,或使用reindex操作迁移数据。


内容的提问来源于stack exchange,提问作者Yafaa Ben Tili

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:48:14