对于给定的查询,我想只获取_id
值列表而不获取任何其他信息(没有_source
,_index
,_type
,...)
我注意到,通过使用_source
并请求不存在的字段,它只会返回最少的数据,但我可以获得更少的数据吗?
一些答案建议使用响应的hits
部分,但我不想要其他信息。
答案 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