Определить родителя в 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 ...
}
}
}
}