49
Projektbericht zur Nutzung der Solr/Lucene-Suchengine in einem Zahlungskontrollsystem Michael Meyer Berenberg, Hamburg DOAG Nürnberg, 2015

Projektbericht zur Nutzung der Solr/Lucene-Suchengine in einem … bei... · Solr / Lucene – bekannte Anwender 17 06.11.2015 Projektbericht zur Nutzung der SolrLucene-Suchengine

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

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