SQL Server, Volltextsuche
Dez
26
Written by:
26.12.2007
Die Volltextsuche des SQL Servers ermöglicht es Texte oder Dokumente zu durchsuchen, die im SQL Server abgelegt sind. Die Architektur ist hier beschrieben, z. B: http://technet.microsoft.com/en-us/library/ms345119.aspx
Bei der Nutzung der Volltextsuche sind eine paar "Kleinigkeiten" zu bedenken.
1. Die Volltextsuche ist keine Suche mit Zeichenvergleich
Die Volltextsuche basiert nicht auf einem Zeichenvergleich (wie LIKE), sondern auf Wörtern einer Sprache. Es gibt einen Wortbreaker, der die Zeichenfolge in Wörter aufteilt, diese Wörter werden indiziert und dieser Index wird bei Suche genutzt.
Der Volltextindex wird z. B. abgefragt mit
WHERE CONTAINS( Spalte, ' "Atom*" ' )
Beim der Zeichenvergleichssuche werden die Zeichen einfach miteinander verglichen.
WHERE Spalte LIKE '%Atom%'
Wenn man das Suchergebnis vergleicht, wird man feststellen, dass z. B. "atom", "atomar", "atomistisch", "Atomspaltung" mittels CONTAINS () gefunden werden. Jedoch z. B. "Fremdatom", "Störatom" werden nicht gefunden. Dies kann nur der Zeichenvergleich mit LIKE leisten. (Voraussetzung ist die entsprechende COLLATION, keine Unterscheidung zwischen Groß- und Kleinbuchstaben, Die Volltextsuche unterscheidet nicht zwischen Groß- und Kleinbuchstaben).
Man erhält per Volltextsuche kein Ergebnis , wenn ein führender "*" als Suchbegriff verwendet wird.
Beschrieben ist dies in BOL: http:/msdn2.microsoft.com/de-de/library/ms187787.aspx unter . (Es ist einfach nur das eine Verfahren beschrieben, '*' am Ende des Suchbegriffs.).
2. Bestimmte Wörter werden nicht gefunden
Bestimmte Wörter werden von der Volltextindizierung ausgeschlossen, da sie in der Regel nichts zur Suche beitragen. Solche Wörter werden als Füllwörter bezeichnet. Je nach Sprache gibt es unterschiedliche Dateien mit Füllwörtern, diese können an die Anforderungen angepasst werden, siehe http://msdn2.microsoft.com/de-de/library/ms142551.aspx.
Wenn man nun das Wort "IT" per Volltextsuche finden möchte und man erhält kein Ergebnis, dann sollte man an die o. g. Füllwortdateien denken und dort einmal eine Blick hinein werfen. "it" ist ein Füllwort im Englischen und im Neutralen.
3. Links
Der Artikel ist zwar schon älter, aber gilt grundsätzlich immer noch. Textsuche in Datenbankdaten mit Microsoft SQL Server 7.0 http://www.microsoft.com/germany/msdn/library/servers/sqlserver/TextsucheInDatenbankdatenMitMicrosoftSQLServer70.mspx?mfr=true
SQL Server 2005 Full-Text Search: Internals and Enhancements http://msdn2.microsoft.com/en-us/library/ms345119.aspx
International Features in Microsoft SQL Server 2005 http://msdn2.microsoft.com/en-us/library/bb330962.aspx