ElasticSearch 仅获取文档 ID,_id 字段,使用索引上的搜索查询

ElasticSearch get only document ids, _id field, using search query on index

对于给定的查询,我只想获取 _id 值的列表而不获取任何其他信息(没有 _source_index_type、.. .).

我注意到,通过使用 _source 并请求不存在的字段,它将 return 仅获得最少的数据,但我可以在 return 中获得更少的数据吗? 一些答案建议使用响应的 hits 部分,但我不想要其他信息。

最好使用滚动和扫描来获取结果列表,这样 elasticsearch 就不必对结果进行排名和排序。

使用 elasticsearch-dsl python 库可以通过以下方式完成:

from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search

es = Elasticsearch()
s = Search(using=es, index=ES_INDEX, doc_type=DOC_TYPE)

s = s.fields([])  # only get ids, otherwise `fields` takes a list of field names
ids = [h.meta.id for h in s.scan()]

我建议使用 elasticsearch_dsl 代替 python。他们有一个很好的 api.

from elasticsearch_dsl import Document

# don't return any fields, just the metadata
s = s.source(False)
results = list(s)

之后您可以通过以下方式获取 ID:

first_result: Document = results[0]
id: Union[str,int] = first_result.meta.id

这里是获取一些额外信息的官方文档:https://elasticsearch-dsl.readthedocs.io/en/latest/search_dsl.html#extra-properties-and-parameters