如何使用 elasticsearch_dsl 创建动态映射

how to create dynamic mapping with elasticsearch_dsl

我必须创建应该看起来像这样的映射。

{
  "mappings": {
    "properties": {
        "product_id": {
            "type": "keyword"
        },
        "attributes": {
            "dynamic": "true",
            "properties": {}
        },
    }
}   

我通常会这样做

class RetailerProductGeneric(Document):
    product_id = Keyword()
    

当我在文档中有一个动态架构时,我该怎么做?

我看了文档,但不是很清楚。它是这样的:

class Post(Document):
    title = Text()

    class Meta:
        all = MetaField(enabled=False)
        dynamic = MetaField('strict')

不确定这里发生了什么。有人可以解释一下怎么做吗?

编辑 1:

经过一番研究,我想出了如何创建动态映射。

class RetailerProductGeneric(Document):
    product_id = Keyword()
    attributes = Object(dynamic=True)

但现在预期的映射结果是这样的

  "attributes": {
    "dynamic": true,
    "type": "object"
  },

我要找的是

  "attributes": {
    "dynamic": "true",
    "properties": {}
  },

这有什么区别?如何按预期进行映射。

好的开始!!

"attributes": {
  "dynamic": true,
  "type": "object"
},

"attributes": {
  "dynamic": "true",
  "properties": {}
},

实际上是一回事

指定type: object时,隐含properties: {}

并且当指定 properties: {} 且未给出 type 时,则隐含 type: object