WYSZUKIWANIE PEŁNOTEKSTOWE: FTS

Kursy Online SQL Server Bazy Danych Microsotf Wyszukiwanie Pełnotekstowe FTS Full Text Search Andrzej Śmigielski

FTS (FULL-TEXT SEARCH)

 
          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”.

Programowanie SQL Bazy Danych FTS Full-Text Search Wyszukiwanie Pełnotekstowe

          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.
 
 

KATALOGI PEŁNOTEKSTOWE

 
          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:

Programowanie SQL Bazy Danych FTS Full-Text Search Wyszukiwanie Pełnotekstowe

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”:

Programowanie SQL Bazy Danych FTS Full-Text Search Wyszukiwanie Pełnotekstowe

 
 

INDEKSY PEŁNOTEKSTOWE

 
          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:

Programowanie SQL Bazy Danych FTS Full-Text Search Wyszukiwanie Pełnotekstowe

Po wybraniu powyższej opcji otworzy nam się nowe okno powitalne „Full-Text Indexing Wizard”.
1. Tutaj klikamy guzik „Next >”:

Programowanie SQL Bazy Danych FTS Full-Text Search Wyszukiwanie Pełnotekstowe

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 >”:

Programowanie SQL Bazy Danych FTS Full-Text Search Wyszukiwanie Pełnotekstowe

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 &gt”:

Programowanie SQL Bazy Danych FTS Full-Text Search Wyszukiwanie Pełnotekstowe

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 >”:

Programowanie SQL Bazy Danych FTS Full-Text Search Wyszukiwanie Pełnotekstowe

5. Przechodząc do następnego kroku przypisujemy pełnotekstowy indeks do pełnotekstowego katalogu „KursOnLine_FullTextCatalog” i klikamy guzik „Next >”:

Programowanie SQL Bazy Danych FTS Full-Text Search Wyszukiwanie Pełnotekstowe

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 >”:

Programowanie SQL Bazy Danych FTS Full-Text Search Wyszukiwanie Pełnotekstowe

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”:

Programowanie SQL Bazy Danych FTS Full-Text Search Wyszukiwanie Pełnotekstowe

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”:

Programowanie SQL Bazy Danych FTS Full-Text Search Wyszukiwanie Pełnotekstowe

 
 

ZAPYTANIA PEŁNOTEKSTOWE

 
          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).
 
 

TEZAURUSY

 
          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 „”.
 
 

STOPLISTY

 
          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.
 
 

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
 

KURSY SQL ONLINE