elasticsearch dsl 扫描结果

elasticsearch dsl scan results

有人可以告诉我如何在 elasticsearch dsl python 客户端中使用扫描 API 时从生成器中提取结果 _source 吗?

例如,我正在使用(在这个例子中,elasticsearch-dsl scan

for hit in s.scan():
    print(hit)

我得到以下内容

<Hit(beacon/INDEX/_Mwt9mABoXXeYV0uwSC-): {'client_number': '3570', 'cl...}>

如何从命中生成器中提取字典?

每个 Hit 都有 to_dict(),因此你可以只做 hit.to_dict():

for hit in s.scan():
    print(hit.to_dict())

注意hit.to_dict()不转换元信息,可以从元对象中获取元信息,即:

hit_dict = hit.to_dict()
hit_dict['meta'] = hit.meta.to_dict()

除了@ami-hollander回答-.to_dict()没有转换元信息(例如id),如果你需要这个信息你可以这样做:

hit_dict = hit.to_dict()
hit_dict['meta'] = hit.meta.to_dict()