使用Search API,有没有一种方法可以排除所有元数据字段,而仅返回_source内部的内容?

时间:2019-07-08 17:21:25

标签: python elasticsearch formatting

我正在使用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字段中,需要提取到上层。因此,该问题与该主题先前提出的问题不符。

0 个答案:

没有答案