Ü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