【发布时间】:2015-07-28 13:54:13
【问题描述】:
我正在尝试使用 pymongo 和 Python 客户端 elasticsearch 将数据从 mongoDB 流式传输到 Elasticsearch。
我已经设置了一个映射,我这里报出感兴趣的领域相关的sn-p:
"updated_at": { “类型”:“日期”, “格式”:“日期可选时间” }
我的脚本使用 pymongo 从 MongoDB 中抓取每个文档,并尝试将其索引到 Elasticsearch 中
from elasticsearch import Elasticsearch
from pymongo import MongoClient
mongo_client = MongoClient('localhost', 27017)
es_client = Elasticsearch(hosts=[{"host": "localhost", "port": 9200}])
db = mongo_client['my_db']
collection = db['my_collection']
for doc in collection.find():
es_client.index(
index='index_name',
doc_type='my_type',
id=str(doc['_id']),
body=json.dumps(doc, default=json_util.default)
)
我在运行它时遇到的问题是:
elasticsearch.exceptions.RequestError: TransportError(400, u'MapperParsingException[failed to parse [updated_at]]; 嵌套: ElasticsearchIllegalArgumentException[unknown property [$date]]; ')
我认为问题的根源在于 pymongo 将字段 updated_at 序列化为 datetime.datetime 对象,如果我在 for 循环中打印文档,我可以看到:
u'updated_at': datetime.datetime(2014, 8, 31, 17, 18, 13, 17000)
这与 Elasticsearch 寻找映射中指定的 date 类型的对象相冲突。
有什么办法解决这个问题吗?
【问题讨论】:
标签: python mongodb elasticsearch pymongo