[英]Celery Result type for ElasticSearch
我目前正在为自己的工作探索芹菜,并且正在尝试设置Elasticsearch后端。 有什么方法可以将结果值发送为字典/ JSON,而不是文本? 因此,Elasticsearch中的结果将正确显示,并且可以使用嵌套类型?
芹菜创建的自动映射
{
"celery" : {
"mappings" : {
"backend" : {
"properties" : {
"@timestamp" : {
"type" : "date"
},
"result" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
}
}
我尝试使用嵌套字段创建自己的映射,但是导致了elasticsearch.exceptions.RequestError: RequestError(400, 'mapper_parsing_exception', 'object mapping for [result] tried to parse field [result] as object, but found a concrete value')
更新
结果已经用JSON编码,并且在Elasticsearch包装器内部JSON字符串保存在字典中。 添加json.loads(result)
作为快速修复实际上有帮助。
快速修复后,出现了新的映射:
{
"celery" : {
"mappings" : {
"backend" : {
"properties" : {
"@timestamp" : {
"type" : "date"
},
"result" : {
"properties" : {
"date_done" : {
"type" : "date"
},
"result" : {
"type" : "long"
},
"status" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"task_id" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
}
}
}
}
有什么方法可以在Celery中禁用结果的序列化吗?
我可以为Elasticsearch添加一个带有解包JSON的pull-request,但这看起来像是一个hack。
从v4.0开始,默认的result_serializer
为json
,因此无论如何您都应以JSON格式获取结果。 也许您的配置使用其他内容? -在这种情况下,我建议您将其删除(如果使用Celery> = 4.0),则应该使用JSON格式的结果。 我更喜欢msgpack,但另一方面,我不对Celery结果使用ElasticSearch ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.