Computerlinguistik im Service Management eine neue Suche für TOPdesk Anna Hunecke Diplom Computerlinguistin TOPdesk A.Hunecke@topdesk.com
Inhalt TOPdesk Suchen in TOPdesk Lucene Lucene in TOPdesk
TOPdesk Entwickelt Service-Management Software TOPdesk Hauptsitz in Delft Niederlassungen in Deutschland, England und Belgien Ca. 320 Mitarbeiter Ca. 3500 Kunden In 6 Sprachen übersetzt
Service Management Kundenservice (Helpdesk) Interner Helpdesk-Support Verwaltung von IT-Hardware und Software Planung von Projekten und Aktivitäten
Service Management in TOPdesk Standardsoftware Verschiedene Module o Besuchermanagement o Reservierungsmanagement o etc.
Aufbau von TOPdesk Daten werden in einer Datenbank abgelegt Ein zentraler Server Nutzer greifen über den Webbrowser auf TOPdesk zu
Suchen Im Laufe der Zeit sammeln sich viele Daten und vor allem Wissen in der TOPdesk-Datenbank an Eine benutzerfreundliche Suche ist wichtig
Suchen in TOPdesk bisher Schnell Nur Volltextsuche möglich Syntax: AND, OR, NOT, Suchindex in der Datenbank gespeichert o Datenbankgröße wird verdoppelt (z.b. 10,5 GB von 20 GB in TOPhelp) o Suchen belastet den normalen Verkehr mit der Datenbank o Generieren des Index ist langsam
So soll die neue Suche aussehen Unterstützung für eine vielfältigere Syntax, vor allem Wildcards und Fuzzy Suche Suche soll mindestens genauso schnell sein wie die alte
Lucene Open-Source Java Bibliothek zum Erzeugen und Durchsuchen von Textindizes Unterstützt eine reichhaltige Syntax Wird unter anderem von der Wikipedia und Monster verwendet http://lucene.apache.org/
Wie funktioniert Lucene? Schritt 1: Indizieren
Wie funktioniert Lucene? Schritt 2: Suchen
Wie funktioniert Lucene? Schritt 1: Indizieren
Indizieren: Dokumente Typischerweise ist ein Dokument ein Artikel, Kapitel in einem Buch oder eine HTML-Seite Dokumente sind strukturiert: Titel, Abschnitt, Paragraph... Dokumente können Meta-Informationen haben: Autor, Datum, Thema... Dokumentstruktur und Metadaten können in Lucene mit Feldern dargestellt werden
Indizieren: Analyzer Analyzer (oder besser, Tokenizer) verwandelt den Text des Dokuments in Tokens: o Entfernung von Satz- und Leerzeichen o Entfernung von Funktionswörtern o Morphologische Analyse Verschiedene Analyzer für Lucene verfügbar
Indizieren: Index Enthält Terme (= Wort + Dokumentfeld) Invertierter Index: Listet die Dokumente in denen ein Term vorkommt Term1 -> doc15, doc50,... Term2 -> doc39, doc40,...... Außerdem Meta-Informationen über den Term o o o Term frequency Position Document frequency
Demo Analyzer
Wie funktioniert Lucene? Schritt 2: Suchen
Suchen: Query Vielfältige Query Syntax: o AND, OR, NOT o Phrasen o Wildcards o Fuzzy search o Intervall o Suche in einzelnen Feldern möglich
Suchen: Analyzer Zur Suche muss derselbe Analyzer verwendet werden wie bei der Erstellung des Suchindex
Suchen: Scoring score(q,d) = coord(q, d) * querynorm(q) * [tf(t in d) * idf(t)² * t.getboost() * norm(t, d)] Siehe: http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/similarity.html
Suchen: Scoring score(q,d) = coord(q, d) * querynorm(q) * [tf(t in d) * idf(t)² * t.getboost() * norm(t, d)] Term Frequency Siehe: http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/similarity.html
Suchen: Scoring score(q,d) = coord(q, d) * querynorm(q) * [tf(t in d) * idf(t)² * t.getboost() * norm(t, d)] Term Frequency Inverted Document frequency Siehe: http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/similarity.html
Suchen: Scoring score(q,d) = Menge der Query-Terme im Dokument coord(q, d) * querynorm(q) * [tf(t in d) * idf(t)² * t.getboost() * norm(t, d)] Term Frequency Inverted Document frequency Siehe: http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/similarity.html
Suchen: Scoring score(q,d) = Menge der Query-Terme im Dokument Normalisierungsfaktor coord(q, d) * querynorm(q) * [tf(t in d) * idf(t)² * t.getboost() * norm(t, d)] Term Frequency Inverted Document frequency Siehe: http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/similarity.html
Suchen: Scoring score(q,d) = Menge der Query-Terme im Dokument Normalisierungsfaktor coord(q, d) * querynorm(q) * [tf(t in d) * idf(t)² * t.getboost() * norm(t, d)] Term Frequency Inverted Document frequency Term boost Siehe: http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/similarity.html
Suchen: Scoring score(q,d) = Menge der Query-Terme im Dokument Normalisierungsfaktor coord(q, d) * querynorm(q) * [tf(t in d) * idf(t)² * t.getboost() * norm(t, d)] Term Frequency Siehe: Inverted Document frequency Term boost - Document boost - Feld boost - Längennormalisierung http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/similarity.html
Demo Rezeptindex
Lucene in TOPdesk: Index Für jedes Modul ein eigener Index Jedes Modul hat seine eigene Tabelle Jeder Eintrag in einer Tabelle in der Datenbank entspricht einem Dokument Die Spalten der Tabelle sind die Felder des Dokuments
Lucene in TOPdesk: Analyzer Verzicht auf linguistische Analyse Benutzung des Standard-Analyzers: o Entfernung von Satz- und Leerzeichen o Nur kleine Buchstaben o Erkennung von geläufigen Abkürzungen
Lucene in TOPdesk: Suchen Standardmäßig fuzzy Suche über alle Felder des Dokuments (=alle Spalten der Tabelle) Ergebnisse werden in einer Tabelle angezeigt Relevanz-Anzeige mit Pseudo- Prozentwerten
Benutzereingabe: error 9090 +(+(+((vrijetekst3:error~0.5 vrijetekst4:error~0.5 vrijetekst5:error~0.5 attvrijetekst4:error~0.5 extrabpersoonid:error~0.5 attvrijetekst5:error~0.5 ref_actiedoordynanaaml1:error~0.5 ref_soortmelding:error~0.5 korteomschrijving:error~0.5 verzoek:error~0.5 extraapersoonid:error~0.5 ref_domein:error~0.5 attvrijememo1:error~0.5 attvrijememo2:error~0.5 attvrijememo3:error~0.5 attvrijememo4:error~0.5 attvrijememo5:error~0.5 actie:error~0.5 ref_afdeling:error~0.5 ref_actiedoordynanaam:error~0.5 ref_specificatie:error~0.5 aanmeldernaam:error~0.5 vrijememo5:error~0.5 vrijememo4:error~0.5 aantekeningen:error~0.5 vrijememo3:error~0.5 vrijememo2:error~0.5 extraaid:error~0.5 ref_object:error~0.5 ref_configuratie:error~0.5 registratienummer:error~0.5 ref_debnummer:error~0.5 ref_vestiging:error~0.5 attvrijetekst2:error~0.5 externnummer:error~0.5 vrijememo1:error~0.5 attvrijetekst3:error~0.5 attvrijetekst1:error~0.5 vrijetekst2:error~0.5 vrijetekst1:error~0.5 ref_budgethouder:error~0.5 extrabid:error~0.5 naam:error~0.5)) +((vrijetekst3:9090~0.5 vrijetekst4:9090~0.5 vrijetekst5:9090~0.5 attvrijetekst4:9090~0.5 extrabpersoonid:9090~0.5 attvrijetekst5:9090~0.5 ref_actiedoordynanaaml1:9090~0.5 ref_soortmelding:9090~0.5 korteomschrijving:9090~0.5 verzoek:9090~0.5 extraapersoonid:9090~0.5 ref_domein:9090~0.5 attvrijememo1:9090~0.5 attvrijememo2:9090~0.5 attvrijememo3:9090~0.5 attvrijememo4:9090~0.5 attvrijememo5:9090~0.5 actie:9090~0.5 ref_afdeling:9090~0.5 ref_actiedoordynanaam:9090~0.5 ref_specificatie:9090~0.5 aanmeldernaam:9090~0.5 vrijememo5:9090~0.5 vrijememo4:9090~0.5 aantekeningen:9090~0.5 vrijememo3:9090~0.5 vrijememo2:9090~0.5 extraaid:9090~0.5 ref_object:9090~0.5 ref_configuratie:9090~0.5 registratienummer:9090~0.5 ref_debnummer:9090~0.5 ref_vestiging:9090~0.5 attvrijetekst2:9090~0.5 externnummer:9090~0.5 vrijememo1:9090~0.5 attvrijetekst3:9090~0.5 attvrijetekst1:9090~0.5 vrijetekst2:9090~0.5 vrijetekst1:9090~0.5 ref_budgethouder:9090~0.5 extrabid:9090~0.5 naam:9090~0.5))))
Lucene in TOPdesk: Autocomplete Während der Benutzereingabe werden Vervollständigungsvorschläge mit Hilfe von Wildcard-Suche gemacht Beispiel: print wird zu print* expandiert und alle möglichen Terme aufgelistet
Lucene in TOPdesk: Erweiterte Suche Erweiterte Möglichkeiten für Benutzer, die sich mit der Query-Syntax nicht auskennen Suche per Feld beginnt mit, ist gleich und enthält möglich
Lucene in TOPdesk: Erweiterte Suche Problemnummer: "P 0512" : +(+(+spanfirst(naam:p, 1) +naam:0512*) Kurzbeschreibung: "print" : +(spanfirst(korteomschrijving:printer, 1) spanfirst(korteomschrijving:printing, 1)))
Lucene im Vergleich zu vorherigem Suchindex Suchindex viel kleiner (300MB für TOPhelp) Index wird nicht in der Datenbank gespeichert Suchen auch möglich während Index neu gebaut/ aktualisiert wird Indizieren ist schneller (15 Minuten statt 10 Stunden für TOPhelp) fuzzy Suche
Fragen?