Wyszukiwanie pełnotekstowe, to mechanizm wydajnego przeszukiwania kolumn o charakterze tekstowym. W tym celu zakładany jest specjalny indeks na tabeli, która ma zostać przeszukana. Zapytania wykonywane na takim indeksie pozwalają dokonać językowego przeszukiwania opartego na regułach określonego języka. Zwrócone rezultaty, to obiekty zawierające przynajmniej jedno dopasowanie (tzw. hit). Poniżej został opsiany proces instalacji oraz konfiguracji polskich narzędzi do Full-Text Search na przykładzie Microsoft SQL Server.
W pierwszej kolejności należy sprawdzić czy komponent FTS jest zainstalowany na serwerze. W tym celu można posłużyć się funkcją fulltextserviceproperty z odpowiednim parametrem:
SELECT fulltextserviceproperty('IsFulltextInstalled')
Jeśli nie, to brakujący składnik można doinstalować do istniejącej instancji serwera z instalatora w wydaniu Advanced Services (SQLEXPRADV_x64_ENU.exe).
Po restarcie usługi serwera oraz upewnieniu się, że usługa wyszukiwania pełnotekstowego jest uruchomiona (SQL Full-text Filter..) należy sprawdzić, czy zainstalowane są polskie narzędzia językowe. Można się o tym przekonać na dwa sposoby. Pierwszy z nich to odpytanie systemowej tabeli fulltext_languages. Drugi, bardziej preferowany, to wykonanie systemowej procedury sp_help_fulltext_system_components z odpowiednim parametrem:
EXEC sp_help_fulltext_system_components 'wordbreaker'
Jeśli wpis z wartością 1045 w kolumnie componentname znajduje się w wynikach, oznacza to, że narzędzia są zainstalowane i można rozpocząć tworzenie struktur bazodanowych do FTS.
Dodatkowe kroki dla Ms SQL Server 2005 i 2008
Niewiedzieć czemu, domyślnie SQL Server w wersji 2005 i 2008 nie instaluje narzędzi do języka polskiego. W celu manualnej instalacji trzeba dodać poniższe klucze do rejestru systemowego
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSearch\CLSID\{B8713269-2D9D-4BF5-BF40-2615D75723D8}] @="lrpolish.dll" [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSearch\CLSID\{CA665B09-4642-4C84-A9B7-9B8F3CD7C3F6}] @="lrpolish.dll" [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSearch\Language\plk] "TsaurusFile"="tsplk.xml" "Locale"=dword:00000415 "WBreakerClass"="{CA665B09-4642-4C84-A9B7-9B8F3CD7C3F6}" "StemmerClass"="{B8713269-2D9D-4BF5-BF40-2615D75723D8}"
gdzie frazę ‘MSSQL10_50.MSSQLSERVER’ należy zastąpić odpowiednią nazwą wersji instancji, dla której instalowane są narzędzia, a następnie uruchomić systemową procedurę sp_fulltext_service z odpowiednimi parametrami
EXEC sp_fulltext_service 'load_os_resources', 1 EXEC sp_fulltext_service 'update_languages'
Pierwsza instrukcja pozwoli na ładowanie systemowych filtrów, które pochodzą spoza SQL Server (dla wersji 2005 oraz 2008 narzędzia językowe przygotowane są przez ‘zewnętrzną’ firmę), natomiast druga instrukcja nakazuje serwerowi odświeżyć listę dostępnych języków dla indeksów FTS.
W przypadku kiedy serwer bazodanowy zwróci komunikat o treści ‘Word breaking timed out for the full-text query string. This can happen if the wordbreaker took a long time to process […]’ należy uruchomić poniższe dwie instrukcje, które wyłączą weryfikowanie narzędzi językowych dla FTS, czego rezultatem będzie brak komunikatu.
EXEC sp_fulltext_service 'verify_signature', 0 EXEC sp_fulltext_service 'restart_all_fdhosts'
W tym momencie można ponownie uruchomić procedurę sp_help_fulltext_system_components w celu sprawdzenia czy polskie narzędzia językowe zostały poprawnie zainstalowane na instancji serwera.
Struktury bazodanowe
Założenie struktur jest banalnie proste i ogranicza się do zaledwie dwóch instrukcji. W pierwszej kolejności należy utworzyć katalog, gdzie składowany będzie indeks FTS:
CREATE FULLTEXT CATALOG [documents_catalog] AS DEFAULT
Następnie stworzyć sam indeks FTS:
CREATE FULLTEXT INDEX ON [dbo].[Documents] ( DocumentContent LANGUAGE 1045 ) KEY INDEX [PK_Documents]
Powyższa instrukcja zawiera cztery istotne elementy:
- tabela na której zakładany jest indeks FTS,
- kolumna indeksowana przez FTS,
- język (1045 to kod języka polskiego),
- unikalny klucz z tabeli, który jednoznacznie identyfikuje obiekt.
Wynik powyższych instrukcji można skontrolować wykonując procedury:
exec sp_help_fulltext_catalogs exec sp_help_fulltext_tables exec sp_help_fulltext_columns
Na tym etapie, wyszukiwanie pełnotekstowe na zadanej kolumnie jest gotowe do działania/odpytania.
W następnym artykule zaprezentuję możliwości zadawania zapytań FTS.