Solr / Lucene

Werbung
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
Herunterladen