Python 3.x 如何使用elasticsearch dsl将点击转换为文档?
考虑ES中文档的以下映射Python 3.x 如何使用elasticsearch dsl将点击转换为文档?,python-3.x,
elasticsearch,Python 3.x,
elasticsearch,考虑ES中文档的以下映射 class MyDoc(elasticseach_dsl.Document): id_info = Object(IdInfo) class IdInfo(elasticseach_dsl.InnerDoc): id = Keyword() type = Keyword() 使用elasticsearch dsl,有两种检索文档的方法(我感兴趣): 使用MyDoc.search().query().execute(),生成Hit对象 使用M
class MyDoc(elasticseach_dsl.Document):
id_info = Object(IdInfo)
class IdInfo(elasticseach_dsl.InnerDoc):
id = Keyword()
type = Keyword()
使用elasticsearch dsl,有两种检索文档的方法(我感兴趣):
- 使用
,生成MyDoc.search().query().execute()
对象Hit
- 使用
,生成一个MyDoc.get()
对象MyDoc
type
字段,我会得到不同的行为:
- 使用
:search()
作为doc
对象时,访问Hit
会引发doc.type
KeyError
- 当使用
:get()
作为doc
对象时,访问MyDoc
只会返回doc.type
None
Hit
实例转换为MyDoc
实例,这样我就可以始终使用doc.type
语法而不会出现任何错误
我该怎么做
或者,是否有一种方法可以访问与
MyDoc
实例具有相同行为的Hit
实例?我知道这有点尴尬和烦人,它过去用于6以下的版本
我找到了一个解决方法,如果您使用elasticsearch响应中的字典,那么您可以要求document类如下解释它
query=MyDoc.search()
response=query.execute()
my_doc=MyDoc.from_es(response.hits.hits[0])
请不要只发布代码作为答案,还要解释代码的作用以及如何解决问题。带有解释的答案通常更有帮助,质量更好,更容易吸引选票。
dict_hit = hit.to_dict()
doc = YourDocument(**dict_hit)
doc.property1 # you can access the property here