我正在使用Python和Elasticsearch处理大量数据。使用Search API,响应会将请求的文档包含在“命中”列表中:
{
...
"hits" : {
...
"hits" : [
{ "_source": {...} },
{ "_source": {...} },
{ "_source": {...} }
]
...
}
但是,每个文档都嵌入在_source字段中,而不是Elasticsearch希望(和期望)给我的原始文档。为了使这些信息对我有用,我需要将每个hits.source字段中的每个文档提取到一个新列表中,如下所示:
hits = es_response.get("hits").get("hits")
items = []
for hit in hits:
items.append(hit.get("_source"))
return {
"items": items
}
理想情况下,我希望不必从响应中提取每个文档到一个列表中。有没有一种方法可以配置Elasticsearch以响应未嵌套在_source中的文档数据?如果不是,我的解决方案是否是解决此问题的最佳方法?我当时在考虑使用Python生成器,但需要查看它们是否更适合我的用例(我相信它们可能会更慢,但使用更少的内存)。
注意:我知道Elasticsearch的{{3}}参数允许您仅返回_source字段(上面的响应示例假定使用此功能),但是每个文档仍然嵌入在自己的_source字段中,需要提取到上层。因此,该问题与该主题先前提出的问题不符。