Tengo una pequeña base de datos en Elasticsearch y para fines de prueba me gustaría retirar todos los registros. Estoy intentando usar una URL del formulario ...
http://localhost:9200/foo/_search?pretty=true&q={'matchAll':{''}}
¿Puede alguien darme la URL que usaría para lograr esto, por favor?
database
elasticsearch
query-string
elasticsearch-dsl
John Livermore
fuente
fuente
Respuestas:
Creo que la sintaxis de lucene es compatible, así que:
http://localhost:9200/foo/_search?pretty=true&q=*:*
el tamaño predeterminado es 10, por lo que es posible que también necesite
&size=BIGNUMBER
obtener más de 10 artículos. (donde BIGNUMBER es igual a un número que cree que es más grande que su conjunto de datos)PERO, la documentación de elasticsearch sugiere conjuntos de resultados grandes, utilizando el tipo de búsqueda de escaneo.
P.EJ:
y luego siga solicitando según el enlace de documentación anterior sugiere.
EDITAR:
scan
en desuso en 2.1.0.scan
no proporciona ningún beneficio sobre unascroll
solicitud regular ordenada por_doc
. enlace a documentos elásticos (visto por @ christophe-roussy)fuente
Tenga en cuenta el tamaño de parámetro , que aumenta los golpes que se muestran desde el valor predeterminado (10) a 1000 por fragmento.
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-from-size.html
fuente
max_result_window
elasticsearch (ES) admite una solicitud GET o POST para obtener los datos del índice del clúster ES.
Cuando hacemos un GET:
Cuando hacemos una POST:
Sugeriría usar un complemento de interfaz de usuario con elasticsearch http://mobz.github.io/elasticsearch-head/ Esto lo ayudará a tener una mejor idea de los índices que crea y también probar sus índices.
fuente
from
+size
no puede ser más que laindex.max_result_window
configuración del índice que se establece por defecto en 10,000curl -XGET ... -d '{...}'
cuál es unun
estilo mixto oficial de solicitud. Gracias por mostrar los formatos GET y POST correctos.La consulta a continuación devolverá los NO_OF_RESULTS que desea que se devuelvan.
Ahora, la pregunta aquí es que desea que se devuelvan todos los registros. Entonces, naturalmente, antes de escribir una consulta, no conocerá el valor de NO_OF_RESULTS .
¿Cómo sabemos cuántos registros existen en su documento? Simplemente escriba la consulta a continuación
Esto le daría un resultado similar al siguiente.
El resultado total le indica cuántos registros hay disponibles en su documento. Entonces, esa es una buena manera de conocer el valor de NO_OF RESULTADOS
Buscar todos los tipos en todos los índices
Buscar todos los tipos en el índice foo
Buscar todos los tipos en los índices foo1 y foo2
Buscar todos los tipos en cualquier índice que comience con f
Tipos de búsqueda usuario y tweet en todos los índices
fuente
Esta es la mejor solución que encontré usando el cliente Python
https://gist.github.com/drorata/146ce50807d16fd4a6aa
Usar cliente java
https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-search-scrolling.html
fuente
elasticsearch_dsl==5.4.0
y funciona sinsearch_type = 'scan',
.size=10000
, en algún lugar entre las iteraciones 5 a 7. constatus=127
,main ERROR Null object returned for RollingFile in Appenders
,main ERROR Unable to locate appender "rolling" for logger config "root"
No se registra en/var/log/elasticsearch/elasticsearch.log
scan
asistente que hace el desplazamiento debajo del capó (desde la versión 5.xx al menos)search_type = 'scan'
es obsoleto. Un código similar funcionará sin eso, aunque hay algunas diferencias interesantes que están bien ocultas en la documentación anterior. elastic.co/guide/en/elasticsearch/reference/1.4/… En particular, al migrar para no usar search_type = scan, esa primera consulta de 'búsqueda' vendrá con el primer lote de resultados para procesar.Elasticsearch se volverá significativamente más lento si solo agrega un número grande como tamaño, un método para usar para obtener todos los documentos es usar ID de escaneo y desplazamiento.
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html
En Elasticsearch v7.2, lo haces así:
Los resultados de esto contendrían un _scroll_id que debe consultar para obtener los siguientes 100 fragmentos.
fuente
search_type=scan
ahora está en desuso. Entonces debes eliminar eso, pero luego el comportamiento ha cambiado un poco. El primer lote de datos regresa de la llamada de búsqueda inicial. El enlace que proporciona muestra la forma correcta de hacerlo.use
server:9200/_stats
también para obtener estadísticas sobre todos sus alias ... como tamaño y número de elementos por alias, eso es muy útil y proporciona información útilfuente
Si desea extraer muchos miles de registros, entonces ... algunas personas dieron la respuesta correcta de usar 'scroll' (Nota: Algunas personas también sugirieron usar "search_type = scan". Esto fue obsoleto y se eliminó en v5.0. No lo necesitas)
Comienza con una consulta de 'búsqueda', pero especificando un parámetro de 'desplazamiento' (aquí estoy usando un tiempo de espera de 1 minuto)
Eso incluye tu primer 'lote' de éxitos. Pero no hemos terminado aquí. La salida del comando curl anterior sería algo como esto:
Es importante tener _scroll_id a mano, ya que a continuación debe ejecutar el siguiente comando:
Sin embargo, pasar el scroll_id no es algo diseñado para hacerse manualmente. Su mejor opción es escribir código para hacerlo. Por ejemplo, en Java:
Ahora LOOP en el último comando usa SearchResponse para extraer los datos.
fuente
¡Simple! Puede usar
size
yfrom
parámetro!luego cambia
from
gradualmente hasta obtener todos los datos.fuente
from
+size
no puede ser más que index.max_result_window configuración de índice que por defecto es 10,000from
ysize
se encontrará con el problema de Paginación profunda. Use la API de desplazamiento para hacer un volcado de todos los documentos.La mejor manera de ajustar el tamaño es usar size = number delante de la URL
Nota: el valor máximo que se puede definir en este tamaño es 10000. Para cualquier valor superior a diez mil, se espera que utilice la función de desplazamiento que minimizaría cualquier posibilidad de impacto en el rendimiento.
fuente
Puede usar la
_count
API para obtener el valor delsize
parámetro:Las devoluciones
{count:X, ...}
. Extraiga el valor 'X' y luego realice la consulta real:fuente
http: // localhost: 9200 / foo / _search / ? tamaño = 1000 y bonita = 1
deberá especificar el parámetro de consulta de tamaño ya que el valor predeterminado es 10
fuente
size param aumenta los golpes mostrados desde el valor predeterminado (10) a 500.
Cambie el de paso a paso para obtener todos los datos.
fuente
Para Elasticsearch 6.x
Solicitud:
GET /foo/_search?pretty=true
Respuesta: En Hits-> total, da el recuento de los documentos
fuente
Si se trata de un conjunto de datos pequeño (por ejemplo, registros 1K) , simplemente puede especificar
size
:La consulta match all no es necesaria, ya que está implícita.
Si tiene un conjunto de datos de tamaño mediano, como registros 1M , es posible que no tenga suficiente memoria para cargarlo, por lo que necesita un desplazamiento .
Un desplazamiento es como un cursor en un DB. En Elasticsearch, recuerda dónde lo dejó y mantiene la misma vista del índice (es decir, evita que el buscador se vaya con una actualización , evita que los segmentos se fusionen ).
En cuanto a la API, debe agregar un parámetro de desplazamiento a la primera solicitud:
Vuelve a la primera página y una ID de desplazamiento:
Recuerde que tanto la ID de desplazamiento que obtiene como el tiempo de espera son válidos para la página siguiente . Un error común aquí es especificar un tiempo de espera muy grande (valor de
scroll
), que cubriría el procesamiento de todo el conjunto de datos (por ejemplo, registros 1M) en lugar de una página (por ejemplo, 100 registros).Para obtener la siguiente página, complete la última ID de desplazamiento y un tiempo de espera que debería durar hasta obtener la siguiente página:
Si tiene mucho que exportar (p. Ej., Documentos 1B) , querrá paralelizar. Esto se puede hacer a través de desplazamiento en rodajas . Digamos que desea exportar en 10 hilos. El primer hilo emitiría una solicitud como esta:
Vuelve a la primera página y una ID de desplazamiento, exactamente como una solicitud de desplazamiento normal. Lo consumirías exactamente como un desplazamiento regular, excepto que obtienes 1/10 de los datos.
Otros hilos harían lo mismo, excepto que
id
serían 1, 2, 3 ...fuente
fuente
Por defecto, Elasticsearch devuelve 10 registros, por lo que el tamaño debe proporcionarse explícitamente.
Agregue tamaño con la solicitud para obtener el número deseado de registros.
http: // {host}: 9200 / {index_name} / _search? pretty = true & size = (número de registros)
Nota: El tamaño máximo de la página no puede ser mayor que la configuración del índice index.max_result_window que está predeterminado en 10,000.
fuente
De Kibana DevTools es:
fuente
Una solución simple usando el paquete python elasticsearch-dsl :
Consulte también https://elasticsearch-dsl.readthedocs.io/en/latest/api.html#elasticsearch_dsl.Search.scan .
fuente
El resultado máximo que devolverá elasticSearch es 10000 al proporcionar el tamaño
Después de eso, debe usar la API de desplazamiento para obtener el resultado y obtener el valor _scroll_id y poner este valor en scroll_id
fuente
¡La documentación oficial proporciona la respuesta a esta pregunta! Lo puedes encontrar aquí .
¡Simplemente reemplace el tamaño (1) con la cantidad de resultados que desea ver!
fuente
Para devolver todos los registros de todos los índices que puede hacer:
curl -XGET http://35.195.120.21:9200/_all/_search?size=50&pretty
Salida:
fuente
fuente
Ninguno, excepto @ Akira Sendoh, ha respondido cómo obtener TODOS los documentos. Pero incluso esa solución bloquea mi servicio ES 6.3 sin registros. Lo único que funcionó para mí usando la
elasticsearch-py
biblioteca de bajo nivel fue mediante el asistente de escaneo que usascroll()
api:Sin embargo, la forma más limpia hoy en día parece ser a través de la
elasticsearch-dsl
biblioteca, que ofrece llamadas más abstractas y limpias, por ejemplo: http://elasticsearch-dsl.readthedocs.io/en/latest/search_dsl.html#hitsfuente
Si todavía alguien está buscando todos los datos para recuperar de Elasticsearch como yo para algunos casos de uso, esto es lo que hice. Además, todos los datos significan, todos los índices y todos los tipos de documentos. Estoy usando Elasticsearch 6.3
Referencia de Elasticsearch
fuente
esta es la consulta para lograr lo que desea (sugiero usar Kibana, ya que ayuda a comprender mejor las consultas)
Para obtener todos los registros, debe utilizar la consulta "match_all".
El tamaño es el número de registros que desea recuperar (tipo de límite). de forma predeterminada, ES solo devolverá 10 registros
from es como omitir, omitir los primeros 3 registros.
Si desea obtener exactamente todos los registros, simplemente use el valor del campo "total" del resultado una vez que haya accedido a esta consulta desde Kibana y luego úselo con "tamaño".
fuente
Usando Elasticsearch 7.5.1
en caso de que también pueda especificar el tamaño de su matriz con & size = $ {number}
en caso de que no sepas que indexas
fuente
Se puede contribuir utilizando la consola kibana y my_index como índice para buscar lo siguiente. Si le pide al índice que solo devuelva 4 campos del índice, también puede agregar tamaño para indicar cuántos documentos desea que el índice le devuelva. A partir de ES 7.6, debe usar _source en lugar de filtrar, responderá más rápido.
fuente
Puede usar size = 0 esto le devolverá todos los documentos de ejemplo
fuente