La búsqueda con desplazamiento recupera conjuntos de resultados grandes mediante la iteración por lotes de documentos coincidentes. A diferencia de una búsqueda normal, que devuelve como máximo 5,000 documentos, esta función está diseñada para obtener más resultados allá de dicho límite.
La búsqueda con desplazamiento está pensada para tareas de procesamiento por lotes, como exportación de datos, análisis y trabajos de aprendizaje automático; no se recomienda para consultas interactivas o en tiempo real. Si el conjunto de resultados tiene menos de 5,000 documentos, utilice una búsqueda normal.
Funcionamiento de la búsqueda con desplazamiento
Una búsqueda con desplazamiento se ejecuta en dos fases:
Iniciar el desplazamiento: envíe una solicitud de búsqueda con
search_type=scany un parámetroscroll. La respuesta devuelve un ID de desplazamiento, pero no incluye documentos.Recuperar lotes: pase el ID de desplazamiento de la respuesta anterior para obtener el siguiente lote de documentos. Repita este proceso hasta que el arreglo
itemsen la respuesta esté vacío.
Cada ID de desplazamiento es válido durante el periodo especificado por el parámetro scroll. Si no recupera el siguiente lote antes de que expire el ID, la sesión de desplazamiento finaliza y debe reiniciar desde el paso 1.
Parámetros de la solicitud
|
Parámetro |
Tipo |
Obligatorio |
Descripción |
|
|
STRING |
Sí |
Periodo de validez del ID de desplazamiento. Se especifica como un número seguido de una unidad: semanas ( |
|
|
STRING |
Sí (solo en la primera solicitud) |
Tipo de búsqueda con desplazamiento. Establezca este valor en |
|
|
STRING |
Sí (en solicitudes subsecuentes) |
ID de desplazamiento devuelto en la respuesta anterior. No es necesario en la primera solicitud. |
|
|
STRING |
No |
Campos que se devolverán en los resultados de la búsqueda. |
Parámetros de la respuesta
|
Parámetro |
Tipo |
Descripción |
|
|
STRING |
Resultado de la solicitud. Valores válidos: |
|
|
STRING |
ID de la solicitud; se utiliza para solucionar problemas. |
|
|
STRING |
Resultados de la búsqueda. Incluye |
|
|
STRING |
Detalles del error. El campo |
Los resultados de la búsqueda con desplazamiento se devuelven exclusivamente en formato fullJSON o JSON.
Ejecutar una búsqueda con desplazamiento
Paso 1: Iniciar el desplazamiento
Envíe la primera solicitud con search_type=scan y un valor para scroll. La respuesta contendrá un ID de desplazamiento y un arreglo items vacío; en esta etapa no se devuelve ningún documento.
Ejemplo de respuesta para la primera solicitud:
{
"status": "OK",
"request_id": "150150574119953661605242",
"result": {
"searchtime": 0.005029,
"total": 1,
"num": 0,
"viewtotal": 1,
"scroll_id": "eJxtUMtuhDAM/BrvOYQC5cABdulvRFFIirsm2TpBavv1Ndut1EMlS36NZ0Y2ZHMxbueceAjIuWCMnrPjRITLyfzZm83y9V QVGT8x80U3PxQNUqieVZV1/an4ItbTUBPSx5wgXqKdvOSbmuKR8ZYjGWWirB4tvToAiX7u3G2eCNK77vnz8GlGPAV6suKBeqxAn0OiTd7NGEnesspyoyFLF6hecn4JUKjVgp0K3FnkfMfIyPoDuYWegX9GeYOpicY9TG8gwOSuBL04X1 MMg3ROwCesLlG6X7a2o=",
"items": [],
"facet": []
},
"errors": [],
"tracer": ""
}
Paso 2: Recuperar lotes de documentos
Pase el parámetro scroll_id de la respuesta anterior para obtener el siguiente lote. El ID de desplazamiento se actualiza en cada respuesta, por lo que siempre debe usar el más reciente.
Establezca el parámetrohiten la primera solicitud para definir el tamaño del lote. Este valor permanece fijo durante toda la sesión; modificarhiten solicitudes posteriores no tendrá efecto. Cada lote puede contener un máximo de 500 documentos.
Ejemplo de respuesta para una solicitud subsecuente:
{
"status": "OK",
"request_id": "150150574119952551519970",
"result": {
"searchtime": 0.006293,
"total": 1,
"num": 1,
"viewtotal": 1,
"scroll_id": "eJxNT9tugzAM/RrznIRC4YEHaNlvRFFIhteQtE6Qtn39TNdJk2z5dnx8rIPJRdudcqKhl60Uir2Vp06ISv8b6s3QbZCVzpaCdp93XXBzg2wEW9MJ2dWq8q7YVXt0YckDLlBP0WyOw31N8YgYizZEnAUsjkx4VT4k8zexpjiNS/XYHX0NNkWP71BfVyxQjxLUxSfazFH4PYSPnCL3iMniDZq3jN98aFRCgGrZniy8/itkBHWGuYVeQH+B+QzTCUZ1NJ9gj4FVMfrQPr8Y+Hk+dgU14fIDVhtfTw==",
"items": [
{
"fields": {
"cate_id": "0",
"float_arr": "0",
"id": "1",
"int_arr": "0",
"litteral_arr": "Search",
"name": "Search",
"phone": "1381111****",
"index_name": "app_schema_demo"
},
"property": {},
"attribute": {},
"variableValue": {},
"sortExprValues": [
"1"
]
}
],
"facet": []
},
"errors": [],
"tracer": ""
}
Paso 3: Detectar el fin de los resultados
Cuando items es un arreglo vacío, significa que se han recuperado todos los documentos y la sesión de desplazamiento ha concluido. Deje de enviar solicitudes en este punto.
{
"items": []
}
Limitaciones
|
Limitación |
Detalles |
|
Funciones no compatibles |
No se admiten cláusulas de agregación, cláusulas distinct, expresiones de ordenamiento aproximado, expresiones de ordenamiento fino ni análisis de consultas. |
|
Ordenamiento |
Solo se permite ordenar por un único campo de tipo INT. Requiere OpenSearch API y SDK versión V3 o posterior. |
|
Paginación |
El parámetro |
|
Tamaño del lote |
Cada lote puede contener un máximo de 500 documentos. Configure el parámetro |
|
Desplazamiento entre aplicaciones |
No se admiten búsquedas con desplazamiento que abarquen varias aplicaciones. |
|
Formato de respuesta |
Los resultados se devuelven exclusivamente en formato fullJSON o JSON. |
Solución de problemas
Error: "Scroll_id is expired"
El ID de desplazamiento expiró antes de recuperar el siguiente lote. Modifique el parámetro scroll y reinicie la sesión de desplazamiento desde el paso 1.
Scroll_id no válido
Si el valor del parámetro scroll_id en una solicitud no es válido, se producirá un error.
Comprobar errores
Utilice el código y el mensaje de error del campo errors para diagnosticar fallos; no confíe únicamente en el campo status. Consulte Error codes para ver la lista completa.