【问题标题】:Fetch all records from elasticsearch从 elasticsearch 获取所有记录
【发布时间】:2019-11-05 17:50:17
【问题描述】:

我正在尝试使用 python 中的 elasticsearch 获取和处理弹性中的所有条目。大约有。 60M 记录,我遇到的问题是,当我将大小增加到 1M 以上时,它开始什么都不返回。

from elasticsearch import Elasticsearch

es = Elasticsearch("1.1.1.1:1234")

res = es.search(body={
  "from": 0,
  "size": 10000,
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "_exists_:my_string",
            "fields": []
          }
        }
      ],
      "filter": [
        {
          "bool": {
            "must": [
              {
                "range": {
                  "timestamp": {
                    "from": "2019-11-01 01:45:00.000",
                    "to": "2019-11-05 07:45:00.300",
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
})


print("%d documents found" % res['hits']['total'])

我想将结果(基本上是 JSON)转换为 pandas 数据框。这很好用,但我正在努力如何一次获取所有记录或在迭代中执行此操作。

【问题讨论】:

标签: python elasticsearch


【解决方案1】:

分页在像弹性搜索这样的分布式系统中是一个非常昂贵的过程。 size+offset 参数有一个限制,默认设置为 10,000。 要获取所有记录进行处理,您可以使用 Scroll API。

https://www.elastic.co/guide/en/elasticsearch/reference/7.1/search-request-scroll.html

它会及时拍摄索引快照,并返回一个游标 ID,您可以在后续请求中继续传递该游标 ID,以获取下一批。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-07
    • 2015-03-20
    • 2014-10-21
    • 2017-02-24
    相关资源
    最近更新 更多