Volltextfeatures in SQL Server “Denali” Teil 2: Semantische Suche
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:
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