Eigene benutzerdefinierte Stop Wörter für SQL Server 2008 Volltextsuche

30. Juli 2010

Seit Version 2008 des SQL Servers gibt es sogenannte StopWords für die Volltextsuche. Dies sind Wörter, welche bei einer Volltextsuche vom Server nicht beachtet werden und bestehen meistens aus allgemeinen Wörter der jeweiligen Sprache wie z. B. “der”, “die”, “das”, “man”, etc. Manchmal kann es jedoch sein, dass man ein bestimmtes Wort aus dieser Liste eben doch für die Suche benötigt, oder auch andersherum, dass man weitere Wörter in die Liste einfügen will. Hierfür kann man ganz einfach eine individuelle StopList anlegen. In einer StopList sind die StopWords zusammengefast. Sie dient also im Prinzip als Container.

Das erzeugen der Stopliste funktioniert über einen ganz einfachen SQL-Befehl:

CREATE fulltext stoplist MyStopList;

Die Stopliste ist wie gesagt ein Container für die Wörter, welche wir bei der Suche ignorieren wollen. Momentan ist die Liste noch leer. Um Wörter hinzuzufügen reicht wieder ein einfacher SQL Befehl:

ALTER fulltext stoplist MyStopList  ADD 'ignore' LANGUAGE 1031;
ALTER fulltext stoplist MyStopList ADD 'light' LANGUAGE 'German';

Es gibt zwei Möglichkeiten die Sprache zu bestimmten. Einmal über die Kurzbezeichnung und einmal über die ID (Deutsch z. B. 1031). Um den Namen bzw. ID der gewünschten Sprache herauszufinden, kann man sich alle Einträge der syslanguages anzeigen lassen:

SELECT [name], alias, lcid FROM master.sys.syslanguages;

Damit die StopList auch wirksam wird, muss man diese noch an die Tabelle anhängen. Auch dies funktioniert wieder über einen Alter SQL-Befehl auf die gewünschte Ziel-Tabelle:

ALTER fulltext INDEX ON [dbo].[MyTable]  SET stoplist MyStopList;

Nun ist die StopListe mit der Tabelle verbunden und wird absofort bei der nächsten Volltextsuche verwendet. Sollte man einmal diese StopListe nicht mehr verwenden wollen, kann man einfach die system Liste wieder an die Tabelle anhängen:

ALTER fulltext INDEX ON [dbo].[MyTable] SET stoplist system;

Natürlich kann man auch wieder einzelne Wörter aus der StopList entfernen. Das löschen funktioniert genauso wie das hinzufügen, nur dass man hier “drop” statt “add” verwendet.

ALTER fulltext stoplist MyStopList DROP 'ignore' LANGUAGE 1031;
ALTER fulltext stoplist ArcanesStopList DROP 'ignore' LANGUAGE 'German';

Auch das Löschen einer ganzen Liste geht einfach wieder über einen Drop SQL-Befehl:

DROP fulltext stoplist MyStopList;

Da man seine StopList ja nicht immer komplett selber befüllen möchte sondern größtenteils die System Liste anpassen oder erweitern will, kann man natürlich diese auch direkt kopieren:

CREATE fulltext stoplist MyStopList FROM system stoplist

Auch das kopieren einer anderen benuzerdefinierten Stopliste ist auf diese Weise möglich:

CREATE fulltext stoplist MyStopList FROM dbo.OhterStopList

{ 0 Kommentare } { 0 Shares }

Schreib einen Kommentar

Previous post:

Next post: