0

我正在尝试使用 python 中的 elasticsearch 库将对象保存在弹性内部。下面是我正在使用的课程

from elasticsearch_dsl import DocType, Date, InnerDoc, Text, Object

    class Child(Object):
        child1 = Text()
        child2 = Text()

    class Parent(DocType):
        parent1 = Object()
        parent2 = Date()
        parent3 = Date()
        parent4 = Text()
        parent5 = Child()

    class Meta:
        index = 'my_index'

下面是我的弹性映射

    {
  "mappings": {
    "doc": {
      "properties": {
        "parent5": {
          "type": "object",
          "child1": {
            "tracking_number": {
              "type": "text"
            },
            "child2": {
              "type": "text"
            },
          }
        },
        "parent1": {
          "type": "object"
        },
        "parent2": {
          "type": "text"
        },
        "parent3": {
          "type": "date"
        },
        "parent4": {
          "type": "date"
        }
      }
    }
  }
}

如果我将类型更改为“对象”并在 python 代码中检索文档,则会出现以下错误。

TypeError: Object of type 'InnerDoc' is not JSON serializable

如果我将类型更改为“InnerDoc”,我可以检索文档,但无法将其保存为弹性文件。

我假设我的映射是错误的,但不是很确定。任何形式的帮助/见解将不胜感激。提前致谢

4

1 回答 1

0

您需要指定:

class Child(InnerDoc):
    ...

class Parent(Document):
    child = Object(Child)

您还可以在https://github.com/elastic/elasticsearch-dsl-py/blob/master/examples/parent_child.py中看到一个复杂的示例

希望这可以帮助!

于 2018-09-08T15:32:06.630 回答