Betriebsmittelsuche M.Hoppe Suche in der Datenbank Betriebsmittelsuche M.Hoppe
Agenda Betriebsmittelsuche Aufgabenstellung Architektur Oracle Text Aufbau & Konfiguration Indexpflege XML Überblick Lösungsansatz Einsatz Demo 11.11.2018
Aufgabenstellung Suche nach Betriebsmittel (Bennennung, Beschreibungen) Einfache Suche für Anwender Hohe Suchqualität Zentrale Suchmaschine (Web) Eine zentrales Repository Zugriff von verschiedenen Applikationen Einfache Wartbarkeit 11.11.2018
Aufgabenstellung Fremdsysteme Fremdsysteme Fremdsysteme System1 Suchmaschine Applikation (php) Applikation (java) 11.11.2018
Aufgabenstellung Tabellenstruktur des Suchrepository Table1 Table2 11.11.2018
Architektur ….. SQL-API Oracle Text Datenbank PHP PL/SQL C Java Externe Datenquelle Externe Datenquelle Externe Datenquelle SQLNET JDBC Externe Datenquelle SQL-API Oracle Text Datenbank Oracle Text Repository Such Repository 11.11.2018
Architektur Informationen in zentrale Tabelle (Crawler-Tabelle) Suchinformationen in XML-Struktur XML-Struktur: Darstellung 1:n Beziehung der Tabellen ein Suchindex dedizierte Suchen nach XML-Tags dediziertes Indizierung Kombination XSLT ….. 11.11.2018
Oracle Text Bestandteil vor Oracle 9i und 10g(8i : interMedia text) Bietet umfassende Möglichkeiten der Textverarbeitung: Suche (Volltext-, Kontext-, Ranking etc.) Filterung Klassifikation von Dokumenten Text Warehousing Internationalisation Unterstützung verschiedener Datenformate (HTML, XML, PDF etc.) …… 11.11.2018
Oracle Text - Architektur Indexerstellung DB 11.11.2018
Erstellen von Indexen Parameter Lexer (Sprachabhängig,Stemming,….) Wordlist (Für Fuzzy-Abfragen,….) Stoplist (Wörter, die nicht indiziert werden) Datastore (Lokal, Dateisystem, URL,…) Filter (Konvertierung nach HTML,Plaintext) Sectioner (Sektionen, z.B. XML-Tags) Beispiel Wordlist: begin CTX_DDL.set_attribute('SEARCH.DOC_WORDLIST','STEMMER', 'GERMAN'); end; 11.11.2018
Oracle Text - Indexetypen Indexe für verschiedene Einsatzgebiete: CONTEXT - Für Volltextabfragen auf Dokumenten (Word, HTML, XML etc.). Abfragen mit CONTAINS CTXCAT - gemischte Abfragen mit kleinen Textfragmenten. Abfragen mit CATSEARCH CTXRULE - Zuordnung von Dokumenten zu Klassen (Klassifikationen) aufgrund ihres Inhalts. Abfragen mit MATCHES 11.11.2018
Oracle® Text - Abfragemöglichkeiten Schlüsselwortsuche Finde alle Dokumente mit einem oder mehreren Schlüsselwörtern Kontextsuche Finde alle Dokumente, in den die Schlüsselwörter in einem bestimmten Kontext auftauchen Boolsche Operationen Finde alle Dokumente, in den das Wort A UND das Wort B, aber NICHT das Wort C vorkommen 11.11.2018
Oracle® Text - Abfragemöglichkeiten(2) Linguistische Methoden Finde alle Dokumente über etwas (Themensuche) Pattern Matching Finde Dokumente mit Wörtern, die einen String enthalten …….. 11.11.2018
Oracle Text - Weitere Merkmale Indexpflege und – Synchronisation !!!!! Paralleles Erstellen von Indexen Index-Partitionierung Document Services Hervorheben von Schlüsselwörtern Extrahieren von Themen Bestimmen von wichtigen Textabschnitten Hohe Performance 11.11.2018
Erstellen einer Texttabelle Beispiel Context Textindex: create index newindex on such_tab(such_text) indextype is ctxsys.context parameters ('datastore new_url filter ctxsys.null_filter wordlist new_word‘, section group ctxsys.auto_section_group'); 11.11.2018
Pflege von Indexen Fehler beim Indizieren: CTX_USER_INDEX_ERRORS !! Allgemein Fehler beim Indizieren: CTX_USER_INDEX_ERRORS !! Ändern des Indexes: ALTER INDEX newindex REBUILD PARAMETERS(‘resume memory 2M‘); CONTEXT-Indexe Synchronisieren nach DML-Operationen: ALTER INDEX newindex REBUILD ONLINE PARAMETERS ('sync') Optimieren: ALTER INDEX REBUILD PARAMETERS('optimize full') 11.11.2018
Abfragen Allgemein Eingabe: Suchausdruck Ausgabe: Liste aller Dokumente, die dem Ausdruck genügen, mit einer Relevanzbewertung (SCORE) SELECT-Statement CONTEXT-Index: Operator CONTAINS CTXCAT-Index: Operator CATSEARCH CTXRULE-Index: Operator MATCHES 11.11.2018
Abfragen Beispiel mit Relevanzbewertung: Select id, such_text,score(1) from such_tab Where contains(such_text,‘ventil‘,1)>0 order by score(1) desc Beispiel Suche in XML-Struktur: select id, such_text,score(1) from such_tab where contains(such_text,‘ventil within BESCHREIBUNG‘,1)>0 11.11.2018
Abfragen mit CONTAINS Grammatik Logische Operatoren: AND(&), OR(|),... Bereichsoperatoren (HTML, XML): WITHIN, INPATH Kontextoperator: NEAR Synonyme: SYN Pattern Matching Operator: wildcards(%) Fuzzy-Operator: fuzzy() Themenoperator: ABOUT … 11.11.2018
XML Überblick XMLTYPE XML- Schemaunterstützung, Speicherung der XML- Dokumente in Objekttypen,Tabellen… Updates, Elemente und Attributen XML- Indexe SQLX- Standard XSL- Transformation 2 Speichermethoden, textbasiert(CLOB) und datenorientiert (Objektrelational) Zugriff auf strukturierten XML- Daten 11.11.2018
Lösungsansatz Sammeln der Informationen in XML –Struktur <TABLE1> <NR>B4718</NR> <HERSTELLERID>11126716-00</HERSTELLERID> <TEILENR>A5121/07</TEILENR> <KURZBESCHREIBUNG>WAERMEVENTILHEIZKÖRPER</KURZBESCHREIBUNG> <BESCHREIBUNG>Waermeventil mit thermostat</BESCHREIBUNG> <HERSTELLER>HANS MÜLLER-SÖHNE</HERSTELLER> <HERSTELLERBESTELLNR>1312/20</HERSTELLERBESTELLNR> <TABLE2>……… </TABLE1> Suchen mit CONTEXT über alles oder kombiniert mit whitin Werte mit extractvalue bzw. extract ermitteln 11.11.2018
Lösungsansatz Darstellung in XSLT –Struktur <xsl:stylesheet version ="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>Suchergebnisse Kurzinformation</title> </head> <body bgcolor="C6DFC3"> <h1> Suchergebnisse Kurzinformation</h1> <xsl:apply-templates/> </body> Mit xmltransform XML und XSLT kombinieren 11.11.2018
Lösungsansatz Änderungen in Suchtabelle Verwendung von Advanced Queueing zum Laden der Daten bzw. der XML- Struktur SQL-API selbstentwickelte SQL-API basierend auf PL/SQL Beispiel: select * from table(uf_sql_interface.DB_SEARCH('müller','Y','Y')) Suchbegriff: Fuzzysuche: Worterweiterung: 11.11.2018
Einsatz Technische Daten 2,4 Mio Datensätze (XML- Strukturen) Ständiger Datenabgleich mit AQ automatisches Indexabgleich Zukunft Ausbau des Datenbestandes Modifizierung der Suchanwendung 11.11.2018