zoukankan      html  css  js  c++  java
  • Elasticsearch利用scroll查询获取所有数据

    Elasticsearch有两种分页方式,一种是通过from和size条件来实现,但是该方法开销比较大,另一种是利用scroll来实现,通过scroll来实现分页获取所有的数据,下面是利用python实现的scroll获取全部数据的方式:

     1 from elasticsearch import Elasticsearch
     2 
     3 if __name__ == "__main__":
     4     es=Elasticsearch([{"host":"10.120.241.194","port":"9200"}])
     5     query_json={
     6         "match": {
     7             "type":3
     8         }
     9     }
    10     queryData = es.search(index='index', scroll='5m', timeout='3s', size=100, body={"query":query_json})
    11 
    12     mdata = queryData.get("hits").get("hits")
    13     if not mdata:
    14         print 'empty!'
    15 
    16     scroll_id = queryData["_scroll_id"]
    17     total = queryData["hits"]["total"]
    18     for i in range(total/100):
    19         res = es.scroll(scroll_id=scroll_id, scroll='5m') #scroll参数必须指定否则会报错
    20         mdata += res["hits"]["hits"]
    21         print res
    22     print mdata

    通过上面的方法就可以获取es中符合条件的所有记录了。

    如果出现{u'index': None, u'reason': {u'reason': u'No search context found for id [303859]', u'type': u'search_context_missing_exception'}这样的问题,是因为代码第19行没有加上scroll参数

  • 相关阅读:
    第一章Python 数据模型
    Numpy 之 where理解
    探析熟悉而又困惑的参数:argc && argv
    python读书笔记
    经典进程的同步问题之——读者写者
    经典进程的同步问题之——哲学家进餐
    冰多多团队博客目录
    团队事后分析
    冰多多团队Gamma阶段发布说明
    gamma测试报告
  • 原文地址:https://www.cnblogs.com/blue163/p/8126156.html
Copyright © 2011-2022 走看看