Indexing-Services –
Einrichtung & Entwicklungsreferenz
Was ist ein Indexing-Service?
Ein Indexing-Service ist eine spezielle SmartIndexing-Regel. Sie leitet die Textverarbeitung an ein eigenes Plugin weiter, das Sie in Python 3.6 programmieren.
Schritt 1: Python-Modul anlegen
Speicherort
Legen Sie Ihr Python-Modul im folgenden Unterverzeichnis ab:
<Installationsverzeichnis>\customisation\indexingservices\
Die Datei muss die Endung .py haben.
Beispiel: Wenn Documents in C:\Programme\PHOENIX_Documents installiert ist, speichern Sie Ihren Indexing-Service hier:
C:\Programme\PHOENIX_Documents\customisation\indexingservices\mymodule.py
Optionale Konfigurationsdatei
Sie können jeden Indexing-Service durch eine INI-Datei weiter anpassen.
Legen Sie die Datei mit demselben Namen wie das Modul und der Endung
.iniab.Beispiel:
mymodule.ininebenmymodule.pyDie INI-Datei wird automatisch eingelesen und im Python-Modul bereitgestellt.
Schritt 2: Service in der smartindexing.xml registrieren
Damit der Indexing-Service in der Applikation auswählbar ist, müssen Sie ihn in der smartindexing.xml registrieren:
xml
<option id="mymodule" name="Mein Indexing-Service">
<rule>service: "mymodule", group=1</rule>
</option>
Wichtige Regeln für die Registrierung:
Attribut/Element | Beschreibung |
| Muss in der |
| Der angezeigte Name im SmartIndexing-Auswahldialog |
| Muss vom Typ |
Erster Parameter | Der Name des Moduls (Dateiname ohne |
Weitere Parameter | Optional, kommagetrennt – diese werden direkt an den Indexing-Service weitergegeben |
Hinweis: String-Parameter müssen immer in doppelten Anführungszeichen stehen.
Schritt 3: Indexing-Service programmieren
Minimales Beispiel
Ihr Python-Modul muss eine Klasse IndexingService mit einer Methode process enthalten:
python
import regex
class IndexingService:
"""
IndexingService, der die erste im Text vorkommende Zahl zurückgibt.
"""
def process(self, **kwargs):
text = self.get_text()
match = regex.search(r'(\d+)', text)
if match:
return [match.group(1)]
Rückgabewert der process-Methode
Die Methode gibt eine Liste von Ergebnissen zurück.
Ergebnisse weiter vorne in der Liste werden als wichtiger gewertet.
Wenn es keine Ergebnisse gibt, können Sie
Noneoder eine leere Liste zurückgeben.
Zusätzliche Parameter aus der smartindexing.xml
In
**kwargssind alle zusätzlichen Parameter aus dersmartindexing.xmlenthalten.Im obigen Beispiel wäre das der Parameter
groupmit dem Wert1.
Verfügbare Methoden in der Klasse
Die Klasse stellt folgende Methoden bereit, um auf die zu verarbeitenden Daten zuzugreifen:
self.get_file()
Gibt den absoluten Pfad der zu verarbeitenden Datei zurück (normalerweise in einem temporären Verzeichnis).
Wichtig: Der Rückgabewert kann None sein, da Clients auch direkten Text ohne Datei übergeben können. Behandeln Sie diesen Fall in Ihrem Code.
self.get_filename()
Gibt den Dateinamen der zu verarbeitenden Datei zurück.
Normalerweise entspricht dies dem
basename()vonget_file()(Dateiname ohne absoluten Pfad).Der Dateiname kann auch bei reiner Textübergabe vom Client angegeben werden.
Wichtig: Auch hier kann der Rückgabewert None sein.
self.get_text()
Gibt den extrahierten Text der Datei zurück.
Funktioniert bei Dateiformaten wie PDF oder DOCX, bei denen der Server den Text extrahieren kann.
Funktioniert auch, wenn der Client den Text direkt übergibt.
Gibt
Noneoder einen leeren String zurück, wenn kein Text vorhanden ist.
Verfügbare Python-Module
In Ihrem Indexing-Service können Sie alle Module aus der Python-Standardbibliothek importieren.
Zusätzlich steht das erweiterte Modul für reguläre Ausdrücke zur Verfügung:
Modul | Beschreibung |
| Standard-Python-Modul für reguläre Ausdrücke |
| Erweitertes Modul mit mehr Funktionen (pypi.org/project/regex) |
Konfiguration per INI-Datei
Auf die INI-Konfigurationsdatei greifen Sie innerhalb der Klasse über self.config zu.
self.configist einconfigparser.ConfigParser-Objekt aus der Python-Standardbibliothek.Wenn keine INI-Datei vorhanden ist, ist
self.configleer.
Datenbankzugang
Option 1: Externe Datenbank via ODBC
Sie können innerhalb der process-Methode über ODBC auf externe Datenbanken zugreifen.
1. Konfigurieren Sie die Datenbankverbindung in der INI-Datei des Moduls:
ini
[Database]
DSN = MY_DSN
UID = user
PWD = password
2. Bauen Sie die Verbindung in Ihrem Code über self.database mit einem with-Statement auf:
python
with self.database() as conn:
sql = 'SELECT data FROM mydata WHERE ID = {}'.format(documentId)
cursor = conn.cursor()
cursor.execute(sql)
value = cursor.fetchone()[0]
# ...
Wichtige Hinweise zur ODBC-Verbindung:
Wenn Sie Daten ändern, schließen Sie die Transaktion mit
conn.commit()ab.Die Datenbankverbindung wird beim Verlassen des
with-Blocks automatisch geschlossen.Intern verwendet Documents PyODBC für Datenbankverbindungen.
Wenn Sie innerhalb eines Archivierungsvorgangs auf mehr als eine externe Datenbank zugreifen müssen, verwenden Sie PyODBC direkt.
⚠️ Wichtig: Da Documents eine 64-Bit-Anwendung ist, werden aktuell 64-Bit-ODBC-Treiber vorausgesetzt.
Option 2: Documents-Datenbank (PostgreSQL)
Über self.engine können Sie direkt auf die PostgreSQL-Datenbank von Documents zugreifen – ohne zusätzliche Konfiguration.
self.engineist ein SQLAlchemy Engine-Objekt.Verwenden Sie
self.engine.begin()mit einemwith-Statement für implizite Transaktionen:
python
# Verbindung aufbauen
with self.engine.begin() as conn:
conn.execute(...)
Verhalten des with-Blocks:
Situation | Ergebnis |
Exception innerhalb des Blocks | Automatischer Rollback |
Kein Fehler | Automatischer Commit |
Prepared Statements mit dynamischen Parametern realisieren Sie über sqlalchemy.sql.text:
Dynamische Parameter werden mit einem vorangestellten Doppelpunkt bezeichnet (z. B.
:id).Die Parameter übergeben Sie als Dictionary beim Aufruf von
execute.
python
from sqlalchemy.sql import text
with self.engine.begin() as conn:
stmt = text('SELECT id FROM _exported_records WHERE id = :id')
result = conn.execute(stmt, {"id": record_id}).fetchone()
