Nachdem ich im letzten Artikel über allgemeine Neuerungen in der Volltextsuche von SQL Server „Denali“ gesprochen habe geht es dieses Mal um ein komplett neues Feature in der Volltextsuche: Statistische Semantische Suche. Das Wort „semantisch“ hat in der IT viele Bedeutungen, hier heißt es: Die Volltextsuche erkennt statistisch relevante Schlüssel-Phrasen in Dokumenten und kann diese Erkenntnis für die Extraktion dieser Schlüssel-Phrasen und für die Analyse der Ähnlichkeit von Dokumenten verwenden. Typische Fragestellungen für die semantische Suche sind: „Was sind wichtige Phrasen in diesem Dokument?“ oder „Welche Dokumente ähneln diesem Dokument und warum?

Die semantische Suche ist eine Erweiterung der Volltextsuche, die extra für volltextindizierte Spalten aktiviert wird. Das geht in T-SQL (durch Angabe einer Sprach-ID und des Schlüsselworts Statistical_Semantics an der volltextindizierten Spalte) oder in der grafischen Volltextindex-Oberfläche:

SemanticSearchIndex

Damit das klappt muss allerdings zuerst die semantische Suche konfiguriert werden. Dazu wird zuerst die semantische Sprachstatistik-Datenbank installiert, indem man das Paket SemanticLanguageDatabase.msi vom Installationsmedium entpackt und die entpackte Datenbank an den Server anhängt. Danach muss die Datenbank noch mittels sp_fulltext_semantic_register_language_statistics_db registriert werden. Wie das geht findet sich hier.

Die unterstützten Sprachen kann man dann mit

select * from sys.fulltext_semantic_languages

herausfinden. Deutsch ist dabei. Die eigentlichen semantischen Daten in dieser Datenbank sind übrigens als Internal Tables abgelegt und somit nicht direkt für ein SELECT zugänglich.

Danach kann man wie oben angegeben den Volltextindex mit semantischer Suche erstellen. Ich habe das auf der Filetable gemacht, deren Erstellung ich in diesem Artikel beschrieben habe. Es muss aber keine Filetable sein, jede volltextindizierte Spalte einer Tabelle funktioniert. Zu beachten ist, dass die semantische Suche einen Volltextindex deutlich vergrößert und auch die Erstellungszeit erhöht. Daher sollte man semantische Suche nur aktivieren, wenn man sie auch wirklich verwenden will. Außerdem muss natürlich die Volltextindizierung für die in der Tabelle vorhandenen Dokumenttypen vorbereitet sein: Die entsprechenden IFilter müssen installiert sein, deren Verwendung aktiviert usw.

Schlüsselwörter finden

Nun kann man zum Beispiel für ein Dokument herausfinden, was die statistisch wichtigen Schlüsselwörter in diesem Dokument sind. Das geht über die Funktion SEMANTICKEYPHRASETABLE:

DECLARE @DocID hierarchyid

 

SELECT @DocID = path_locator from MeineFiletable where name = 'ADS.pptx';

 

--Key Phrases

SELECT TOP(10) KEYP_TBL.keyphrase

FROM SEMANTICKEYPHRASETABLE

    ( MeineFiletable,

      file_stream,

      @DocID

    ) AS KEYP_TBL

ORDER BY KEYP_TBL.score DESC;

keyphrase

sql

azure

verwaltung

technet

durch

datacenter

tds

isv

unternehmen

arten

Offensichtlich habe ich hier also über SQL Azure gesprochen.

Anders herum kann man auch herausfinden, in welchen Dokumenten es um Azure geht indem man die Dokumente nach Signifikanz der Phrase „Azure“ sortieren lässt:

SELECT TOP (5) DOC_TBL.path_locator.ToString() Locator, DOC_TBL.name

FROM MeineFiletable AS DOC_TBL

    INNER JOIN SEMANTICKEYPHRASETABLE

    ( MeineFiletable,

      file_stream

    ) AS KEYP_TBL

ON DOC_TBL.path_locator = KEYP_TBL.document_key

WHERE KEYP_TBL.keyphrase = 'azure'

ORDER BY KEYP_TBL.Score DESC;

 

Locator

name

/163317661833190.115726554008670.1866003634/
218988078402337.61914970700195.3199820884/

DatabaseProAzureReporting.docx

/235419278667080.230118955961229.3763918334/
95176762753143.43209610854162.380882874/

Webcast SQL Azure und die Microsoft Cloud Plattform.pptx

/235419278667080.230118955961229.3763918334/
195400071903089.254316101152370.2453146947/

Webcast SQL Azure Überblick.pptx

/235419278667080.230118955961229.3763918334/
204734086686021.60759175188448.1218421407/

SQL Azure und die Microsoft Cloud Plattform.pptx

/163317661833190.115726554008670.1866003634/
148065100657714.221322731028740.4247534163/

SQL Azure CeBIT.pptx

Ähnliche Dokumente finden

Der andere Anwendungsfall für die statistische semantische Suche ist es, ähnliche Dokumente zu finden. Das geht über die Funktion SEMANTICSIMILARITYTABLE. Details zur Ähnlichkeit erhält man über SEMANTICSIMILARITYDETAILSTABLE. Eine einfache Abfrage “Welche Dokumente sind diesem ähnlich“ funktioniert so:

SELECT   mft.name, sst.score 

FROM SEMANTICSIMILARITYTABLE

  ( MeineFiletable,

    file_stream,

    @DocID

  ) AS sst

INNER JOIN MeineFiletable mft

  ON path_locator = matched_document_key 

ORDER BY score DESC

Name

Score

Webcast SQL Azure Überblick.pptx

0,6667337

SQL Azure CeBIT.pptx

0,6150579

sqldays 2010 SQL Server 2008 R2 NonBI.pptx

0,3872314

SQL Server 2005 - Webcast - 2005-09-28 - Schutz sensitiver Daten.ppt

0,3602501

Was ist SQL Server Express 2008 R2.pptx

0,3286014

Will man dann den Grund für die Ähnlichkeit finden so joint man über SEMANTICSIMILARITYDETAILSTABLE:

DECLARE @DocIDMatch hierarchyid

 

SELECT @DocIDMatch = path_locator

FROM MeineFiletable

WHERE name = 'SQL Server 2005 - Webcast - 2005-09-28 - Schutz sensitiver Daten.ppt';

 

SELECT TOP(20) V4.keyphrase, V4.score

FROM SEMANTICSIMILARITYDETAILSTABLE

  ( MeineFiletable,

    file_stream,

    @DocID,

    file_stream,

    @DocIDMatch

  ) AS V4

ORDER BY V4.score DESC;

keyphrase

score

sql

0,6196678

technet

0,4326765

server

0,3456945

verschlüsselung

0,3421064

durch

0,3254796

schlüssel

0,3249941

wird

0,2818047

datum

0,2744119

zertifikat

0,2636287

public

0,2460675

arten

0,2402729

kosten

0,2268401

master

0,2166911

passwort

0,2148199

zum

0,2144909

microsoft

0,2132909

authentifizierung

0,2127908

symmetrisch

0,21237

immer

0,2091359

gmbh

0,2083207

Offensichtlich geht es also in beiden Präsentationen um mein Lieblingsthema Verschlüsselung…

In Summe kann die neue semantische Suche in SQL Server „Denali“ sehr umfassend beim Verständnis von Dokumentbeständen und der inhaltlichen Suche darin helfen und so die meisten dokumentorientierten Datenbankanwendungen deutlich aufwerten.

Die Dokumentation zur semantischen Suche findet sich hier, der Download der Denali CTP3 hier

Gruß,
Steffen