SearchSystem / SearchLayer

Was ist die SearchLayer?

In der B2B werden für verschiedene Zwecke (Volltextsuche, Archivsuche, Systemweiche, CCM) Suchindexe verwendet. Bisher wurde dies durch mehrere tausend direkte Zugriffe auf Apache Lucene core Version 2.4.1 (Lucene2) realisiert. Dadurch waren Aktualisierungen des Suchsystems sehr schwierig:

  • Das Upgrade der Lucene Version war nicht möglich.
  • Der Übergang auf eine andere Suchtechnologie (z.B. BDM oder ElasticSearch) war nicht möglich.

Aus diesem Grund wurde eine abstrakte Zwischenschicht, die SearchLayer API, für den Zugriff auf die Indexe definiert. Diese enthält nur etwa 30 allgemein definierte Befehle wie “search”, “update” etc. Die B2B wurde danach so umgestellt, dass sie nur noch auf diese allgemeinen Befehle zugreift. Zur Ausführung werden die Befehle dann durch die SearchLayer an eine konkrete Implementierung (derzeit Lucene2.4.1, BDM) weitergeleitet.

Durch diese Trennschicht zwischen B2B und der konkreten Such-Technologie können demnächst mit vergleichsweise wenig Aufwand Implementierungen modernerer Suchtechnologien wie Lucene 8, ElasticSearch etc. erstellt werden.

concept

Die SeachLayer API ist mit dem B2B-Release 1.13.3_2.2 veröffentlicht worden. Das bedeutet, dass die SearchLayer in allen Systemen mit aktuellen Deployments aktiv ist.

Extension SEARCH_LAYER_CONFIGURATION

Seit Einführung der SearchLayer-API können die Systemeinstellungen der Suchtechnologie in einer neuen Extension SEARCH_LAYER_CONFIGURATION zusammengefasst werden.

Die Extension SEARCH_LAYER_CONFIGURATION muss derzeit verwendet werden, wenn Sie den CCM Prozessmonitor oder die Suchtechnologien LUCENE2MULTIREADER oder BDM verwenden.

Ist die Extension nicht vorhanden, wird automatisch die Suchtechnologie Lucene2 verwendet, und es werden alle alten Einstellungen für die Indexe aus den vorhandenen GlobalProperties ausgelesen.

Aufbau der Extension

Die Extension SEARCH_LAYER_CONFIGURATION besteht aus zwei Kopfzeilen, in denen die zu verwendende Suchtechnologie (SEARCH_SYSTEM_VENDOR) sowie die vorhandenen Indexe (SEARCH_TYPES) definiert werden. Danach kommen für jeden der aufgezählten Search-Types ein Block aus einer oder mehreren Zeilen, in denen Grundinformationen über den Index angegeben werden. Jede Zeile des Blocks beginnt mit dem Namen des Search-Types. Beispiele, wie die Extension aussehen kann, stehen weiter unten bei den Suchtechnologien

Suchtechnologien (SEARCH_SYSTEM_VENDOR)

SEARCH_SYSTEM_VENDOR Beschreibung
LUCENE2 Implementierung der bisherigen Suchtechnologie Apache Lucene 2.4.1
LUCENE2MULTIREADER Lucene 2.4.1 Implementierung, die einen Index zum Schreiben und mehrere zum Lesen verwendet
BDM Implementierung, die mit einem ElasticSearch-basierten BDM-Server arbeitet
[LUCENE8] geplante Implementierung der modernsten Lucene Version; noch nicht verfügbar; Entwicklungspartner gesucht
[ELASTICSEARCH] geplante Implementierung einer Server-basierten ElasticSearch Implementierung; noch nicht verfügbar; Entwicklungspartner gesucht

Index-Typen (SEARCH_TYPES)

Derzeit können folgende SEARCH_TYPES konfiguriert werden.

