with index create python elasticsearch

python - index - Elasticsearch-py escanea y desplaza para devolver todos los documentos



python elasticsearch timeout (2)

Estoy usando elasticsearch-py para conectarme a mi base de datos de ES que contiene más de 3 millones de documentos. Quiero devolver todos los documentos para poder abstraer datos y escribirlos en un csv. Pude lograr esto fácilmente para 10 documentos (la declaración predeterminada) 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 que encontré en los 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és de scroll/ da el id de scroll 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 bucle for, obtengo <generator object scan at 0x108723dc0> . Debido a esto, estoy relativamente seguro de que estoy arruinando mi pergamino de alguna manera, pero no estoy seguro de dónde o cómo solucionarlo.

Resultados: Nuevamente, después de scroll/ da el id de scroll y luego termina con ?scroll=10m (Caused by <class ''httplib.BadStatusLine''>: ''''))

Intenté aumentar los reintentos máximos para la clase de transporte, pero eso no hizo una diferencia. Apreciaría mucho cualquier idea de cómo solucionar este problema.

Nota: Mi ES se encuentra en un escritorio remoto en la misma red.


¿Tienes problemas resueltos?

Tengo una solución simple, debes cambiar el scroll_id cada vez que llames al método scroll como se muestra a continuación:

response_tmp = es.scroll(scroll_id=scrollId, scroll= "1m") scrollId = response_tmp[''_scroll_id'']


El método de exploración de Python está generando una llamada GET a la API de descanso. Está intentando enviar su scroll_id a través de http. El caso más probable aquí es que su scroll_id es demasiado grande para ser enviado a través de http y, por lo tanto, está viendo este error porque no responde.

Debido a que scroll_id crece en función de la cantidad de fragmentos que tiene, es mejor usar un POST y enviar el scroll_id en JSON como parte de la solicitud. De esta manera, evita la limitación de que sea demasiado grande para una llamada http.