我正在使用elasticsearch-py连接到我的ES数据库,该数据库包含300多万个文档。我希望返回所有文档,这样我就可以提取数据并将其写入csv。使用下面的代码,我可以轻松地为10个文档(默认返回)实现这一点。
es=Elasticsearch("glycerin")
query={"query" : {"match_all" : {}}}
response= es.search(index="_all", doc_type="patent", body=query)
for hit in response["hits"]["hits"]:
print hit
不幸的是,当我尝试实现扫描和滚动以便获取所有文档时,我遇到了问题。我尝试了两种不同的方法,但都没有成功。
方法1:
scanResp= es.search(index="_all", doc_type="patent", body=query, search_type="scan", scroll="10m")
scrollId= scanResp['_scroll_id']
response= es.scroll(scroll_id=scrollId, scroll= "10m")
print response
在scroll/
之后,它给出滚动id,然后以?scroll=10m (Caused by <class 'httplib.BadStatusLine'>: ''))
结束
方法二:
query={"query" : {"match_all" : {}}}
scanResp= helpers.scan(client= es, query=query, scroll= "10m", index="", doc_type="patent", timeout="10m")
for resp in scanResp:
print "Hiya"
如果我在for循环之前打印出scanResp,我会得到<generator object scan at 0x108723dc0>
。正因为如此,我相对确定我弄乱了我的卷轴,但我不确定在哪里或如何修复它。
结果:
同样,在scroll/
之后,它提供滚动id,然后以?scroll=10m (Caused by <class 'httplib.BadStatusLine'>: ''))
结束
我试着增加传输类的最大重试次数,但这并没有什么不同。我非常感谢任何关于如何解决这个问题的见解。
注意: My ES位于同一网络上的远程桌面上。
https://stackoverflow.com/questions/22921629
复制相似问题