Рассмотрим следующее сопоставление для документа в ES.
class MyDoc(elasticseach_dsl.Document):
id_info = Object(IdInfo)
class IdInfo(elasticseach_dsl.InnerDoc):
id = Keyword()
type = Keyword()
С использованиемasticsearch-dsl существует 2 способа получения документа (который мне интересен):
- Использование
MyDoc.search().query().execute()
, что приводит к Hit
объектам - Использование
MyDoc.get()
, что дает MyDoc
объект
Вот проблема, с которой я столкнулся:
Когда я получаю тот же документ из ES, и этот документ отсутствует, например, поле type
, я получаю другое поведение:
- При использовании
search()
: doc
будучи Hit
объектом, доступ к doc.type
вызывает KeyError
- При использовании
get()
: doc
будучи объектом MyDoc
, доступ к doc.type
просто возвращает None
Чтобы обойти это несоответствие, я хотел бы преобразовать экземпляр Hit
в экземпляр MyDoc
, чтобы я всегда мог использовать синтаксис doc.type
без возникновения каких-либо ошибок.
Как я могу это сделать?
В качестве альтернативы, есть ли способ получить доступ к Hit
экземплярам с помощью samповедение как MyDoc
экземпляров?