Consider the following mapping for a document in ES.
class MyDoc(elasticseach_dsl.Document):
id_info = Object(IdInfo)
class IdInfo(elasticseach_dsl.InnerDoc):
id = Keyword()
type = Keyword()
Using elasticsearch-dsl, there are 2 ways of retrieving a document (that I am interested in):
MyDoc.search().query().execute()
, that yields Hit
objectsMyDoc.get()
, that yields a MyDoc
objectHere is the issue I am experiencing:
When I retrieve the same document from ES, and that document is missing, for example, the type
field, I get different behaviours:
search()
: doc
being a Hit
object, accessing doc.type
raises a KeyError
get()
: doc
being a MyDoc
object, accessing doc.type
simply returns None
To workaround this discrepancy, I would like to convert a Hit
instance to a MyDoc
instance, so that I can always use the doc.type
syntax without any errors being raised.
How can I do that?
Alternatively, is there a way that I could access Hit
instances with the same behaviour as MyDoc
instances?
dict_hit = hit.to_dict()
doc = YourDocument(**dict_hit)
doc.property1 # you can access the property here
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With