Massen-Abruf von Suchergebnissen
Übersicht
Bei normaler Suche in Fess wird durch Paging-Funktion nur eine bestimmte Anzahl von Suchergebnissen angezeigt. Wenn Sie alle Suchergebnisse auf einmal abrufen möchten, verwenden Sie die Scroll-Search-Funktion.
Diese Funktion ist nützlich, wenn alle Suchergebnisse verarbeitet werden müssen, z. B. für Massen-Datenexport, Backup oder Analyse großer Datenmengen.
Anwendungsfälle
Scroll-Suche eignet sich für folgende Zwecke:
Vollständiger Export von Suchergebnissen
Abruf großer Datenmengen für Datenanalyse
Datenabruf in Batch-Verarbeitung
Datensynchronisation mit externen Systemen
Datenerfassung für Berichtsgenerierung
Warnung
Scroll-Suche gibt große Datenmengen zurück und verbraucht daher mehr Serverressourcen im Vergleich zur normalen Suche. Aktivieren Sie nur bei Bedarf.
Konfigurationsmethode
Aktivierung der Scroll-Suche
Standardmäßig ist Scroll-Suche aus Sicherheits- und Leistungsgründen deaktiviert. Zur Aktivierung ändern Sie in fess_config.properties oder /etc/fess/fess_config.properties folgende Einstellung:
api.search.scroll=true
Bemerkung
Nach Konfigurationsänderung muss Fess neu gestartet werden.
Konfiguration von Response-Feldern
Sie können Felder anpassen, die in Suchergebnissen enthalten sind. Standardmäßig werden nur Grundfelder zurückgegeben, Sie können jedoch zusätzliche Felder angeben.
query.additional.scroll.response.fields=content,mimetype,filename,created,last_modified
Bei Angabe mehrerer Felder trennen Sie diese durch Kommas.
Timeout-Einstellung für Scroll
Sie können die Gültigkeitsdauer des Scroll-Kontexts konfigurieren. Standard ist 1 Minute.
api.search.scroll.timeout=1m
Einheiten: - s: Sekunden - m: Minuten - h: Stunden
Verwendungsmethode
Grundlegende Verwendung
Zugriff auf Scroll-Suche erfolgt über folgende URL:
http://localhost:8080/json/scroll?q=Suchschlüsselwort
Suchergebnisse werden im NDJSON-Format (Newline Delimited JSON) zurückgegeben. Pro Zeile wird ein Dokument im JSON-Format ausgegeben.
Beispiel:
curl "http://localhost:8080/json/scroll?q=Fess"
Request-Parameter
Für Scroll-Suche können folgende Parameter verwendet werden:
| Parametername | Beschreibung |
|---|---|
q | Suchabfrage (erforderlich) |
size | Anzahl pro Scroll-Abruf (Standard: 100) |
scroll | Gültigkeitszeit des Scroll-Kontexts (Standard: 1m) |
fields.label | Filterung nach Label |
Angabe von Suchabfragen
Sie können Suchabfragen wie bei normaler Suche angeben.
Beispiel: Schlüsselwortsuche
curl "http://localhost:8080/json/scroll?q=Suchmaschine"
Beispiel: Feldspezifische Suche
curl "http://localhost:8080/json/scroll?q=title:Fess"
Beispiel: Vollständiger Abruf (ohne Suchbedingung)
curl "http://localhost:8080/json/scroll?q=*:*"
Angabe der Abrufanzahl
Sie können die Anzahl pro Scroll-Abruf ändern.
curl "http://localhost:8080/json/scroll?q=Fess&size=500"
Bemerkung
Zu großer size-Parameter erhöht Speichernutzung. Normalerweise wird Bereich von 100–1000 empfohlen.
Filterung nach Label
Sie können nur Dokumente bestimmter Labels abrufen.
curl "http://localhost:8080/json/scroll?q=*:*&fields.label=public"
Bei erforderlicher Authentifizierung
Bei Verwendung rollenbasierter Suche müssen Sie Authentifizierungsinformationen einschließen.
curl -u username:password "http://localhost:8080/json/scroll?q=Fess"
Oder mit API-Token:
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
"http://localhost:8080/json/scroll?q=Fess"
Response-Format
NDJSON-Format
Scroll-Such-Response wird im NDJSON-Format (Newline Delimited JSON) zurückgegeben. Jede Zeile repräsentiert ein Dokument.
Beispiel:
{"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":"..."}
Response-Felder
Standardmäßig enthaltene Hauptfelder:
url: Dokument-URLtitle: Titelcontent: Haupttext (Auszug)score: Such-Scoreboost: Boost-Wertcreated: Erstellungsdatumlast_modified: Letztes Änderungsdatum
Datenverarbeitungsbeispiele
Verarbeitungsbeispiel mit Python
import requests
import json
# Scroll-Suche ausführen
url = "http://localhost:8080/json/scroll"
params = {
"q": "Fess",
"size": 100
}
response = requests.get(url, params=params, stream=True)
# NDJSON-Response zeilenweise verarbeiten
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("---")
Speichern in Datei
Beispiel zum Speichern von Suchergebnissen in Datei:
curl "http://localhost:8080/json/scroll?q=*:*" > all_documents.ndjson
Konvertierung zu CSV
Beispiel für Konvertierung zu CSV mit jq-Befehl:
curl "http://localhost:8080/json/scroll?q=Fess" | \
jq -r '[.url, .title, .score] | @csv' > results.csv
Datenanalyse
Beispiel für Analyse abgerufener Daten:
import json
import pandas as pd
from collections import Counter
# NDJSON-Datei einlesen
documents = []
with open('all_documents.ndjson', 'r') as f:
for line in f:
documents.append(json.loads(line))
# In DataFrame konvertieren
df = pd.DataFrame(documents)
# Grundstatistik
print(f"Total documents: {len(df)}")
print(f"Average score: {df['score'].mean()}")
# URL-Domain-Analyse
df['domain'] = df['url'].apply(lambda x: x.split('/')[2])
print(df['domain'].value_counts())
Leistung und Best Practices
Effiziente Verwendung
Angemessene size-Parameter-Einstellung
Zu klein erhöht Kommunikations-Overhead
Zu groß erhöht Speichernutzung
Empfohlen: 100–1000
Optimierung von Suchbedingungen
Suchbedingungen so angeben, dass nur benötigte Dokumente abgerufen werden
Vollständigen Abruf nur bei wirklichem Bedarf ausführen
Nutzung von Off-Peak-Zeiten
Abruf großer Datenmengen in Zeiten niedriger Systemlast ausführen
Verwendung in Batch-Verarbeitung
Regelmäßige Datensynchronisation als Batch-Job ausführen
Optimierung der Speichernutzung
Bei Verarbeitung großer Datenmengen verwenden Sie Streaming-Verarbeitung zur Reduzierung der Speichernutzung.
import requests
import json
url = "http://localhost:8080/json/scroll"
params = {"q": "*:*", "size": 100}
# Mit Streaming verarbeiten
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)
# Dokumentverarbeitung
process_document(doc)
Sicherheitsüberlegungen
Zugriffsbeschränkung
Da Scroll-Suche große Datenmengen zurückgibt, konfigurieren Sie angemessene Zugriffsbeschränkungen.
IP-Adressen-Beschränkung
Zugriff nur von bestimmten IP-Adressen erlauben
API-Authentifizierung
API-Token oder Basic-Authentifizierung verwenden
Rollenbasierte Beschränkung
Zugriff nur für Benutzer mit bestimmten Rollen erlauben
Rate-Limiting
Zur Vermeidung übermäßigen Zugriffs wird Konfiguration von Rate-Limiting im Reverse-Proxy empfohlen.
Fehlersuche
Scroll-Suche nicht verfügbar
Überprüfen Sie, ob
api.search.scrollauftruegesetzt ist.Überprüfen Sie, ob Fess neu gestartet wurde.
Überprüfen Sie Fehlerprotokolle.
Timeout-Fehler tritt auf
Erhöhen Sie Wert von
api.search.scroll.timeout.Verkleinern Sie
size-Parameter für verteilte Verarbeitung.Grenzen Sie Suchbedingungen ein, um abzurufende Datenmenge zu reduzieren.
Speichermangel-Fehler
Verkleinern Sie
size-Parameter.Erhöhen Sie Heap-Speichergröße von Fess.
Überprüfen Sie Heap-Speichergröße von OpenSearch.
Response ist leer
Überprüfen Sie, ob Suchabfrage korrekt ist.
Überprüfen Sie, ob angegebene Labels oder Filterbedingungen korrekt sind.
Überprüfen Sie Berechtigungseinstellungen für rollenbasierte Suche.
Referenzinformationen
Suchfunktionen - Details zu Suchfunktionen
Suchbezogene Konfigurationen - Suchbezogene Konfigurationen