Zum Hauptinhalt springen

Indexing-Services

Vor über 3 Wochen aktualisiert

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 .ini ab.

  • Beispiel: mymodule.ini neben mymodule.py

  • Die 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

id

Muss in der smartindexing.xml eindeutig sein. Ändern Sie die id nicht mehr, sobald die Regel in mindestens einem Archiv verwendet wird.

name

Der angezeigte Name im SmartIndexing-Auswahldialog

rule

Muss vom Typ service sein

Erster Parameter

Der Name des Moduls (Dateiname ohne .py) in doppelten Anführungszeichen

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 None oder eine leere Liste zurückgeben.

Zusätzliche Parameter aus der smartindexing.xml

  • In **kwargs sind alle zusätzlichen Parameter aus der smartindexing.xml enthalten.

  • Im obigen Beispiel wäre das der Parameter group mit dem Wert 1.


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() von get_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 None oder 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

re

Standard-Python-Modul für reguläre Ausdrücke

regex

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.config ist ein configparser.ConfigParser-Objekt aus der Python-Standardbibliothek.

  • Wenn keine INI-Datei vorhanden ist, ist self.config leer.


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.engine ist ein SQLAlchemy Engine-Objekt.

  • Verwenden Sie self.engine.begin() mit einem with-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()
Hat dies deine Frage beantwortet?