FTS (FULL-TEXT SEARCH)
br>
FTS – Full-Text Search oznacza wyszukiwanie pełnotekstowe, będące mechanizmem dającym możliwość zaawansowanego wyszukiwania informacji w danych typu znakowego oraz w dokumentach i ich właściwościach. SQL Server posiada tak zwaną statystykę semantyczną pozwalającą nie tylko przeszukiwać samą zawartość danych ale także uwzględnia ich znaczenie. Daje to także możliwość wyszukiwania podobnych danych oraz dokumentów właśnie o podobnej treści.
SQL Server dysponuje odrębnym serwisem, usługą odpowiedzialną za ten mechanizm i jest to „SQL Full-text Filter Daemon Launcher (NazwaSerwera)” w programie Sql Server Configuration Manager. W systemie operacyjnym usługa ta występuje pod nazwą „Filter Daemon Host – fdhost.exe”.
Rozpoczynając pracę z FTS należy utworzyć katalog/katalogi pełnotekstowe oraz indeks/indeksy pełnotekstowe. Każdy katalog pełnotekstowy może zawierać jeden lub wiele indeksów pełnotekstowych, natomiast każdy indeks pełnotekstowy może być przypisany tylko do jednego katalogu pełnotekstowego.
Zarówno katalogi pełnotekstowe jak i indeksy pełnotekstowe można kreować za pomocą okienek, czyli wyklikując oraz za pomocą implementacji SQL.
br>
br>
KATALOGI PEŁNOTEKSTOWE
br>
Katalogi pełnotekstowe można kreować uruchamiając opcję „New Full-Text Catalog…” znajdującą się w SSMS w oknie „Object Explorer” w węźle „Databases / BazyDanychMsSQL_KursOnLine_Free / Storage / Full Text Catalogs” pod PPM:
Po wybraniu powyższej opcji otworzy nam się nowe okno „New Full-Text Catalog – BazyDanychMsSQL_KursOnLine_Free”.
1. Ustal nazwę katalogu „Full-text catalog name:” na „KursOnLine_FullTextCatalog”;
2. Ustal właściciela katalogu „Owner:” na „dbo”;
3. Zaznacz opcję „Set as default catalog” i ustaw „Accent sensitivity:” na „Insensitive”:
br>
br>
INDEKSY PEŁNOTEKSTOWE
br>
Indeksy pełnotekstowe można kreować uruchamiając opcję „Define Full-Text Index…”znajdującą się w SSMS w oknie „Object Explorer” na wybranej tabeli, a w naszym przypadku będzie to tabela słownikowa „KZ02_SL_Nazwiska”, więc w węźle „Databases / BazyDanychMsSQL_KursOnLine_Free / Tables / dbo.KZ02_SL_Nazwiska” pod PPM:
Po wybraniu powyższej opcji otworzy nam się nowe okno powitalne „Full-Text Indexing Wizard”.
1. Tutaj klikamy guzik „Next >”:
2. Otworzy nam się nowe okno, w którym należy wskazać index główny tabeli, jeżeli takiego nie będzie to kreator zwróci adekwatny błąd. W naszej tabeli mamy PK z indeksem głównym, więc go wybieramy: „PK_SL_Nazwiska” i klikamy guzik „Next >”:
3. Teraz wybieramy kolumny, które będziemy chcieli przeszukiwać za pomocą FTS, w naszym przypadku mamy tylko jedną „sln_Nazwisko”, więc ją zaznaczamy i ustawiamy język polski, następnie klikamy guzik „Next >”:
4. Następnie ustawiamy sposób śledzenia zmian, nim jednak to zrobimy, opiszę Tobie pokrótce z czym to się wiąże. Chodzi o aktualizowanie indeksu pełnotekstowego względem wprowadzanych zmian w kolumnie „sln_Nazwisko”.
Tak więc mamy trzy opcje:
• Automatically (automatycznie) – jest to ustawienie domyślne, po zmodyfikowaniu danych w kolumnach objętych indeksem pełnotekstowym SQL Server automatycznie będzie aktualizował indeks;
• Manually (ręcznie) – developer lub administrator decyduje, kiedy i w jaki sposób będzie aktualizowany indeks;
• Do not track changes (nie śledź zmian) – chcąc zaktualizować indeks pełnotekstowy, to należy skorzystać z poleceń “ALTER FULLTEXT INDEX” z klauzulą “START FULL” lub INCREMENTAL POPULATION”.
Zaznaczamy „Automatically” i klikamy guzik „Next >”:
5. Przechodząc do następnego kroku przypisujemy pełnotekstowy indeks do pełnotekstowego katalogu „KursOnLine_FullTextCatalog” i klikamy guzik „Next >”:
6. W jednym z poprzednich kroków wybraliśmy sposób automatyczny aktualizowania indeksu pełnotekstowego, więc nie ustalamy żadnego harmonogramu. Nic nie definiujemy tylko klikamy w guzik „Next >”:
7. Przed ostatnie okno kreatora jest zestawieniem opcji, które wcześniej wybraliśmy. Przejrzyj je sobie rozwijając drzewko (+). W tym miejscu można jeszcze się cofnąć i poprawić ewentualne błędy. U nas wszystko się zgadza, więc klikamy guzik „Finish”:
8. Ostatnie okno tworzy index z informacją o sukcesie. W tym miejscu zakończyliśmy krok tworzenia indeksu pełnotekstowego i zamykamy kreatora klikając w guzik „Close”:
br>
br>
ZAPYTANIA PEŁNOTEKSTOWE
br>
Mając już utworzony katalog pełnotekstowy oraz indeks pełnotekstowy możemy przejść do implementacji kwerend. W tym celu mamy do dyspozycji kilka sposobów pisania zapytań z wykorzystaniem różnych predykatów i funkcji:
Predykaty FREETEXT
Predykat FREETEXT pozwala na pobieranie wierszy z tabeli, które pasują do określonych kryteriów. FREETEXT działa na zasadzie poszukiwania wyrazów w formie podstawowej oraz w formach określonych w tezaurusie (wyjaśnienie tezaurusa jest w dalszej części niniejszej lekcji).
Predykaty CONTAINS
Predykat CONTAINS pozwala na pobieranie wierszy z tabeli, które pasują do określonych kryteriów. CONTAINS działa w taki sposób, że wyszukuje ciągi znaków tak, jak FREETEXT, ale wyniki poszukiwań poszerza o prefiksy oraz synonimy. Nie korzysta z tezaurusa. Jest jednak możliwość skorzystania z tezaurusa za pomocą słowa kluczowego FORMSOF.
Funkcje FREETEXTTABLE i CONTAINSTABLE
Funkcje FREETEXTTABLE oraz CONTAINSTABLE są analogiczne do predykatów FREETEXT i CONTAINS, lecz zwracają określony zestaw wierszy z dwiema kolumnami, kolumną z kluczem głównym (nazwaną KEY) oraz tak zwaną kolumną rankingową informującą o trafności (nazwaną RANK).
br>
br>
TEZAURUSY
br>
Jak już wcześniej wspomniałem, predykat FREETEXT oraz funkcja FREETEXTTABLE podczas wyszukiwania korzystają z tezaurusa. Jest to mechanizm oparty o edytowalne pliki XML zawierające wyrazy bliskoznaczne oraz różne wzorce.
Jeżeli instalacja SQL Server’a była domyślna, a była to pliki konfiguracyjne tezaurusa znajdują się w lokalizacji:
„C:\Program Files\Microsoft SQL Server\MSSQL12.[NazwaServera]\MSSQL\FTData”. Nazwy plików mają format „tsnnn.xml”, gdzie „…nnn…” oznacza język. Dla języka polskiego jest to plik „tsplk.xml”. Zbiorów rozszerzających dla tezaurusa może być nieograniczona ilość.
W plikach XML sekcja „<expansion>” rozszerza wyszukiwane zbiory, natomiast sekcja „<replacement>” definiuje wzorce: zamiast słów określonych w węzłach „<pat>” będzie wyszukiwane słowo, które wskazano w węźle „”.
br>
br>
STOPLISTY
br>
STOPLISTA jest to struktura w bazie danych zawierająca STOPWORDS, czyli wyrazy ignorowane podczas przeszukiwania. Są to m.in. „i”, „w”, „z”, „o”, „to” czy „lub”. Mamy możliwość korzystania z predefiniowanych STOPWORDS jak również możemy zdefiniować własny zbiór.
br>
br>
PLIKI DO ŚCIĄGNIĘCIA:
1. 014_Wyszukiwanie_Pelnotekstowe_FTS.sql
2. 014_Wyszukiwanie_Pelnotekstowe_FTS_Nazwiska.txt
3. 014_Wyszukiwanie_Pelnotekstowe_FTS_Miasta.txt
4. 014_Wyszukiwanie_Pelnotekstowe_FTS_tsplk.xml
br>