Obtención Masiva de Resultados de Búsqueda
Descripción General
En las búsquedas normales de Fess, solo se muestra un número limitado de resultados de búsqueda mediante la función de paginación. si desea obtener todos los resultados de búsqueda de una sola vez, utilice la función de Búsqueda scroll (scroll search).
Esta función es útil cuando necesita procesar todos los resultados de búsqueda, como en exportaciones masivas de datos, copias de seguridad y análisis de grandes volúmenes de datos.
Casos de Uso
La búsqueda scroll es adecuada para los siguientes propósitos:
Exportación completa de resultados de búsqueda
Obtención de grandes volúmenes de datos para análisis
Obtención de datos en procesos por lotes
sincronización de datos con sistemas externos
Recopilación de datos para generación de informes
Advertencia
La búsqueda scroll devuelve grandes volúmenes de datos, por lo que consume más recursos del servidor en comparación con las búsquedas normales. Habilítela solo cuando sea necesario.
Método de Configuración
Habilitación de la Búsqueda scroll
Por defecto, la búsqueda scroll está deshabilitada por motivos de seguridad y rendimiento. Para habilitarla, modifique la siguiente configuración en fess_config.properties o /etc/fess/fess_config.properties.
api.search.scroll=true
Nota
Después de cambiar la configuración, es necesario reiniciar Fess.
Configuración de Campos de Respuesta
Puede personalizar los campos que se incluyen en la respuesta de los resultados de búsqueda. Por defecto, solo se devuelven campos básicos, pero puede especificar campos adicionales.
query.additional.scroll.response.fields=content,mimetype,filename,created,last_modified
Al especificar múltiples campos, enumérelos separados por comas.
Configuración del Tiempo de Espera del scroll
Puede configurar el período de validez del contexto de scroll. El valor predeterminado es 1 minuto.
api.search.scroll.timeout=1m
Unidades: - s: segundos - m: minutos - h: horas
Método de Uso
Uso Básico
Para acceder a la búsqueda scroll, utilice la siguiente URL.
http://localhost:8080/json/scroll?q=palabra_clave_búsqueda
Los resultados de búsqueda se devuelven en formato NDJsON (Newline Delimited JsON). Cada línea representa un documento en formato JsON.
Ejemplo:
curl "http://localhost:8080/json/scroll?q=Fess"
Parámetros de solicitud
En la búsqueda scroll, puede utilizar los siguientes parámetros.
| Nombre del Parámetro | Descripción |
|---|---|
q | Consulta de búsqueda (obligatorio) |
size | Número de registros a obtener en cada scroll (predeterminado: 100) |
scroll | Tiempo de validez del contexto de scroll (predeterminado: 1m) |
fields.label | Filtrado por etiqueta |
Especificación de Consulta de Búsqueda
Puede especificar consultas de búsqueda de la misma manera que en las búsquedas normales.
Ejemplo: Búsqueda por palabra clave
curl "http://localhost:8080/json/scroll?q=motor_búsqueda"
Ejemplo: Búsqueda con campo especificado
curl "http://localhost:8080/json/scroll?q=title:Fess"
Ejemplo: Obtención completa (sin condiciones de búsqueda)
curl "http://localhost:8080/json/scroll?q=*:*"
Especificación del Número de Registros a Obtener
Puede cambiar el número de registros a obtener en cada scroll.
curl "http://localhost:8080/json/scroll?q=Fess&size=500"
Nota
si el parámetro size es demasiado grande, aumentará el uso de memoria. Normalmente se recomienda configurarlo en el rango de 100 a 1000.
Filtrado por Etiqueta
Puede obtener solo los documentos que pertenecen a una etiqueta específica.
curl "http://localhost:8080/json/scroll?q=*:*&fields.label=public"
Cuando se Requiere Autenticación
si utiliza búsqueda basada en roles, necesita incluir información de autenticación.
curl -u usuario:contraseña "http://localhost:8080/json/scroll?q=Fess"
O, utilizando un token de API:
curl -H "Authorization: Bearer sU_TOKEN_API" \
"http://localhost:8080/json/scroll?q=Fess"
Formato de Respuesta
Formato NDJsON
La respuesta de la búsqueda scroll se devuelve en formato NDJsON (Newline Delimited JsON). Cada línea representa un documento.
Ejemplo:
{"url":"http://example.com/page1","title":"Page 1","content":"..."}
{"url":"http://example.com/page2","title":"Page 2","content":"..."}
{"url":"http://example.com/page3","title":"Page 3","content":"..."}
Campos de Respuesta
Principales campos incluidos por defecto:
url: URL del documentotitle: Títulocontent: Contenido (extracto)score: Puntuación de búsquedaboost: Valor de boostcreated: Fecha de creaciónlast_modified: Fecha de última modificación
Ejemplos de Procesamiento de Datos
Ejemplo de Procesamiento en Python
import requests
import json
# Ejecutar búsqueda scroll
url = "http://localhost:8080/json/scroll"
params = {
"q": "Fess",
"size": 100
}
response = requests.get(url, params=params, stream=True)
# Procesar respuesta NDJsON línea por línea
for line in response.iter_lines():
if line:
doc = json.loads(line)
print(f"Title: {doc.get('title')}")
print(f"URL: {doc.get('url')}")
print("---")
Guardar en Archivo
Ejemplo de cómo guardar los resultados de búsqueda en un archivo:
curl "http://localhost:8080/json/scroll?q=*:*" > all_documents.ndjson
Conversión a CsV
Ejemplo de conversión a CsV utilizando el comando jq:
curl "http://localhost:8080/json/scroll?q=Fess" | \
jq -r '[.url, .title, .score] | @csv' > results.csv
Análisis de Datos
Ejemplo de análisis de datos obtenidos:
import json
import pandas as pd
from collections import Counter
# Leer archivo NDJsON
documents = []
with open('all_documents.ndjson', 'r') as f:
for line in f:
documents.append(json.loads(line))
# Convertir a DataFrame
df = pd.DataFrame(documents)
# Estadísticas básicas
print(f"Total documents: {len(df)}")
print(f"Average score: {df['score'].mean()}")
# Análisis de dominios de URL
df['domain'] = df['url'].apply(lambda x: x.split('/')[2])
print(df['domain'].value_counts())
Rendimiento y Mejores Prácticas
Uso Eficiente
Configuración Apropiada del Parámetro size
si es demasiado pequeño, aumenta la sobrecarga de comunicación
si es demasiado grande, aumenta el uso de memoria
Recomendado: 100-1000
Optimización de Condiciones de Búsqueda
Especifique condiciones de búsqueda para obtener solo los documentos necesarios
Ejecute la obtención completa solo cuando sea realmente necesario
Uso en Horarios de Baja Demanda
Ejecute la obtención de grandes volúmenes de datos durante períodos de baja carga del sistema
Uso en Procesos por Lotes
Ejecute sincronizaciones de datos periódicas como trabajos por lotes
Optimización del Uso de Memoria
Al procesar grandes volúmenes de datos, utilice procesamiento en streaming para reducir el uso de memoria.
import requests
import json
url = "http://localhost:8080/json/scroll"
params = {"q": "*:*", "size": 100}
# Procesar en streaming
with requests.get(url, params=params, stream=True) as response:
for line in response.iter_lines(decode_unicode=True):
if line:
doc = json.loads(line)
# Procesar documento
process_document(doc)
Consideraciones de seguridad
Restricciones de Acceso
Dado que la búsqueda scroll devuelve grandes volúmenes de datos, configure restricciones de acceso apropiadas.
Restricción por Dirección IP
Permitir acceso solo desde direcciones IP específicas
Autenticación de API
Utilizar tokens de API o autenticación básica
Restricción Basada en Roles
Permitir acceso solo a usuarios con roles específicos
Limitación de Tasa
se recomienda configurar limitación de tasa en el proxy inverso para evitar accesos excesivos.
solución de Problemas
La Búsqueda scroll No Está Disponible
Verifique que
api.search.scrollesté configurado comotrue.Verifique que haya reiniciado Fess.
Revise los registros de errores.
se Produce un Error de Tiempo de Espera
Aumente el valor de
api.search.scroll.timeout.Reduzca el parámetro
sizepara distribuir el procesamiento.Refine las condiciones de búsqueda para reducir la cantidad de datos obtenidos.
Error de Memoria Insuficiente
Reduzca el parámetro
size.Aumente el tamaño de memoria heap de Fess.
Verifique el tamaño de memoria heap de Opensearch.
La Respuesta Está Vacía
Verifique que la consulta de búsqueda sea correcta.
Verifique que las etiquetas o condiciones de filtro especificadas sean correctas.
Verifique la configuración de permisos de búsqueda basada en roles.
Información de Referencia
search - Detalles de la función de búsqueda
search-config - Configuración relacionada con la búsqueda