Projektbericht zur Nutzung der Solr/Lucene-Suchengine in einem Zahlungskontrollsystem
Michael Meyer
Berenberg, Hamburg
DOAG Nürnberg, 2015
Agenda
• Berenberg „Auf einen Blick“
• Projekt „Erweiterungen eines Zahlungskontrollsystems (ZKS)“
• Ausgangslage
• Erweiterungen / Anforderungen
• Werkzeugauswahl
• Oracle Text
• Solr, Lucene
• Elastic Search, Lucene
• Genereller Ablauf
• Beispielabfragen, Anwender-GUI, Admin-GUI
• Resümee
• Ausblick: Weitere Anwendungsfälle
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem2
Berenberg „Auf einen Blick“ (1/2)
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem3
Berenberg „Auf einen Blick“ (2/2)
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem4
Erweiterungen eines Zahlungskontrollsystems (ZKS) –Ausgangslage
• Initiale Version 2006
• ZKS prüft alle ein- und ausgehenden Zahlungen auf
• Verstöße gegen Embargorichtlinien
• Währungen im Zusammenhang mit Schlüsselbegriffen(z.B. Zahlungen nach Kuba über US-Korrespondenzbank)
• Doppeltzahlungen, -einreichungen
• (keine Prüfung auf Verhaltensmuster (Smurfing etc.))
• Auffällige Zahlungen werden ausgesondert und können nach Compliance-Freigabe wieder dem Ablauf zugeführt werden.
• Manuelle hausinterne Pflege der Schlüsselbegriffe (Excel). CSV-Import via external table
• Alle Zahlungen, Freigaben, Abläufe werden für 10 Jahre archiviert
• Datenlieferanten sind z. B.• Office of Foreign Assests Control (OFAC)• FBI• United Nations Security Council• Verordnungen der EU-KOMMISSION• BaFin (Bundesanstalt für Finanzdienstleistungsaufsicht)• Anordnung der Bundesministeriums für Wirtschaft und Technologie • Warnmitteilungen des Bankenverbands • hausinterne Listen
• → Umsetzung mit Oracle Text
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem5
Oracle Text
Altsystem
SQL> desc zks2.schluesselbegriff;
Name Type
------------------------------ --------------
SCHLUESSELBEGRIFFID NUMBER(12)
SCHLUESSELDATEIID NUMBER(12)
SCHLUESSELBEGRIFF_TEXT VARCHAR2(4000)
SQL_SCHLUESSELBEGRIFF VARCHAR2(4000)
AKTIV CHAR(1)
ERSTELLT_ID NUMBER(12)
ERSTELLT_ZST DATE
GEAENDERT_ID NUMBER(12)
GEAENDERT_ZST DATE
CREATE INDEXRULE_ZAHLUNG
ON SCHLUESSELBEGRIFF(SQL_SCHLUESSELBEGRIFF)
INDEXTYPE IS CTXSYS.CTXRULE;
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem6
Oracle Text
Prüfungs-SQL:FOR rec IN (SELECT * FROM SCHLUESSELBEGRIFF s
WHEREs.AKTIV = 'J'
AND matches ( s. SQL_SCHLUESSELBEGRIFF, zahlung. TEXTEMBARGO) > 0) LOOP
INSERT INTO QUARAFAELLE q ( ZAHLUNGSID, DATEITYPID , DATEIID , KENNUNG
, SCHLUESSELBEGRIFF, QUARAKENNZEICHEN
, QUELLE_SCHLUESSELBEGRIFF, STATUS, STATUSTEXT)
VALUES (……………);
END LOOP;
Beispiele für SQL_SCHLUESSELBEGRIFF
• 'GASTELUM' and 'SERRANO' and 'GUADALUPE'
• 'MIGUEL' and 'JUNIOR' and 'NARANJO' and 'MORENO'
• 'WIRTSCHAFTSUNION' and 'LUGANSK' or 'LUGANSKIY' and 'EKONOMICHESKIY' and 'SOYUZ'
TEXTEMBARGO
wird aus den Zahlungsdaten aufgebaut (Inhaber, Gegenseite, Verwendungszwecke,…)
Performance: Prüfung von ca. 20‘000 Zahlungen in 60 Sek. ( = 333 pro Sek., bei 18‘000 Schlüsselbegriffen)
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem7
gewünschte Erweiterungen / Anforderungen
• Unscharfe Suchen (fuzzy logic)
• Beispiele: „Sergey“, „Sergei“, „Sergej“„Osama“, „Usama“
• Nachvollziehbare Scoringwerte, („warum ist dieser Vorgang auffällig?“)
• Datenlieferung der Schlüsselbegriffe durch externen Dienstleister. Täglicher automatisierter Import
• Wesentlich mehr Datenquellen für die Schlüsselbegriffe
Stand Aug. 2015: 200+ Quellen
• Wesentlich mehr Schlüsselbegriffe
Stand Aug. 2015: 150‘000
• Möglichkeit für den Fachbereich, einfach eigene Schlüsselbegriffe zu ergänzen (mit Freigabesystem)
Stand Aug. 2015: 2‘000
• „Google“-artige Recherchemöglichkeit über alle Schlüsselbegriffe für den Fachbereich
• Tägliche Prüfung der Stammdaten
Neukunden vs. alle Schlüsselbegriffe
Bestandskunden vs. heutige Schlüsselbegriffsänderungen
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem8
Werkzeugauswahl
Kandidaten
• Oracle Text
• Solr / Lucene
• Elastic / Lucene
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem9
Oracle Text
Table- und Index
CREATE TABLEZKS2.WC_ENTITIES
( WC_ENTITIES_ID NUMBER(12,0) NOT NULL ENABLE,
ENT_ID NUMBER,
NAME VARCHAR2(4000),
SCHLUESSELBEGRIFF_CONTEXTVARCHAR2(4000),
CONSTRAINT XPKWC_ENTITIES PRIMARY KEY (WC_ENTITIES_ID)
);
CREATE INDEXZKS2.RULE_SCHLUESSEL_CONTEXT ON ZKS2.WC_ENTITIES
( SCHLUESSELBEGRIFF_CONTEXT)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS ('STORAGE WCO_BASICSTORAGE LEXER WCO_PREFERENCES
STOPLIST WCO_STOPLIST TRANSACTIONAL SECTION GROUP
WCO_SECTION_GROUP WORDLIST WCO_WORDLIST MEMORY 500M')
PARALLEL 4;
… komplettes SQL im Vortragsmanuskript
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem10
SCORE NAME
86 MOHAMMED OMAR GHULAM NABI
86 OMAR MOHAMMED
86 OMAR MOHAMMED MULLAH
76 MUHAMMAD OMAR ZADRAN MOHAMMAD OMAR JADRAN
76 JOUMAA MOHAMAD SAID JOMAA MOHAMED SAID
76 ZADRAN MUHAMMAD OMAR JADRAN MOHAMMAD OMAR
71 MOHAMMAD IBRAHIM OMARI IBRAHIM HAQQANI
69 AL AHMARI HAMED MOHAMMED
67 HOMAYOON MOHAMMAD
67 OSMAN MOHAMED
Oracle Text - Query
SELECT *
FROM (SELECT/*+ FIRST_ROWS(10) */
score (1) score ,
t.name
FROMwc_entities t
where contains ( schluesselbegriff_context , 'NDATA(NAME,"OMAR MOHAMMED")',1) > 0
ORDER BYscore DESC
) WHERE ROWNUM<=10;
- Ergebnis:
Performance: Prüfung von ca. 2 ‘000 Zahlungen = 60 Sekunden (= 33 /Sek., bei 18‘000 Schlüsselbegriffen) – Faktor 10
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem11
http://docs.oracle.com/cd/B28359_01/text.111/b28304/ascore.htm : To calculate a relevance score for a returned document in a word query, Oracle Text uses an inverse frequency algorithm based on Salton's formula.
Solr / Lucene, Elastic / Lucene
• Lucene (1999, Doug Cutting), Solr (2004, Yonik Seeley), Elastic ( 2010)
• Java
• Top Level Apache Projects (Lucene: 2005, Solr: 2007)
• Solr, Elastic:
• Datatypes: Text, Integer, Double, Date, Time, Spatial
• REST API
• Structure:
• Collections [=contain Documents (Document = fields & values; A field can occur multiple times, Documents are immutable (update = delete + insert new version)]
• Popularity (http://db-engines.com/en/ranking/search+engine)
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem12
Solr / Lucene, Elastic / Lucene
• Solr-Sample Request: http://localhost:8983/solr/gsl/browse?q=hamburg
• Elastic-Sample Request: curl –XGET ´http://localhost:8984/gsl/browse?q=hamburg´
• Response:
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem13
Solr / Lucene, Elastic / Lucene
Features
• Faceting („group by“)
• Pivot
• Language Detection
• Spell Checking, Stemming
• Suggester (incremental search)
• Pagination of Results
• Query Elevation („sponsored search“, „editorial boosting“)
• Near time Searching
• Highlighting
• Debug
• Synonyms
• Stopwords (index time, query time)
• Unstructured Content (PDF, MS Office, email, instant messages, …)
• Statistics (avg-query-time, number-of-queries, …)
• Data Import Handler
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem14
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem15
Solr / Lucene, Elastic / Lucene: Struktur, Abgrenzung 1/2
Lucene
Lucene
Solr / Lucene, Elastic / Lucene: Struktur, Abgrenzung 2/2
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem16
Solr / Lucene – bekannte Anwender
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem17
• Instagram: geo-search API
• AOL: channel: Yellow Pages, Music, NFL Sports, AOL Recipes, Real Estate, Autos, Travel, StyleList
• SourceForge: faceted search across all its projects
• eBay: search German Classified sites (“Kleinanzeigen”)
• Netflix: site search feature
• Weitere: https://wiki.apache.org/solr/PublicServers
Solr / Lucene – Scaling, Distribution
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem18
Quelle: Apache Solr Reference Guide
Elastic: analoge Strukturen (Default: 5 Shards)
Solr – Configuration Files (solrconfig.xml) 1/3
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem19
Solrconfig.xml defines
• indexing options
• RequestHandlers
• ResponseWriters
• Highlighting
• Spellchecking
• Caches, warmup
• is heavily commented
Solr – Configuration Files (schema.xml) 2/3
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem20
Schema.xml defines
• the fields to be indexed
• the type for the field (text_general, string, integers, etc.)
• Id’s
Solr – Configuration Files (schema.xml) 3/3
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem21
Solr – Adding Data
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem22
Solr – Adding Data, Deleting Data
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem23
Elastic
• Während des Auswahlzeitraumes: Version 0.7 → Ausschluss
Basics:
• Easier to get started with
• Elasticsearch is more dynamic – data can easily move around the cluster as its nodes come and go
• Query: JSON – Formatcurl -XGET "http://localhost:8984/gsl/_search" -d '{
"query" : {"query" : "hamburg","fields" : "name"
}}‚
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem24
Elastic
• JSON – Format. Beispiel: Filterquery auf 2 Felder: b between 4 and 8 AND a=´John´{
"query": {"filtered": {
"query": {"match_all": {}
},"filter": {
"and": [{
"range" : {"b" : {
"from" : 4, "to" : 8
}},
},{
"term": {"a": "john"
}}
]}
}}
}
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem25
Entscheidungsfindung
Kandidat Pro Contra
Oracle Text • ist Teil der Datenbank (Sicherung, Hochverfügbarkeit)
• Scoringwert „nicht erklärbar“• (Performance)
Solr / Lucene• Scoringwert erklärbar• Performance• GUIs• Große und aktive
Community• Skalierbarkeit
• zusätzliche Infrastruktur
Elastic / Lucene • Version 0.7 (zum Projektstart)• zusätzliche Infrastruktur• (www.elastic.co)
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem26
→ Entscheidung für Solr / Lucene
Zahlungskontrollsystem: Genereller Ablauf (Oracle Text = „alt“)
• Manuelle Pflege der Schlüsselbegriffliisten (Excel, csv).
• Ca. 18‘000 Einträge
• Import der csv-Datei via external Table
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem27
Zahlungskontrollsystem: Genereller Ablauf (Solr/Lucene = „neu“)
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem28
alt neu
Genereller Ablauf (Solr/Lucene = „neu“) – 1/2
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem29
Zahlungskontrollsystem: Genereller Ablauf (Solr/Lucene = „neu“)
• Automatischer Import der täglichen Datenlieferung von WorldCompliance
• Ca. 150‘000 Einträge,
• pro Tag 300 … 5‘000 Änderungen
• Ca. 110 neue Sätze/Tag
• Ca. 40 Löschungen/Tag
• Manuelle Pflege von hausinternen Schlüsselbegriffen (Oracle-Tabelle)
• ca. 2‘000 Einträge
• Täglicher Upload der Änderungen(WorldCompliance, hausinterne Schlüsselbegriffe)
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem30
Genereller Ablauf (Solr/Lucene = „neu“) – 2/2
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem31
„Problem“: Berechnung / Nachvollziehbarkeit des Score-Wertes
• Einflussfaktoren:
• Häufigkeit und Stellung der Suchbegriffe im gefundenen Dokument.
• Gesamtanzahl der Dokumente
• TF-IDF-Formel
tf(t in d) = Term Frequency (number of times term t appears in document d)
idf(t) = Inverse Document Frequency
��� � = 1 + ln(number_of_documents
1 + number_of_documentsinwhichtappers)
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem32
„Problem“: Berechnung / Nachvollziehbarkeit des Score-Wertes
• http://localhost:8983/solr/gsl/browse?q=hamburg AND irisl&debugQuery=true
• Debugausgabe:
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem33
„Problem“: Berechnung / Nachvollziehbarkeit des Score-Wertes
• Wunschergebnis: „2“ -> Änderung de Similarity-Klasse <similarity class="de.berenberg.zks.lucene.similarity.ZksSimilarity"/>
… Java-Code im Vortragsmanuskript
• http://localhost:8983/solr/gsl/browse?q=hamburg AND irisl&debugQuery=true
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem34
„Problem“: Berechnung de Score-Wertes bei unscharfer Suche
• http://localhost:8983/solr/gsl/browse?q=lukoil~
• lukoil → LUKOYL: ein Buchstabe muss getauscht werden
• Score: 1 – 1/6 = 0.833333
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem35
Lucene / Solr – ZKS-Spezifika
• „Mindestübereinstimmungsquote“ bei fuzzy search
• http://localhost:8980/solr/gsl/select?q=hamburg~0.70
• IMO-Nummern (IMO = International Maritime Organization, London)
• = Schiffnummer (ca. = Fahrgestellnummer)
• für gewerbliche Schiffe
• immer 7-stellig (z.B.: „IMO 5245434“)
• werden z.B. im Verwendungszweck angegeben („Salary IMO 5245434“)
• → Boosting 7-stelliger Zahlen: 5245434^10
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem36
Name Score
IRISL Europe GmbH (Hamburg) 1
LUKOIL Hamburg GmbH 1
HAMBURGER STURM 0.71428573 0.71428573 = 1 – (2/7)7 = Length(„hamburg“)
GUI-Ablauf
Suchstring: beijing~ international~ transportation~ service~
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem37
Allg. Researchanfragen (Textsearch über Defaultfield):
Beispielabfragen
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem38
Allg. Researchanfragen (Solr-Query-Syntax):
Beispielabfragen
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem39
Allg. Researchanfragen (facting, query auf individuelle Felder ):
Beispielabfragen
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem40
Solr – Query-Syntax-Examples
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem41
Solr – Admin-GUI
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem42
Solr – Admin-GUI
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem43
Solr – Admin-GUI
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem44
Solr – Admin-GUI
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem45
Solr – Admin-GUI / Performance
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem46
15.88 ms = 63 Requests / Sekunde*Knoten(+http-Setup)
Resümee
+ Unscharfe Suchen (fuzzy logic)
+ Scoringwert erklärbar (nach Austausch einer Javaklasse)
+ Solr: Konfiguration via XML-File, nicht im Request (Solr vs. Elastic)
+ Gute Admin-Oberfläche
− Aber: zusätzliche Infrastruktur (Backup, Recovery, Hochverfügbarkeit) im Vergleich zu Oracle Text
• Solr vs. Elastic
• Solr: „truely“ Open Source vs. Elastic
• Solr 5.xx:
+ XML-Config-Files via REST änderbar
− Einstellung der JBoss-Unterstützung (https://issues.apache.org/jira/browse/SOLR-4792)
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem47
Ausblick: weitere Anwendungsfälle
• Kundensuche
• Suche in Notizen
• Wertpapiersuche
• internes Telefonbuch
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem48
Kontaktdaten
Michael MeyerIT, Organisation & VerwaltungAbteilungsdirektorLead Database Architect
Joh. Berenberg, Gossler & Co. KGNeuer Jungfernstieg 20D-20354 Hamburg
Telefon: +49 (0) 40-350 60-186Fax: +49 (0) 40-350 60-954E-Mail [email protected]
Internet: www.berenberg.de
06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem49