如何使用Python客户端获取ElasticSearch索引下的所有文档?

rmbxnbpk  于 2022-10-06  发布在  Python
关注(0)|答案(5)|浏览(208)

我试图使用Python客户端获取所有索引文档,但结果只显示了第一个文档,这是我的Python代码:

res = es.search(index="92c603b3-8173-4d7a-9aca-f8c115ff5a18", doc_type="doc", body = {
'size' : 10000,
'query': {
    'match_all' : {}
}
})
print("%d documents found" % res['hits']['total'])
data = [doc for doc in res['hits']['hits']]
for doc in data:
    print(doc)
    return "%s %s %s" % (doc['_id'], doc['_source']['0'], doc['_source']['5'])
czfnxgou

czfnxgou1#

尝试用“_DOC”代替“DOC”

res = es.search(index="92c603b3-8173-4d7a-9aca-f8c115ff5a18", doc_type="_doc", body = {
'size' : 100,
'query': {
    'match_all' : {}
}
})
nnsrf1az

nnsrf1az2#

默认情况下,ElasticSearch仅检索10个文档。您可以更改此行为-doc here。分页的最佳实践是search after queryscroll query。这取决于你的需要。请阅读此答案ElasticSearch没有提供页面大小较大的数据

要显示所有结果,请执行以下操作:

for doc in res['hits']['hits']:
    print doc['_id'], doc['_source']
px9o7tmv

px9o7tmv3#

您可以尝试执行以下查询。它会退还所有的文件。

result = es.search(index="index_name", body={"query":{"match_all":{}}})
woobm2wo

woobm2wo4#

您还可以使用elasticsearch_dsl及其搜索API,该API允许您通过scan方法迭代所有文档。

import elasticsearch
from elasticsearch_dsl import Search

client = elasticsearch.Elasticsearch()
search = Search(using=client, index="92c603b3-8173-4d7a-9aca-f8c115ff5a18")

for hit in search.scan():
    print(hit)
py49o6xq

py49o6xq5#

我没有提到,如果您只是添加数据,则必须刷新索引。使用以下命令:

es.indices.refresh(index="index_name")

相关问题