Cuando una llamada de consulta se completa normalmente, devuelve el resultado como un objeto SearchResults
. El objeto de resultados indica cuántos documentos coincidentes se han encontrado en el índice y cuántos se han devuelto. También incluye una lista de ScoredDocuments
coincidentes. La lista suele contener una parte de todos los documentos coincidentes encontrados, ya que la búsqueda devuelve un número limitado de documentos cada vez que se llama. Si usas un desplazamiento o un cursor, puedes recuperar todos los documentos coincidentes, un subconjunto cada vez.
Resultados
En función del valor de la limit
opción de consulta, el número de documentos coincidentes devueltos en el resultado puede ser inferior al número encontrado. Recuerda que el número encontrado será una estimación si la precisión del número encontrado es inferior al número encontrado. Independientemente de cómo configures las opciones de búsqueda, una llamada search()
no encontrará más de 10.000 documentos coincidentes.
Si se han encontrado más documentos de los que se han devuelto y quieres obtenerlos todos, debes repetir la búsqueda con un desplazamiento o un cursor, como se explica a continuación.
Documentos con puntuación
En los resultados de búsqueda se incluirá una lista de ScoredDocuments
que coincidan con la consulta. Puedes iterar en la lista para procesar cada documento por turnos:
De forma predeterminada, un documento con puntuación contiene todos los campos del documento original que se ha indexado. Si en las opciones de consulta se ha especificado returned_fields
, solo aparecerán esos campos en la propiedad fields del documento. Si has creado algún campo calculado especificando returned_expressions
o snippeted_fields
, aparecerá por separado en la propiedad expressions del documento.
Usar desplazamientos
Si la búsqueda encuentra más documentos de los que puedes devolver a la vez, usa un desplazamiento para indexar la lista de documentos coincidentes. Por ejemplo, el límite de consultas predeterminado es de 20 documentos. Después de ejecutar una búsqueda por primera vez (con el desplazamiento 0) y obtener los primeros 20 documentos, obtén los 20 siguientes configurando el desplazamiento en 20 y volviendo a ejecutar la misma búsqueda. Repite la búsqueda y aumenta el desplazamiento cada vez en el número de documentos devueltos:
Los desplazamientos pueden ser ineficientes al iterar en un conjunto de resultados muy grande.
Usar cursores
También puedes usar cursores para obtener un subintervalo de resultados. Los cursores son útiles cuando quieres presentar los resultados de búsqueda en páginas consecutivas y quieres asegurarte de que no se omita ningún documento en el caso de que se modifique un índice entre consultas. Los cursores también son más eficientes cuando se itera en un conjunto de resultados muy grande.
Para usar cursores, debes crear un cursor inicial e incluirlo en las opciones de la consulta. Hay dos tipos de cursores: por consulta y por resultado. Un cursor por consulta hace que se asocie un cursor independiente al objeto de resultados devuelto por la llamada de búsqueda. Un cursor por resultado hace que se asocie un cursor a cada documento puntuado de los resultados.
Usar un cursor por consulta
De forma predeterminada, un cursor recién creado es un cursor por consulta. Este cursor contiene la posición del último documento devuelto en los resultados de la búsqueda. Se actualiza con cada búsqueda. Para enumerar todos los documentos que coinciden en un índice, ejecuta la misma búsqueda hasta que el resultado devuelva un cursor nulo:
Usar un cursor por resultado
Para crear cursores por resultado, debe definir la propiedad per_result del cursor en true al crear el cursor inicial. Cuando se devuelvan los resultados de la búsqueda, cada documento tendrá un cursor asociado. Puedes usar ese cursor para especificar una nueva búsqueda con resultados que empiecen por un documento concreto. Ten en cuenta que, cuando envías un cursor por resultado a la búsqueda, no habrá ningún cursor por consulta asociado al resultado en sí. result.getCursor() devolverá null, por lo que no podrás usarlo para comprobar si has obtenido todas las coincidencias.
Guardar y restaurar cursores
Un cursor se puede serializar como una cadena segura para la Web, guardar y, a continuación, restaurar para usarlo más adelante: