Определить родителя в asticsearch-dsl-py

Я пытаюсь использовать Elasticsearch-dsl-py, чтобы индексировать некоторые данные из файла jsonl со многими полями. игнорируя менее общие части, код выглядит так:

es = Elasticsearch()

for id,line in enumerate(open(jsonlfile)):
  jline = json.loads(line)
  children = jline.pop('allChildrenOfTypeX')
  res = es.index(index="mydocs", doc_type='fatherdoc', id=id, body=jline)
  for ch in children:
    res = es.index(index="mydocs", doc_type='childx', parent=id, body=ch)

попытка запустить это заканчивается с ошибкой:

RequestError: TransportError(400, u'illegal_argument_exception', u"Can't specify parent if no parent field has been configured")

Я думаю, мне нужно заранее сказать, что есть родитель. Однако я не хочу отображать ВСЕ поля обоих, просто чтобы сделать это.

Любая помощь приветствуется!

1 ответ

При создании вашего mydocs индекс, в определении вашего childx тип отображения, вам нужно указать _parent поле со значением fatherdoc:

PUT mydocs
{
  "mappings": {
    "fatherdoc": {
       "properties": {
          ... parent type fields ...
       }
    },
    "childx": {
      "_parent": {                      <---- add this
        "type": "fatherdoc" 
      },
      "properties": {
          ... parent type fields ...
      }
    }
  }
}
Другие вопросы по тегам