Ähnlichkeitssuche mit Oracle Text

Ich habe mich mit Oracle Text auseinandergesetzt, um eine Ähnlichkeitssuche auf einer Tabellenspalte durchzuführen. Das ganze basiert auf Oracle Text in der Version 11.2. In dieser Version sind die hier genutzten Features implementiert. Ich verwende in diesem Beispiel die MVDEMO Daten.

Zuerst werden dem MVDEMO Benutzer entsprechende Berechtigungen erteilt:

GRANT CTXAPP TO mvdemo;
GRANT EXECUTE ON CTXSYS.CTX_CLS TO mvdemo;
GRANT EXECUTE ON CTXSYS.CTX_DDL TO mvdemo;
GRANT EXECUTE ON CTXSYS.CTX_DOC TO mvdemo;
GRANT EXECUTE ON CTXSYS.CTX_OUTPUT TO mvdemo;
GRANT EXECUTE ON CTXSYS.CTX_QUERY TO mvdemo;
GRANT EXECUTE ON CTXSYS.CTX_REPORT TO mvdemo;
GRANT EXECUTE ON CTXSYS.CTX_THES TO mvdemo;
GRANT EXECUTE ON CTXSYS.CTX_ULEXER TO mvdemo;

Dann wird die CUSTOMERS des MVDEMO Benutzers Tabelle mit einer XML Spalte erweitert:

ALTER TABLE CUSTOMERS
ADD (XML_NAME VARCHAR2(200) );
Jetzt werden die Namen als XML Struktur in der neuen Spalte gespeichert.
update customers set xml_name = '<name>' || name || '</name>';
commit;

Jetzt werden die Oracle TEXT Strukturen erzeugt:

begin
ctx_ddl.create_section_group('sg_xml_name', 'BASIC_SECTION_GROUP');
ctx_ddl.add_ndata_section('sg_xml_name', 'name', 'name');
end;
/

Der Trigger aktualisiert die XML Spalte im Falle einer Aktualisierung der Tabellenspalte NAME:

create or replace
TRIGGER XML_NAME_TRG
BEFORE INSERT OR DELETE OR UPDATE OF NAME ON CUSTOMERS
REFERENCING OLD AS old NEW AS new for each row
BEGIN
 :new.xml_name := '<name>' || :new.name || '</name>';  
END;
create index idx_xml_name on customers (xml_name) indextype is ctxsys.context
parameters ('section group sg_xml_name Sync (on commit)');
Der Index Parameter Sync (on commit) aktualisiert die Daten im Falle einer Aktualisierung! Und jetzt kann auch schon abgefragt werden:
select name from customers where contains(xml_name, 'NDATA(name,coss)') > 0;
Die Dokumentation zu Oracle Text ist hier zu finden.
Dieser Beitrag wurde unter Oracle veröffentlicht. Setze ein Lesezeichen auf den Permalink.

Die Kommentarfunktion ist geschlossen.