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

时间:2016-11-23 12:59:21

标签: elasticsearch elasticsearch-2.0

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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()]

答案 1 :(得分:1)

我建议对Python使用elasticsearch_dsl。他们有一个不错的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