![](/img/trans.png)
[英]Searching through multiple index yielding 0 documents in elasticsearch-py
[英]elasticsearch-py scan and scroll to return all documents
我正在使用 elasticsearch-py 连接到包含超过 300 万个文档的 ES 数据库。 我想返回所有文档,以便我可以抽象数据并将其写入 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
不幸的是,当我尝试实施扫描和滚动时,我可以获取遇到问题的所有文档。 我尝试了两种不同的方法,但没有成功。
方法一:
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'>: ''))
结尾?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'>: ''))
结尾?scroll=10m (Caused by <class 'httplib.BadStatusLine'>: ''))
我尝试增加传输类的最大重试次数,但这并没有什么不同。我非常感谢您对如何解决此问题的任何见解。
注意:我的 ES 位于同一网络上的远程桌面上。
python scan 方法正在生成对其余 api 的 GET 调用。 它试图通过 http 发送您的 scroll_id。 这里最可能的情况是您的 scroll_id 太大而无法通过 http 发送,因此您看到此错误是因为它没有返回任何响应。
因为 scroll_id 根据您拥有的分片数量增长,所以最好使用 POST 并在 JSON 中将 scroll_id 作为请求的一部分发送。 通过这种方式,您可以绕过它对于 http 调用来说太大的限制。
你的问题解决了吗?
我有一个简单的解决方案,每次调用滚动方法后都必须更改scroll_id
如下所示:
response_tmp = es.scroll(scroll_id=scrollId, scroll= "1m")
scrollId = response_tmp['_scroll_id']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.