繁体   English   中英

ElasticSearch的Celery结果类型

[英]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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

更新了Kibana视图: 在此处输入图片说明

有什么方法可以在Celery中禁用结果的序列化吗?

我可以为Elasticsearch添加一个带有解包JSON的pull-request,但这看起来像是一个hack。

从v4.0开始,默认的result_serializerjson ,因此无论如何您都应以JSON格式获取结果。 也许您的配置使用其他内容? -在这种情况下,我建议您将其删除(如果使用Celery> = 4.0),则应该使用JSON格式的结果。 我更喜欢msgpack,但另一方面,我不对Celery结果使用ElasticSearch ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM