我是 Elasticsearch 的新手,当我通过我的 Python 脚本运行 Elasticsearch 查询时,我在获取所有结果时遇到了问题。我的目标是查询一个索引(下面的“my_index”),获取这些结果,然后将它们放入 pandas DataFrame 中,该 DataFrame 通过 Django 应用程序并最终以 Word 文档结束。
我的代码是:
es = Elasticsearch()
logs_index = "my_index"
logs = es.search(index=logs_index,body=my_query)
它告诉我我有 72 次点击,但是当我点击时:
df = logs['hits']['hits']
len(df)
它说长度只有 10。我看到有人在 这个问题 上有类似的问题,但他们的解决方案对我不起作用。
from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search
es = Elasticsearch()
logs_index = "my_index"
search = Search(using=es)
total = search.count()
search = search[0:total]
logs = es.search(index=logs_index,body=my_query)
len(logs['hits']['hits'])
len 函数仍然说我只有 10 个结果。我做错了什么,或者我还能做些什么来恢复所有 72 个结果?
ETA:我知道我可以在我的查询中添加 “size”: 10000 以阻止它被截断为 10,但由于用户将输入他们的搜索查询,我需要找到另一种方式,而不仅仅是在搜索查询。
原文由 carousallie 发布,翻译遵循 CC BY-SA 4.0 许可协议
您需要将
size
参数传递给您的es.search()
调用。请阅读 API 文档
一个例子:
请注意,这不是获取所有索引文档或返回大量文档的查询的最佳方式。为此,您应该执行
scroll
操作,该操作也记录在 scan() 抽象下提供的 API 文档中scroll
弹性操作。您还可以在 elasticsearch 文档 中阅读相关信息