Elasticsearch滚动结束没有返回任何内容

时间:2018-01-22 20:26:46

标签: python api elasticsearch scroll elasticsearch-api

我正在使用Elasticsearch 6.1 API for Python,我正在尝试从数据库中的每个文档中读取某个值(303 958文档)。

doc = {
    'size' : 1000,
    'query' : {
        'match_all' : {}
    }
}

samplesCount = 0

res = es.search(index="index", doc_type='data', body=doc, scroll='1m')
scrollId = res['_scroll_id']

scrollSize = res['hits']['total']

while scrollSize > 0 :
    for x in range (0, len(res['hits']['hits']) - 1) :
        name = res['hits']['hits'][x]['_source']['name']
        samplesCount += 1
        print(str(samplesCount) + '. ' + name)
        scrollSize -= 1

    res = es.scroll(scroll_id=scrollId, scroll='1m')

索引(samplesCount)在303 654结束,似乎es.scroll没有返回剩余文档的结果(大约300,小于滚动大小)。

让我感到好奇的是它结束于303 654 ......我期待一个整数(1000的倍数)。

有什么想法吗?

非常感谢您提供任何有用的提示。

1 个答案:

答案 0 :(得分:1)

尝试替换

range (0, len(res['hits']['hits']) - 1) 

range(0, len(res['hits']['hits']))

或(等效地)

range(len(res['hits']['hits']))

通过查看您引用的语法和数字,您似乎在while周期的每次迭代中跳过1条记录。