Fuzzy-Suche in Application Express So geht s! Carsten Czarski Consulting Member of technical staff - Oracle Application Express September 2017 Copyright 2016 Oracle and/or its affiliates. All rights reserved.
Carsten Czarski Oracle in Muncher seit 2001 APEX Entwicklerteam seit 2016 Social Media: Blogs, Twitter und mehr Twitter: @cczarski Blog: sql-plsql-de.blogspot.com German How Tos: blogs.oracle.com/apexcommunity_deutsch English How Tos: blogs.oracle.com/apex Copyright 2016 Oracle and/or its affiliates. All rights reserved.
Fuzzy-Suche in Application Express Oracle TEXT Copyright 2016 Oracle and/or its affiliates. All rights reserved.
Oracle TEXT Index Index für Volltext, linguistische und Fuzzy-Suche Teil aller Datenbankeditionen - standardmäßig installiert Unterstützung aller gängigen Datentypen XMLTYPE, VARCHAR2, CLOB, BLOB, Database Filesystem, SecureFile "Filter" bei Binärdaten möglich create index idx_textindex on dokument_tab ( document ) indextype is CTXSYS.CONTEXT Index created.
Oracle TEXT - Funktionen Abfrage mit SQL CONTAINS-Funktion Linguistische Features und Fuzzy-Suche Kombinierbar mit relationalen Abfragen Relevanz-Ranking anhand Wort-Häufigkeiten SCORE-Funktion Ergebnis-Aufbereitung Highlighting "Keyword-in-Context" select score(1), dokument from dokument_tab where CONTAINS( dokument, 'Software AND Oracle', 1 )>0
Abfragemöglichkeiten Logische Kombinationen... where contains(text, 'Hund AND Katze') >0 Wildcard-Suche... where contains(text, 'Hu%d AND Kat_e') >0 Namenssuche... where contains(text, 'NDATA(name, Hunt)') >0 Fuzzy matching... where contains(text, '?Hunt') >0 Multilinguale Stammsuche... where contains(text, '$läuft') >0
Abfragemöglichkeiten NEAR-Operator... where contains(text, 'near(hund, Katze), 4') >0 Suche in Sektionen, Sätzen und Paragraphen (XML)... where contains(text, 'Hund WITHIN TITEL') >0 ISO 2788 konformer Thesaurus... where contains(text, 'SYN(Hund,[thes]' >0)
Special: Oracle Text Name Search Ähnlichkeitssuche, optimiert für Namen Findet mehr Treffer als die "normale" Oracle TEXT Fuzzy-Suche Auf das Finden möglichst großer Treffermengen optimiert Spezielle Einstellungen beim Indexaufbau Tendenziell große Textindizes select * from names where contains(name, 'NDATA(name,Tsaarski)') > 0 ID NAME ---------- ---------------------------------------- 4 Carsten Czarski
Trefferliste aufbereiten Teil der SQL-Query: Funktion CTX_DOC.SNIPPET Hervorhebung ist konfigurierbar (Default ist <b></b>) Fuzzy-Suche, linguistische Suche oder Thesauri werden berücksichtigt
Ein wenig Technik: Indizierungsprozess Filter Sectioner Lexer AUTO_FILTER Basic Whitespace Plain Text HTML XML News/E-Mail Themen Engine Decompounding alternate spelling
Fuzzy-Suche in Application Express Oracle TEXT für "normale" Tabellen Copyright 2016 Oracle and/or its affiliates. All rights reserved.
Oracle TEXT Index auf "normalen" Daten
Vorgehensweise: USER_DATA_STORE USER_DATASTORE: Eine PL/SQL Prozedur liefert die zu indizierenden Daten Tabelle(n) PL/SQL-Prozedur Index-Engine Volltextindex http://oracle-text-de.blogspot.co.uk/2012/03/nochmal-userdatastore-ein-umfassendes.html
"Virtuelle XML-Dokumente" mit PL/SQL http://oracle-text-de.blogspot.co.uk/2012/03/nochmal-userdatastore-ein-umfassendes.html
PL/SQL-Prozedur für den Index Mehrere Signaturen verfügbar! Rückgabe als VARCHAR2 Rückgabe als CLOB Rückgabe als BLOB! Filter! Prozedur wird für jede ROWID aufgerufen daher... Wenn alle "Dokumente" < 32K: Rückgabe als VARCHAR2 Temporäre LOBs einmal initiaisieren und im Package halten Bindevariablen nutzen; auf effizientes SQL achten XML per Stringverkettung erstellen! Ist schneller!
PL/SQL Prozedur registrieren und Index erzeugen http://oracle-text-de.blogspot.co.uk/2012/03/nochmal-userdatastore-ein-umfassendes.html
Fuzzy-Suche in Application Express Volltextsuche in APEX-Anwendungen Copyright 2016 Oracle and/or its affiliates. All rights reserved.
Sample Interactive Grids Application 19
Application Express 5.1: Interactive Grid Interactive Grid unterstützt Oracle TEXT aus dem Stand Mit Oracle TEXT indizierte Spalte deklarativ festlegen
Integration aus dem Stand Interactive Grid führt Volltextsuche automatisch aus 21
Query Syntax für den Endanwender Oracle TEXT Query Syntax ist sehr mächtig und komplex Es wird eine einfache Syntax gebraucht - á la Google PL/SQL Funktion zum Übersetzen erstellen und in APEX hinterlegen 22
Query Syntax Translation Function: Beispiele 23
Fuzzy-Suche in Application Express Oracle TEXT in einem klassischen Bericht Copyright 2016 Oracle and/or its affiliates. All rights reserved.
1. Schritt: Ein APEX Bericht
Schon ganz gut, aber
Wie wäre es mit dem "Search Results" Template?
Wie wäre es mit dem "Search Results" Template?
Query-Spalten müssen zum Template passen
Suchmaschinen-Look & Feel - mit APEX!
Fuzzy-Suche in APEX - mit Oracle TEXT Vielfältige Suchmöglichkeiten - im Standardumfang der Datenbank Linguistische Suche, Fuzzy Suche Vielfältige Suchoperatoren Kann auch auf "normale" Tabellen angewendet werden Umwandeln in "virtuelle Dokumente" mit PL/SQL Einfachste Integration in die APEX-Anwendung: SQL und PL/SQL Out-of-the-box Integration mit dem Interactive Grid Vorgefertigte Templates für Classic Reports Andere Komponenten mit SQL und PL/SQL Copyright 2016 Oracle and/or its affiliates. All rights reserved.
Ja, wir machen das auch selbst so! Copyright 2016 Oracle and/or its affiliates. All rights reserved.
Copyright 2016 Oracle and/or its affiliates. All rights reserved.
Copyright 2016 Oracle and/or its affiliates. All rights reserved.