我正在尝试使用 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'])
尝试使用"_doc"而不是"doc">
res = es.search(index="92c603b3-8173-4d7a-9aca-f8c115ff5a18", doc_type="_doc", body = {
'size' : 100,
'query': {
'match_all' : {}
}
})
默认情况下,Elasticsearch 只检索 10 个文档。您可以更改此行为 - 文档在这里。分页的最佳做法是search after query
和scroll query
。这取决于您的需求。请阅读此答案 弹性搜索不给出页面大小的大数字数据
要显示所有结果:
for doc in res['hits']['hits']:
print doc['_id'], doc['_source']
您还可以使用elasticsearch_dsl
及其搜索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)
我没有看到提到如果您刚刚添加数据,则必须刷新索引。使用这个:
es.indices.refresh(index="index_name")
您可以尝试以下查询。它将返回所有文档。
result = es.search(index="index_name", body={"query":{"match_all":{}}})