SEARCH_TYPES Index
FULLTEXT Volltextindex, muss konfiguriert werden
ARCHIVE Archivindex
CCM CCM-Index
SYSTEMSPLIT_METERINGPOINT Systemweiche, Meldepunktindex
SYSTEMSPLIT_METERINGPOINTTEMP Systemweiche, Meldepunktindex 2 (Rebuild)
SYSTEMSPLIT_RESPONSE Systemweiche, Antwortindex
  Prozessmonitor: Vier Indexe pro Prozess
BackendObject_<PROCNAME> ProzessMonitor, BackendObjectIndex
ControlPoint_<PROCNAME> ProzessMonitor, ControlPointIndex
InstanceId_<PROCNAME> ProzessMonitor, InstanceIdIndex
InstanceOverview_<PROCNAME> ProzessMonitor, InstanceOverviewIndex

Index-Definitionen

LUCENE2

Property Wert Bedeutung
_PATH z.B. E:/testindex/ccm Pfad des Index-Verzeichnisses

Beispiel Extension SEARCH_LAYER_CONFIGURATION

SEARCH_SYSTEM_VENDOR=LUCENE2
SEARCH_TYPES=FULLTEXT,ARCHIVE,CCM,SYSTEMSPLIT_METERINGPOINT,
SYSTEMSPLIT_METERINGPOINTTEMP,SYSTEMSPLIT_RESPONSE,BackendObject_PROCNAME,
ControlPoint_PROCNAME,InstanceId_PROCNAME,InstanceOverview_PROCNAME

ARCHIVE_PATH=E:/index/arc

FULLTEXT_PATH=E:/index/fulltext

CCM_PATH=E:/index/ccm

SYSTEMSPLIT_METERINGPOINT_PATH=E:/index/sysspl1
SYSTEMSPLIT_METERINGPOINTTEMP_PATH=E:/index/sysspl2
SYSTEMSPLIT_RESPONSE_PATH=E:/index/resp

BackendObject_PROCNAME_PATH=../tomcat_all/index/bpt/OBJECT_INDEX/PROCNAME
ControlPoint_PROCNAME_PATH=../tomcat_all/index/bpt/CONTROL_POINT_INDEX/PROCNAME
InstanceId_PROCNAME_PATH=../tomcat_all/index/bpt/INSTANCE_ID_INDEX/PROCNAME
InstanceOverview_PROCNAME_PATH=../tomcat_all/index/bpt/INSTANCE_OVERVIEW_INDEX/PROCNAME

Lucene2Multireader

Property Wert Bedeutung
_PATH z.B. E:/index/arc1; E:/index/arc2 Falls dieser Implementierung genutzt wird, können in der Pfadangabe mehrere Indexpfade Semikolon-separiert angegeben werden. Der erste Pfad wird als lesender und schreibender Index verwendet, alle anderen Pfade werden als lesende Indexe verwendet. Falls nur ein Pfad angegeben wird, verhält sich dieser Anbieter wie Lucene2.

Die Angabe mehrerer Semikolon-separierter Pfade ist nur in Kombination mit der Extension SEARCH_LAYER_CONFIGURATION sowie mit dem SEARCH_SYSTEM_VENDOR=LUCENE2MULTIREADER möglich. In der alten GlobalProperty B3P_LUCENE_INDEX_FOLDER kann keine Semikolon-separierte Liste angegeben werden.

Beispiel Extension SEARCH_LAYER_CONFIGURATION

SEARCH_SYSTEM_VENDOR=LUCENE2MULTIREADER
SEARCH_TYPES=FULLTEXT,ARCHIVE,CCM, SYSTEMSPLIT_METERINGPOINT, SYSTEMSPLIT_METERINGPOINTTEMP, SYSTEMSPLIT_RESPONSE

FULLTEXT_PATH=E:/index/fulltext

ARCHIVE_PATH=E:/index/arc1;E:/index/arc2;E:/index/arc3

