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

时间:2018-05-07 08:47:06

标签: python elasticsearch

我试图使用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'])

4 个答案:

答案 0 :(得分:2)

默认情况下,Elasticsearch仅检索10个文档。您可以更改此行为 - doc here。分页的最佳做法是search after queryscroll query。这取决于您的需求。请阅读此回答Elastic search not giving data with big number for page size

显示所有结果:

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

答案 1 :(得分:0)

尝试使用“ _doc”而不是“ doc”

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

答案 2 :(得分:0)

您可以尝试以下查询。它将返回所有文档。

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

答案 3 :(得分:0)

您还可以使用 elasticsearch_dsl 及其 Search 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)