J'essaie d'utiliser Elasticsearch-dsl-py pour indexer certaines données d'un fichier jsonl avec beaucoup de champs. en ignorant les parties les moins générales, le code ressemble à ceci:define parent dans elasticsearch-dsl-py
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)
essayant de courir cela se termine avec l'erreur:
RequestError: TransportError(400, u'illegal_argument_exception', u"Can't specify parent if no parent field has been configured")
Je suppose que je dois dire es à l'avance qui a un parent. Cependant, ce que je ne veux pas, c'est de cartographier TOUS les champs des deux pour le faire.
Toute aide est la bienvenue!
puis-je faire sans énumérer tous les champs - juste le ' _parent'? – Ori5678
Vous devez le faire au moment de la création de l'index, ce qui signifie que vous définissez votre mapping. Vous pouvez définitivement laisser ES créer dynamiquement vos champs en déplacement, mais le champ '_parent' doit être spécifié au tout début avant d'indexer le premier document. – Val
Une chance avec ça? – Val