Wie schon im ersten Blog angedeutet gibt es die unterschiedlichsten Arten, Oracle Text zu nutzen. Es können z.B. linguistische Suchen, Mustersuchen, Suchen mit Booleschen Operatoren, Abschnittssuchen bei XML und HTML-Formaten durchgeführt werden. Um dabei die Suchqualität zu erhöhen, wird zusätzlich die Technik des Relevanz Rankings genutzt.
Im Folgenden wollen wir das Oracle Text Scoring (Ranking) Verhalten untersuchen und die neueste Entwicklung in 11g illustrieren.
Folgende Beispiel-Tabelle wird als Grundlage genutzt:
SQL> SELECT * FROM texttabelle;
ID DOKUMENT
--- ---------------------------------------------------------------------------
1 Politik: A-Partei gewinnt Wahl in Hansestadt
2 Politik: Terror in Nahost: Kriminalität steigt immer weiter an
3 Wirtschaft: Erneuter Gewinnzuwachs in diesem Jahr
4 Sport: Olympia rückt näher: Der Fackellauf ist in vollem Gange
5 Politik: Wer wird US-Präsident? Obama und Clinton machen Wahlkampf
6 Religion: Papst bestürzt über jüngsten Skandal!
7 Politik: Wahlkampf in den USA geht weiter: Clinton und Obama LIVE zu sehen
8 Karriere: Software-Kenntnisse werden immer wichtiger
9 Politik: Umfrage: Alle wollen mehr Geld!
10 Religion: Der Papst liest seine erste Messe in den USA!
11 Wirtschaft: Muppet-Show der Steuerversprecher
12 Politik: Bahn-Aufsichtsrat macht Weg frei für Börsengang
13 Wissenschaft: Europäer im All
14 Sport: EM-Gegner Türkei: Torwart Volkan bleibt gesperrt
15 Sport: EM-Gastgeber Österreich: Trainer Hickersberger hört auf
16 Sport: Deutschland-Gegner Türkei: Chaos als Prinzip
17 Sport: Türkei-Spieler Altintop: "Ich habe Deutschland alles zu verdanken"
18 Sport: Euro-Helden: Die größten Stars der EM-Geschichte
19 Sport: WIMBLEDON Federer mühelos, Kohlschreiber enttäuscht
20 Sport: Sport bleibt Sport!
20 rows selected.
Um ein Ranking (Scoring) für Dokumente in einer Abfrage zu erhalten, nutzt Oracle Text standardmäßig den inversen Häufigkeits-Algorithmus basierend auf Salton. Scoring nach der inversen Dokumenthäufigkeit bedeutet, dass häufiges Vorkommen eines Begriffes in Dokumenten zu einem niedrigen Scoringwert führt. Damit der Scoringfaktor hoch ist, muss ein Begriff zwar häufig im Dokument selbst, allerdings zusätzlich selten in allen Dokumenten insgesamt vorkommen. Im Handbuch Oracle® Text Reference 11g Release 1 (11.1) im Appendix F wird der Algorithmus am Beispiel erklärt.
Um Relevanz-bezogene Abfragen auf Ergebnislisten durchzuführen, wird der Operator SCORE verwendet. Dabei kann auch eine Gewichtung durchgeführt werden, um das Ergebnis zu beeinflussen.
Folgende Beispiele illustrieren die Gewichtung und den Einsatz des SCORE Operators: Es wird nach Dokumenten gesucht die den Suchbegriff 'Sport'
oder 'Türkei' enthalten - sortiert nach ihrer Relevanz. Das Ergebnis sieht dann folgendermassen aus:
SQL> SELECT dokument, score(1) AS s FROM texttabelle
WHERE contains(dokument, 'Sport or Türkei',1)>0
ORDER BY score(1) DESC;
DOKUMENT S
--------------------------------------------------------------------------- ---
Sport: Sport bleibt Sport! 19
Sport: Olympia rückt näher: Der Fackellauf ist in vollem Gange 6
Sport: EM-Gegner Türkei: Torwart Volkan bleibt gesperrt 6
Sport: EM-Gastgeber Österreich: Trainer Hickersberger hört auf 6
Sport: Deutschland-Gegner Türkei: Chaos als Prinzip 6
Sport: Türkei-Spieler Altintop: "Ich habe Deutschland alles zu verdanken" 6
Sport: Euro-Helden: Die größten Stars der EM-Geschichte 6
Sport: WIMBLEDON Federer mühelos, Kohlschreiber enttäuscht 6
8 rows selected.
Gewichtet man den Suchbegriff 'Türkei', ändert sich der entsprechende Scoringwert und die Reihenfolge.
SQL> SELECT dokument, score(1) as s FROM texttabelle
WHERE contains(dokument, 'Sport or Türkei*5',1)>0
ORDER BY score(1) DESC
DOKUMENT S
--------------------------------------------------------------------------- ---
Sport: EM-Gegner Türkei: Torwart Volkan bleibt gesperrt 32
Sport: Deutschland-Gegner Türkei: Chaos als Prinzip 32
Sport: Türkei-Spieler Altintop: "Ich habe Deutschland alles zu verdanken" 32
Sport: Sport bleibt Sport! 19
Sport: Olympia rückt näher: Der Fackellauf ist in vollem Gange 6
Sport: EM-Gastgeber Österreich: Trainer Hickersberger hört auf 6
Sport: Euro-Helden: Die größten Stars der EM-Geschichte 6
Sport: WIMBLEDON Federer mühelos, Kohlschreiber enttäuscht 6
Wem diese Möglichkeiten des Rankings nicht ausreichen, kann in Oracle Database 11g die Möglichkeit nutzen, das Scoring weiter zu beeinflussen
bzw. im Rahmen bestimmter Funktionen selbst zu definieren.
Dazu stehen die neuen Operatoren DEFINESCORE und DEFINEMERGE zur Verfügung.
Dem Suchbegriff können folgende Scoring-Ausdrücke und Funktionen zugeordnet werden:
DISCRETE: Term vorhanden 100, falls nicht 0
OCCURRENCE: Anzahl der Vorkommen
RELEVANCE: Standard-Relevanz-Ranking
COMPLETION: Ratio für Section Suche: Anzahl der der Treffer zu Anzahl aller Ausdrücke
IGNORE: Scoring des Terms ignorieren
LOG,ABS und Rechenoperationen
() für Gruppierung
Folgende Beispiele demonstrieren die Verwendung:
SQL> SELECT dokument, score(1) as s
FROM texttabelle
WHERE contains(dokument,'DEFINESCORE(Sport, occurrence)', 1) >0
ORDER BY score(1);
DOKUMENT S
--------------------------------------------------------------------------- ----
Sport: Olympia rückt näher: Der Fackellauf ist in vollem Gange 1
Sport: EM-Gegner Türkei: Torwart Volkan bleibt gesperrt 1
Sport: EM-Gastgeber Österreich: Trainer Hickersberger hört auf 1
Sport: Deutschland-Gegner Türkei: Chaos als Prinzip 1
Sport: Türkei-Spieler Altintop: "Ich habe Deutschland alles zu verdanken" 1
Sport: Euro-Helden: Die größten Stars der EM-Geschichte 1
Sport: WIMBLEDON Federer mühelos, Kohlschreiber enttäuscht 1
Sport: Sport bleibt Sport! 3
8 rows selected.
Die Scoring-Ausdrücke lassen sich auch hier gewichten, wie das nächste Beispiel zeigt:
SQL> SELECT dokument, score(1) as s
FROM texttabelle
WHERE contains(dokument,'DEFINESCORE(Sport, relevance*5)',1) >0
ORDER BY score(1);
DOKUMENT S
--------------------------------------------------------------------------- ----
Sport: Olympia rückt näher: Der Fackellauf ist in vollem Gange 24
Sport: EM-Gegner Türkei: Torwart Volkan bleibt gesperrt 24
Sport: EM-Gastgeber Österreich: Trainer Hickersberger hört auf 24
Sport: Deutschland-Gegner Türkei: Chaos als Prinzip 24
Sport: Türkei-Spieler Altintop: "Ich habe Deutschland alles zu verdanken" 24
Sport: Euro-Helden: Die größten Stars der EM-Geschichte 24
Sport: WIMBLEDON Federer mühelos, Kohlschreiber enttäuscht 24
Sport: Sport bleibt Sport! 72
8 rows selected.
Möchte man die Scoring Algorithmen miteinander verbinden, ist dies mit dem AND und OR Operator in Kombination mit dem neuen DEFINEMERGE-Operator möglich. Das Scoring Endresultat wird dann über eine MERGE Methode wie AVG, ADD, MIN oder MAX bestimmt.
Folgendes Beispiel zeigt die Verwendung:
SQL> SELECT dokument, score(1) as s
FROM texttabelle
WHERE contains(dokument,'DEFINEMERGE(
((DEFINESCORE(Sport,occurrence)),(DEFINESCORE(Sport, relevance*5))),AND,MAX)',1) >0;
DOKUMENT S
--------------------------------------------------------------------------- ----
Sport: Olympia rückt näher: Der Fackellauf ist in vollem Gange 24
Sport: EM-Gegner Türkei: Torwart Volkan bleibt gesperrt 24
Sport: EM-Gastgeber Österreich: Trainer Hickersberger hört auf 24
Sport: Deutschland-Gegner Türkei: Chaos als Prinzip 24
Sport: Türkei-Spieler Altintop: "Ich habe Deutschland alles zu verdanken" 24
Sport: Euro-Helden: Die größten Stars der EM-Geschichte 24
Sport: WIMBLEDON Federer mühelos, Kohlschreiber enttäuscht 24
Sport: Sport bleibt Sport! 72
Am besten probiert man das Ganze einfach einmal aus ...