Elasticsearch-py escanea y desplázate para devolver todos los documentos
Estoy usando elasticsearch-py para conectarme a mi base de datos ES que contiene más de 3 millones de documentos. Quiero devolver todos los documentos para poder resumir datos y escribirlos en un csv. Pude lograr esto fácilmente para 10 documentos (el retorno predeterminado) usando el siguiente código.
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
Desafortunadamente, cuando intenté implementar el escaneo y el desplazamiento para poder obtener todos los documentos, tuve problemas. Lo intenté de dos maneras diferentes sin éxito.
Método 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
Despuésscroll/
le da el id de desplazamiento y luego termina con?scroll=10m (Caused by <class 'httplib.BadStatusLine'>: ''))
Método 2:
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"
Si imprimo scanResp antes del ciclo for me sale<generator object scan at 0x108723dc0>
. Debido a esto, estoy relativamente seguro de que estoy desordenando mi pergamino de alguna manera, pero no estoy seguro de dónde o cómo solucionarlo.
Resultados: De nuevo, despuésscroll/
le da el id de desplazamiento y luego termina con?scroll=10m (Caused by <class 'httplib.BadStatusLine'>: ''))
Intenté aumentar los reintentos de Max para la clase de transporte, pero eso no marcó la diferencia. Apreciaría mucho cualquier idea sobre cómo solucionar esto.
Nota: Mi ES está ubicado en un escritorio remoto en la misma red.