Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

SQL Server Full-Text Search

Termin Definicja
SQL Server Full-Text Search

Full-Text Search to funkcja umożliwiająca zaawansowane wyszukiwanie tekstowe w kolumnach objętych indeksem.

Rola Full-Text Search w silniku SQL Server

SQL Server Full-Text Search jest mechanizmem wyszukiwania treści tekstowej przechowywanej w kolumnach tabel. Działa na podstawie osobnego indeksu pełnotekstowego, który analizuje słowa, ich położenie oraz wybrane właściwości językowe. Rozwiązanie jest przeznaczone przede wszystkim do wyszukiwania dokumentów, opisów, komentarzy, wiadomości i innych większych fragmentów tekstu, dla których zwykłe porównanie za pomocą operatora LIKE byłoby mniej elastyczne albo wymagałoby skanowania wielu wierszy.

Indeks pełnotekstowy nie zastępuje zwykłych indeksów relacyjnych. Jest utrzymywany przez komponent Full-Text Engine i korzysta między innymi z dzielników wyrazów, analizatorów odmian oraz list słów pomijanych. W konfiguracji SQL Server indeks jest powiązany z konkretną tabelą i kolumnami typu obsługiwanego przez wyszukiwanie pełnotekstowe, na przykład varchar, nvarchar, char, nchar, text lub ntext. W przypadku kolumn przechowujących dokumenty binarne, takich jak varbinary(max), dodatkowe znaczenie ma typ pliku wskazany w kolumnie typu MIME lub rozszerzenia.

Indeks, katalog i przebudowa zawartości

Do utworzenia indeksu pełnotekstowego SQL Server wymaga unikatowego, jednoznacznego klucza w tabeli. Zwykle jest to klucz główny albo inny unikatowy indeks złożony z jednej kolumny. Klucz ten pozwala powiązać znaleziony fragment tekstu z właściwym wierszem tabeli. Definicja indeksu określa również kolumny objęte wyszukiwaniem, język analizy oraz opcjonalną listę słów pomijanych, czyli stoplistę. Jeden indeks pełnotekstowy może obejmować kilka kolumn tej samej tabeli.

Indeksy pełnotekstowe są przechowywane w katalogach pełnotekstowych. Po utworzeniu indeksu SQL Server wykonuje populację początkową, podczas której odczytuje dane i buduje strukturę wyszukiwania. Późniejsze zmiany mogą być śledzone automatycznie przez mechanizm change tracking albo uwzględniane podczas populacji uruchamianej ręcznie. Dostępne tryby śledzenia to między innymi AUTO, MANUAL i OFF. Przy wyłączonym śledzeniu zmiany w tabeli nie są samoczynnie dopisywane do indeksu, dlatego konieczne jest zaplanowanie odpowiedniej populacji. Stan i postęp operacji można kontrolować w widokach katalogowych oraz za pomocą właściwości związanych z pełnym tekstem.

Predykaty CONTAINS i FREETEXT w zapytaniach

SQL Server udostępnia dwa podstawowe predykaty do wyszukiwania pełnotekstowego. CONTAINS służy do precyzyjnego określania warunków. Pozwala wyszukiwać konkretną frazę, terminy alternatywne, formy fleksyjne oraz prefiksy. Przykładowe zapytanie WHERE CONTAINS(Opis, '"dysk SSD"') szuka wskazanej frazy, natomiast WHERE CONTAINS(Opis, 'FORMSOF(INFLECTIONAL, naprawa)') może uwzględnić formy fleksyjne analizowane dla danego języka. Wyszukiwanie prefiksowe wymaga specjalnej składni, na przykład CONTAINS(Opis, '"komput*"').

FREETEXT jest przeznaczony do wyszukiwania bardziej swobodnego. SQL Server analizuje przekazany tekst, rozbija go na terminy i próbuje znaleźć dokumenty powiązane znaczeniowo lub językowo z podanym opisem. Do zwracania wyników wraz z rankingiem można użyć funkcji tabelarycznych CONTAINSTABLE i FREETEXTTABLE. Funkcje te zwracają klucz wiersza oraz wartość RANK, którą można wykorzystać do sortowania wyników, ale ranking nie jest oceną prawdziwości dokumentu ani uniwersalnym wynikiem jakości. Wyszukiwanie zależy od języka kolumny, konfiguracji stoplisty i dostępnych komponentów językowych, dlatego identyczne zapytanie może dawać inne rezultaty po zmianie ustawień analizy tekstu.

Diagnostyka opóźnionych lub niepełnych wyników

Jeżeli nowo zapisany tekst nie pojawia się w wynikach, pierwszym krokiem jest sprawdzenie, czy indeks pełnotekstowy istnieje dla właściwej tabeli i kolumny oraz czy działa śledzenie zmian. Następnie należy ustalić, czy trwa populacja początkowa, pełna lub przyrostowa. Dane mogą być już zapisane w tabeli, lecz jeszcze nieprzetworzone przez indeks. Warto także zweryfikować, czy wyszukiwane słowo nie znajduje się na stopliście, nie jest traktowane jako zbyt częste albo nie zostało zmienione przez reguły dzielenia wyrazów i analizy fleksyjnej.

Niepełne wyniki mogą wynikać również z użycia niewłaściwego predykatu. LIKE '%fragment%' i Full-Text Search stosują różne zasady dopasowania, więc nie powinno się zakładać, że zwrócą identyczny zbiór wierszy. Dla dokumentów binarnych trzeba sprawdzić, czy SQL Server rozpoznaje typ pliku i czy z jego zawartości można wyodrębnić tekst. Podczas diagnostyki należy kontrolować błędy populacji, uprawnienia do odczytu danych, dostępność właściwego języka oraz obciążenie instancji. Po usunięciu przyczyny można uruchomić odpowiednią populację indeksu i ponownie porównać wyniki z kontrolnym zapytaniem SQL.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę