Übersicht
Der Notion-Konnektor bietet die Funktionalität, Seiten und Datenbankzeilen aus Notion abzurufen und im Fess-Index zu registrieren. Er authentifiziert sich als interne Notion-Integration und indexiert alles, was für diese Integration freigegeben wurde.
Für diese Funktion ist das Plugin fess-ds-notion erforderlich.
Unterstützte Inhalte
Seiten (der Text ihrer Blöcke)
Datenbankzeilen samt ihren Eigenschaftswerten
In Notion gehostete Dateianhänge von Datei- und PDF-Blöcken (jeweils als eigenes Dokument indexiert)
Ungelöste Seitenkommentare (in das Dokument der Seite aufgenommen)
Nicht unterstützt werden:
Dateien, auf die in Notion nur verwiesen wird (externe Dateien); heruntergeladen werden nur in Notion gehostete
file- undpdf-BlöckeSeiten und Datenbankzeilen im Papierkorb von Notion
Zugriffskontrolle pro Seite (siehe „Berechtigungen“ weiter unten)
Voraussetzungen
Die Installation des Plugins ist erforderlich
Eine interne Notion-Integration muss erstellt werden
Die Integration muss für die zu crawlenden Seiten und Datenbanken freigegeben werden
Plugin-Installation
Installieren Sie über die Administrationsoberfläche unter „System“ -> „Plugins“ oder führen Sie bin/fess-setup install plugin fess-ds-notion aus und starten Sie Fess neu. Weitere Details finden Sie unter Plug-ins.
Einrichtung der Notion-Integration
Erstellen Sie in Notion eine interne Integration und kopieren Sie das „Internal Integration Secret“.
Aktivieren Sie auf der Seite „Configuration“ der Integration die folgenden Fähigkeiten:
Fähigkeit Erforderlich Verwendung Read content Immer Lesen von Seiten, Blöcken, Datenbanken und Datenbankzeilen. Ohne sie schlägt jede Anfrage mit 401 unauthorizedfehl und der Crawl wird sofort abgebrochenRead comments Nur bei include_comments=true(Standard)Abrufen der Seitenkommentare. Fehlt die Fähigkeit, wird einmal eine Warnung protokolliert und das Crawlen von Kommentaren für den Rest dieses Crawls deaktiviert; der Crawl selbst schlägt nicht fehl Read user information Optional Auflösen von Benutzer-IDs ( created_by,last_edited_byundpeople-Eigenschaften) in Anzeigenamen. Ohne sie wird statt des Namens die Benutzer-ID indexiertGeben Sie die Integration in Notion für jede Seite oder Datenbank frei, die gecrawlt werden soll. Das Hinzufügen einer Fähigkeit allein gewährt keinen Zugriff auf Inhalte.
Konfiguration
Konfigurieren Sie über die Administrationsoberfläche unter „Crawler“ -> „Datenspeicher“ -> „Neu erstellen“.
Grundeinstellungen
| Einstellung | Beispielwert |
|---|---|
| Name | Company Notion |
| Handler-Name | NotionDataStore |
| Aktiviert | Ein |
Parameter-Einstellungen
Parameterliste
| Parameter | Erforderlich | Beschreibung |
|---|---|---|
token | Ja | Das Internal Integration Secret. Es wird nicht an das Skript übergeben und nicht protokolliert |
root_page_ids | Nein | Kommagetrennte IDs der Seiten, von denen aus gecrawlt wird. Sind dieser Parameter und database_ids beide leer, werden alle für die Integration freigegebenen Seiten und Datenbanken über die Suche von Notion ermittelt |
database_ids | Nein | Kommagetrennte IDs der Datenbanken, von denen aus gecrawlt wird. Jede Zeile jeder Datenbank wird indexiert |
include_comments | Nein | Ungelöste Kommentare jeder Seite abrufen und deren Text in notion.content und notion.comments aufnehmen (Standard: true) |
include_files | Nein | In Notion gehostete Anhänge von file- und pdf-Blöcken herunterladen, ihren Text extrahieren und jeden als eigenes Dokument indexieren (Standard: true) |
max_file_size | Nein | Ein Anhang, der größer als diese Anzahl Bytes ist, wird vollständig übersprungen und auch nicht mit leerem Inhalt indexiert (Standard: 10485760) |
include_pattern | Nein | Regulärer Ausdruck, dem die notion.url eines Dokuments entsprechen muss, damit es indexiert wird (siehe „Crawl-Umfang“) |
exclude_pattern | Nein | Regulärer Ausdruck, dem die notion.url eines Dokuments nicht entsprechen darf (siehe „Crawl-Umfang“) |
request_interval | Nein | Millisekunden Wartezeit vor jeder Notion-API-Anfrage, um unter dem Ratenlimit von Notion (etwa 3 Anfragen pro Sekunde) zu bleiben (Standard: 350) |
max_retry_count | Nein | Maximale Anzahl von Wiederholungen für eine Anfrage, die mit 429, 5xx oder 529 oder mit einem Übertragungsfehler wie einem Timeout endet (Standard: 5) |
connection_timeout | Nein | Verbindungs-Timeout jeder API-Anfrage in Millisekunden (Standard: 10000) |
read_timeout | Nein | Lese-Timeout jeder API-Anfrage in Millisekunden (Standard: 30000) |
ignore_error | Nein | Schlägt die Textextraktion bei einem heruntergeladenen Anhang fehl, wird der Anhang mit leerem Inhalt indexiert, statt das Dokument fehlschlagen zu lassen (Standard: true). Ein fehlgeschlagener Download lässt das Dokument unabhängig von dieser Einstellung immer fehlschlagen |
Bemerkung
Bei einem numerischen Parameter fällt ein leerer oder nicht numerischer Wert mit einer Warnung im Log auf den Standardwert zurück. Dasselbe gilt für ein negatives request_interval oder max_retry_count (0 ist für beide gültig) und für einen true/false-Parameter, der auf einen anderen Wert gesetzt wurde.
Skript-Einstellungen
Verfügbare Felder
Jedes Dokument, ob Seite, Datenbankzeile oder Anhang, steht dem Skript unter dem Objekt notion zur Verfügung.
| Feld | Beschreibung |
|---|---|
notion.type | page für eine Seite oder Datenbankzeile, file für einen Anhang |
notion.id | Die Seiten-ID, bei einem Anhang die Block-ID |
notion.title | Der Seitentitel (die Eigenschaft vom Typ title, unabhängig von ihrem Namen) oder der Dateiname eines Anhangs |
notion.content | Bei einer Seite: die Eigenschaftswerte außer dem Titel (nur Datenbankzeilen), der Text der Blöcke und der Kommentartext, zusammengefügt. Bei einem Anhang: der extrahierte Text |
notion.url | Die Notion-URL der Seite. Bei einem Anhang die URL der enthaltenden Seite mit angehängtem #<Block-ID> |
notion.mimetype | text/html für eine Seite, der erkannte MIME-Typ für einen Anhang |
notion.created_time | Erstellungszeitpunkt der Seite. Für einen Anhang nicht verfügbar |
notion.last_edited_time | Zeitpunkt der letzten Bearbeitung der Seite bzw. des Anhangsblocks |
notion.created_by | Ersteller der Seite: der Name, falls Notion einen geliefert hat, sonst die Benutzer-ID. Für einen Anhang nicht verfügbar |
notion.last_edited_by | Letzter Bearbeiter im selben Format. Für einen Anhang nicht verfügbar |
notion.parent_id | ID der übergeordneten Seite, Datenbank, Datenquelle oder des Blocks. Leer bei einer Seite direkt im Workspace. Für einen Anhang nicht verfügbar |
notion.properties | Zuordnung von Datenbankspaltenname zu formatiertem Text für eine Datenbankzeile. Bei einer normalen Seite leer. Für einen Anhang nicht verfügbar |
notion.comments | Der Kommentartext der Seite, zusammengefügt. Leer bei include_comments=false oder wenn die Seite keine Kommentare hat. Für einen Anhang nicht verfügbar |
notion.page_url | URL der enthaltenden Seite. Nur bei Anhängen |
notion.page_title | Titel der enthaltenden Seite. Nur bei Anhängen |
notion.size | Größe des Anhangs in Bytes, sofern Notion sie geliefert hat. Nur bei Anhängen |
Crawl-Umfang
Ist weder
root_page_idsnochdatabase_idsgesetzt, ermittelt der Konnektor über die Suche von Notion alle für die Integration freigegebenen Seiten und Datenbanken. Notion garantiert nicht, dass die Suche vollständig ist; fehlen Inhalte im Index, setzen Sieroot_page_idsoderdatabase_idsexplizit.Von jedem Ausgangspunkt aus werden auch alle erreichbaren Unterseiten und Unterdatenbanken gecrawlt, sodass meist eine einzige Stammseite genügt, um einen ganzen Bereich eines Workspace zu erreichen.
include_patternundexclude_patternentscheiden nur darüber, ob das Dokument dieser Seite (oder dieses Anhangs) indexiert wird. Sie verhindern nie, dass die Nachfolger entdeckt werden: Die Blöcke einer Seite werden immer durchlaufen, bevor das Muster gegen die eigene URL der Seite geprüft wird, sodass auch die Unterseiten einer ausgeschlossenen Seite weiterhin gecrawlt und unter ihren eigenen URLs indexiert werden. Um einen ganzen Teilbaum auszuschließen, muss das Muster auf jede URL darunter passen, nicht nur auf die Wurzel.Eine Seite oder Datenbankzeile im Papierkorb von Notion wird übersprungen.
Berechtigungen
Die Notion-API stellt die Freigabeeinstellungen einer Seite nicht bereit, daher kann dieser Konnektor die Zugriffskontrolle pro Seite nicht synchronisieren. Jedes Dokument wird nur mit den Berechtigungen indexiert, die im Feld „Berechtigungen“ der Datenspeicher-Konfiguration festgelegt sind.
Warnung
Alles, was für die Integration freigegeben ist, kann von den Rollen durchsucht werden, die in diesem Feld gewährt werden, unabhängig davon, wer es in Notion sehen kann. Geben Sie die Integration nur für die Seiten und Datenbanken frei, die diese Rollen durchsuchen dürfen.
Fehlerbehandlung
Der Crawl wird nur bei HTTP
401(das Token kann sich nicht authentifizieren) oder bei einer429-Antwort mitpublic_api_request_blocked(das Ratenlimit von Notion blockiert die Integration) abgebrochen. Der Crawl wird auch abgebrochen, wenn die Suche von Notion fehlschlägt, während wederroot_page_idsnochdatabase_idsgesetzt ist, da es keinen Ausgangspunkt gibt.Jeder andere Fehler wird pro Dokument behandelt: ein
404oder403für eine Seite, Datenbank, einen Kommentar-Thread oder Block oder das Erschöpfen vonmax_retry_countbei einer Anfrage wird protokolliert und übersprungen, der Crawl läuft weiter.Jeder Fehler pro Dokument wird unter „Crawler“ -> „Fehler-URLs“ mit der URL dieses Dokuments aufgezeichnet (die Notion-URL einer Seite,
<Seiten-URL>#<Block-ID>bei einem Anhang). Die signierte Download-URL eines Anhangs wird weder aufgezeichnet noch protokolliert.Mit
keep_expires_docs=falsein den Parametern werden Dokumente des Datenspeichers, die in einem Crawl nicht erneut indexiert wurden, am Ende des Crawls gelöscht; das gilt auch für einen abgebrochenen Crawl. Standardmäßig tragen die Dokumente ein Ablaufdatum und bleiben bis zu dessen Ablauf im Index.
Anwendungsbeispiele
Einen bestimmten Seitenbaum crawlen
Parameter:
Skript:
Eine Datenbank crawlen
Parameter:
Skript:
Alles crawlen, was für die Integration freigegeben ist
Parameter:
Fehlerbehebung
Der Crawl wird sofort mit 401 abgebrochen
Prüfen Sie, ob das Token das „Internal Integration Secret“ der Integration ist und die Fähigkeit „Read content“ aktiviert ist.
Seiten fehlen im Index
Prüfen Sie, ob die Integration für die Seite oder Datenbank freigegeben wurde
Wenn Sie sich auf die automatische Ermittlung verlassen, setzen Sie
root_page_idsoderdatabase_idsexplizit, da die Suche von Notion nicht garantiert vollständig istPrüfen Sie
include_patternundexclude_patternPrüfen Sie unter „Crawler“ -> „Fehler-URLs“ auf Dokumente, die einzeln fehlgeschlagen sind
Kommentare werden nicht indexiert
Aktivieren Sie die Fähigkeit „Read comments“ der Integration. Ohne sie wird einmal eine Warnung protokolliert und Kommentare werden für diesen Crawl übersprungen. Es werden nur ungelöste Kommentare indexiert.
Weiterführende Informationen
Übersicht der Datenspeicher-Konnektoren - Übersicht der Datenspeicher-Konnektoren
Slack-Konnektor - Slack-Konnektor
Datenspeicher-Crawl - Leitfaden zur Datenspeicher-Konfiguration
Fehler-URLs - Fehler-URLs
Plug-ins - Leitfaden zur Plugin-Verwaltung