Elasticsearch无法解析来自pymongo的datetime字段作为对象

马田

我试图用流无论从MongoDB中到Elasticsearch数据pymongo和Python客户端elasticsearch

我已经设置了映射,我在这里报告与感兴趣的领域有关的代码段:

“ updated_at”:{“ type”:“ date”,“ format”:“ dateOptionalTime”}

我的脚本使用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 [无法解析[updated_at]];嵌套:ElasticsearchIllegalArgumentException [未知属性[$ date]];')

我相信问题的根源在于pymongo将字段updated_at序列化为datetime.datetime对象,正如我所看到的是否在for循环中打印文档:

u'updated_at':datetime.datetime(2014,8,31,17,18,13,17000)

这与Elasticsearch寻找映射中指定的类型为date的对象发生冲突

任何想法如何解决这个问题?

贾巴拉

我想您的问题是您正在使用

body=json.dumps(doc, default=json_util.default)

但是你应该使用

body=doc

这样做对我来说是可行的,因为似乎Elasticsearch正在将字典别名化为JSON文档(当然,假设doc是字典,我猜是这样)。

至少在我使用的(2.x)版本的Elasticsearch中,datetime.datetime是正确的别名,不需要映射。例如,这对我有用:

doc = {"updated_on": datetime.now(timezone.utc)}
res = es.index(index=es_index, doc_type='my_type',
               id=1, body=doc)

并被Kibana确认为日期。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Elasticsearch'[bool]无法解析字段[filter]'

使用 Elasticsearch 过滤来自嵌套对象的多个字段

如何修复Elasticsearch中的“无法解析日期字段”错误

无法解析符号“来自”

Elasticsearch对象映射,试图将字段[null]解析为对象,但发现了具体值

PyMongo基于字段值查找json对象

来自对象字段的Python字典

解析来自javascript对象的值

Elasticsearch 无法解析主机

无法解析 DateTime::__construct()

来自字段的ParseQuery无法保存

Django 文件上传,无法使用来自实例对象的表单添加文件字段

解析作为 json 对象的列

来自Mongo的ElasticSearch河弄乱了字段映射

无法解析来自 Python 套接字的 JSON(不是嵌套的 JSON)对象

Pymongo无法为设置的参数编码对象

ElasticSearch总结嵌套对象字段

ElasticSearch:查询是对象数组的字段

geojson 到 Elasticsearch:无法解析 [geo_shape] 类型的字段 [geometry.coordinates]

尝试调用Elasticsearch客户端时,以JSON fromat作为输入参数的Elasticsearch模板查询无法在节点js中解析

无法解析JSON对象

无法解析javascript对象

使用对象作为CoreData对象字段类型

Elasticsearch Java API:[eventDefinitions]的对象映射尝试将字段[null]解析为对象,但找到了具体的价值?

ElasticSearch使字段无法从Java搜索

Elasticsearch 7:无法解析日期

Elasticsearch 无法解析 [时间戳]

使用pymongo将对象列表作为不同的Mongo文档插入

Xamarin Forms 无法解析 DateTime