【问题标题】:How to get all documents under an elasticsearch index with python client ?如何使用 python 客户端获取弹性搜索索引下的所有文档?
【发布时间】:2021-06-19 18:15:56
【问题描述】:

我正在尝试使用 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_type=doc 似乎只有 1 个文档。你能再检查一下吗?
  • 此请求必须向我展示 3 个文档,第一次打印显示“找到 3 个文档”
  • 你正在循环内返回!这就是为什么你只看到一个
  • 在循环语句之外返回时出现同样的问题

标签: python elasticsearch


【解决方案1】:

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']

【讨论】:

  • 我只有 3 个文档可以从这个索引中获取
  • 问题出在我的函数的return语句上,如何正确返回结果?
  • 只返回数据,定义为data = [doc for doc in res['hits']['hits']]
  • 我想返回这个结果 "%s %s %s" % (doc['_id'], doc['_source']['0'], doc['_source'][ '5'])
【解决方案2】:

尝试“_doc”而不是“doc”

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      您还可以使用 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)
      

      【讨论】:

      • search.scan() 可以浏览所有文档,但速度很慢。有什么办法可以改善吗?
      • 现在我发现文档elasticsearch-dsl.readthedocs.io/en/latest/… 似乎是它所能做的最好的了。
      • 不幸的是,它的速度很快。如果有办法加快速度,我会很感兴趣?
      猜你喜欢
      • 1970-01-01
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      • 2015-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多