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 2 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Berenberg „Auf einen Blick“ (1/2) 3 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Berenberg „Auf einen Blick“ (2/2) 4 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem 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 5 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem 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 INDEX RULE_ZAHLUNG ON SCHLUESSELBEGRIFF(SQL_SCHLUESSELBEGRIFF) INDEXTYPE IS CTXSYS.CTXRULE; 6 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Oracle Text Prüfungs-SQL: FOR rec IN (SELECT * FROM SCHLUESSELBEGRIFF s WHERE s.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) 7 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem 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 8 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Werkzeugauswahl Kandidaten • Oracle Text • Solr / Lucene • Elastic / Lucene 9 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Oracle Text Table- und Index CREATE TABLE ZKS2.WC_ENTITIES ( WC_ENTITIES_ID NUMBER(12,0) NOT NULL ENABLE, ENT_ID NUMBER, NAME VARCHAR2(4000), SCHLUESSELBEGRIFF_CONTEXT VARCHAR2(4000), CONSTRAINT XPKWC_ENTITIES PRIMARY KEY (WC_ENTITIES_ID) ); CREATE INDEX ZKS2.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 10 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Oracle Text - Query SELECT * FROM (SELECT /*+ FIRST_ROWS(10) */ score(1) score, t.name FROM wc_entities t where contains(schluesselbegriff_context, 'NDATA(NAME,"OMAR MOHAMMED")',1) > 0 ORDER BY score DESC ) WHERE ROWNUM<=10; - Ergebnis: 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 http://docs.oracle.com/cd/B28359_01/t ext.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. Performance: Prüfung von ca. 2 ‘000 Zahlungen = 60 Sekunden (= 33 /Sek., bei 18‘000 Schlüsselbegriffen) – Faktor 10 11 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem 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: • • 12 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 Zahlungskontrollsystem Solr / Lucene, Elastic / Lucene 13 • 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 Zahlungskontrollsystem Solr / Lucene, Elastic / Lucene Features 14 • 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 Zahlungskontrollsystem Solr / Lucene, Elastic / Lucene: Struktur, Abgrenzung 1/2 L u c e n e 15 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Solr / Lucene, Elastic / Lucene: Struktur, Abgrenzung 2/2 16 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Solr / Lucene – bekannte Anwender • 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 17 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Solr / Lucene – Scaling, Distribution Elastic: analoge Strukturen (Default: 5 Shards) Quelle: Apache Solr Reference Guide 18 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Solr – Configuration Files (solrconfig.xml) 1/3 Solrconfig.xml defines • indexing options • RequestHandlers • ResponseWriters • Highlighting • Spellchecking • Caches, warmup • is heavily commented 19 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Solr – Configuration Files (schema.xml) 2/3 Schema.xml defines • the fields to be indexed • the type for the field (text_general, string, integers, etc.) • Id’s 20 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Solr – Configuration Files (schema.xml) 3/3 21 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Solr – Adding Data 22 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Solr – Adding Data, Deleting Data 23 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem 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 – Format curl -XGET "http://localhost:8984/gsl/_search" -d '{ "query" : { "query" : "hamburg", "fields" : "name" } }‚ 24 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem 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" } } ] } } } } 25 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Entscheidungsfindung Kandidat Pro Contra Oracle Text • ist Teil der Datenbank • Scoringwert „nicht erklärbar“ • (Performance) (Sicherung, Hochverfügbarkeit) Solr / Lucene Elastic / Lucene • • • • Scoringwert erklärbar Performance GUIs Große und aktive Community • Skalierbarkeit • zusätzliche Infrastruktur • Version 0.7 (zum Projektstart) • zusätzliche Infrastruktur • (www.elastic.co) → Entscheidung für Solr / Lucene 26 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem 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 27 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Zahlungskontrollsystem: Genereller Ablauf (Solr/Lucene = „neu“) alt 28 06.11.2015 neu Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Genereller Ablauf (Solr/Lucene = „neu“) – 1/2 29 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem 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) 30 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Genereller Ablauf (Solr/Lucene = „neu“) – 2/2 31 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem „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( 32 06.11.2015 number_of_documents ) 1 + number_of_documentsinwhichtappers Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem „Problem“: Berechnung / Nachvollziehbarkeit des Score-Wertes • http://localhost:8983/solr/gsl/browse?q=hamburg AND irisl&debugQuery=true • Debugausgabe: 33 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem „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 34 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem „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 35 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Lucene / Solr – ZKS-Spezifika • „Mindestübereinstimmungsquote“ bei fuzzy search • http://localhost:8980/solr/gsl/select?q=hamburg~0.70 Name Score IRISL Europe GmbH (Hamburg) 1 LUKOIL Hamburg GmbH 1 HAMBURGER STURM • 36 0.71428573 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 Zahlungskontrollsystem 0.71428573 = 1 – (2/7) 7 = Length(„hamburg“) GUI-Ablauf Suchstring: beijing~ international~ transportation~ service~ 37 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Beispielabfragen Allg. Researchanfragen (Textsearch über Defaultfield): 38 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Beispielabfragen Allg. Researchanfragen (Solr-Query-Syntax): 39 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Beispielabfragen Allg. Researchanfragen (facting, query auf individuelle Felder ): 40 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Solr – Query-Syntax-Examples 41 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Solr – Admin-GUI 42 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Solr – Admin-GUI 43 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Solr – Admin-GUI 44 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Solr – Admin-GUI 45 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Solr – Admin-GUI / Performance 15.88 ms = 63 Requests / Sekunde*Knoten (+http-Setup) 46 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem 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 • • 47 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 Zahlungskontrollsystem Ausblick: weitere Anwendungsfälle • Kundensuche • Suche in Notizen • Wertpapiersuche • internes Telefonbuch 48 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem Kontaktdaten Michael Meyer IT, Organisation & Verwaltung Abteilungsdirektor Lead Database Architect Joh. Berenberg, Gossler & Co. KG Neuer Jungfernstieg 20 D-20354 Hamburg Telefon: Fax: E-Mail +49 (0) 40-350 60-186 +49 (0) 40-350 60-954 [email protected] Internet: www.berenberg.de 49 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine in einem Zahlungskontrollsystem