CCM_PATH=E:/index/ccm1

SYSTEMSPLIT_METERINGPOINT_PATH=E:/index/sysspl1
SYSTEMSPLIT_METERINGPOINTTEMP_PATH=E:/index/sysspl2
SYSTEMSPLIT_RESPONSE=E:/index/resp

Lucene2Multireader kann für den CCM-Index nicht generell empfohlen werden! Das Aktualisieren und Löschen von Dokumenten geschieht nur im ersten, schreibenden Index. Im CCM-Index werden aber auch ältere Nachrichten aktualisiert, manchmal auch solche, die vor Wochen erstellt wurden. Wird der schreibende Index als leerer Index angelegt, werden solche Updates nicht klappen.

BDM

Die Installation und Konfiguration des BDM Servers ist hier beschrieben: BDM Administration

Property Wert Bedeutung
BDM_SEEDS z.B. 192.168.1.158 Kommaseparierte IP-Adressen der BDM-Knoten aus topology.xml/node/ip
BDM_PORTS z.B. 2501 Kommaseparierte Ports der BDM-Knoten aus topology.xml/node/bdm-service-runtime-port
BDM_HOST localhost B2B Host. Immer localhost
BDM_<SEARCH_TYPE>
_SERVICE_CLASSNAME
com.nextlevel.bdm.
searchsystem.extension.api.
ArchiveSearchSystemService
Implementierung des Service, der die Verbindung zum BDM-Server realisiert. Siehe unten im Beispiel
BDM_FRAME_SIZE z.B. 300 Maximale Übertragungsdatengröße in MB bei einer Verbindung mit BDM (z.B Add oder Search) Bei Überschreitung kann der Batch gespaltet werden.
BDM_CHECK_FRAME_SIZE true/false Soll die Framegröße geprüft werden?
BDM_METHOD_CALL_TIMEOUT z.B. 120000 B2B wartet bei jeder Anforderung auf die Antwort von BDM. Nach dieser Zeit (Millisekunden) gibt die B2B eine Timeoutfehlermeldung aus, wenn sich BDM nicht meldet. Default=60000
BDM_MAX_RETRY_COUNT 3 wenn sich BDM nicht rechtzeitig meldet, wiederholt B2B die Anforderung. Nach maximaler Wiederholung gibt die B2B Timeoutfehlermeldung aus, wenn sich BDM nicht meldet.

Beispiel Extension SEARCH_LAYER_CONFIGURATION

SEARCH_SYSTEM_VENDOR=BDM
SEARCH_TYPES=ARCHIVE,FULLTEXT,CCM

BDM_SEEDS=192.168.1.158
BDM_PORTS=2501
BDM_HOST=localhost
BDM_ARCHIVE_SERVICE_CLASSNAME=com.nextlevel.bdm.searchsystem.extension.api.ArchiveSearchSystemService  
BDM_FULLTEXT_SERVICE_CLASSNAME=com.nextlevel.bdm.searchsystem.extension.api.FulltextSearchSystemService
BDM_CCM_SERVICE_CLASSNAME=com.nextlevel.bdm.searchsystem.extension.api.CCMSearchSystemService
BDM_FRAME_SIZE=300
BDM_CHECK_FRAME_SIZE=true
BDM_METHOD_CALL_TIMEOUT=120000
BDM_MAX_RETRY_COUNT=3

Fehlerbehandlung

Zur Fehleranalyse erhalten alle Einträge in Lucene-Indizes das Feld written. Darin wird das Datum kurz vor dem Schreiben in den Index gespeichert. Dies kann helfen, festzustellen, ob ein Wert zu einem gewissen Zeitpunkt bereits im Index vorhanden war oder nicht. Insbesondere bei Indizes, welche eine INDEX_SYNC-Tabelle (Datenbanktabelle) nutzen, ist dieser Zeitpunkt relevant.

View Me   Edit Me