Google
 
Strona główna Darmowe programy, shareware Programowanie MS Excel Porady komputerowe Bazy danych Kontakt

Przeszukiwanie pełnotekstowe w SQL Server


Przeszukiwanie pełnotekstowe

Przeszukiwanie pełnotekstowe zastosowane w SQL Server 2000 to znakomity sposób na zwiększenie wydajności operacji wyszukiwania w przypadku gdy mamy do czynienia z tabelą o sporej ilości wierszy, w których są dane tekstowe znacznych rozmiarów. Na przykład jeśli mamy tabelę o 10000 wierszy i w każdym z nich jest średnio 20 kB tekstu to wyszukiwanie w takim przypadku za pomocą klauzuli LIKE '%wyszukiwane_słowo%' może być bardzo kosztowne. Jeśli dodatkowo mamy do czynienia ze środowiskiem, w którym z bazą łączy się jednocześnie wielu użytkowników (środowisko WWW) to zastosowanie indeksów pełnotekstowych może być koniecznością. Tradycyjne przeszukiwanie za pomocą konstrukcji LIKE przypomina przeglądanie wszystkich stron książki w poszukiwaniu danego słowa, podczas gdy wyszukiwanie pełnotekstowe to wyszukiwanie w skorowidzu książki.



Tworzenie indeksu

Tworzenie indeksu jest operacją bardzo kosztowną dlatego należy ją przeprowadzać w czasie minimalnego obciążenia serwera np w nocy (tworzenie lub odbudowę takiego indeksu można zaplanować jako zadanie SQL Server Agenta). Proces ten można przeprowadzać na dwa sposoby: całkowite tworzenie indeksu (full population) i przyrostowe (incremental population). Całkowite tworzenie indeksu oznacza jego zbudowanie od nowa. Operacja ta może trwać nawet 30 min (dla tabeli o wspomnianej wcześniej wielkości). Przy odbudowie przyrostowej dokonywane są tylko te zmiany, które zaszły w zmienionych wierszach. W takim schemacie jeśli dane w tabeli są często aktualizowane to wyniki wyszukiwania będą zawsze trochę przekłamane. Wyjściem jest wywoływanie co jakiś czas odbudowy przyrostowej indeksu. Można tego dokonać poprzez wywołanie odpowiedniej procedury składowanej:

EXEC sp_fulltext_catalog 'nazwa_katalogu', 'start_full'

Słowa - szum

Jest to specyficzny dla każdego języka zestaw słów, który pojawia się tekstach. Słowa te takie jak np.: który, że, na, pod ,albo nie są wyszukiwane i usunięcie ich z indeksu może zwiększyć wydajność takiego wyszukiwania. Lista słów dla każdego obsługiwanego języka znajduje się w specjalnym pliku tekstowym umiejscowionym w katalogu SQL Servera. Jeśli w danej kopii SQL Servera nie ma obsługi danego języka to wybieramy "Neutral". W wersji 2005 SQL Servera znajduje się już dołączona obsługa języka polskiego dla wyszukiwania pełnotekstowego. O ile mi wiadomo dołączenie obsługi nowego języka wymaga (oprócz utworzenia pliku ze słowami-szumem) modyfikacji w rejestrze systemowym.

Zapytania SQL wyszukujące w indeksie kontra tradycyjne zapytania

Tradycyjne zapytanie wyszukujące posiada następującą budowę:

SELECT kolumna FROM tabela WHERE kolumna LIKE '%szukane_slowo%' ;

Wyszukiwanie z wykorzystaniem indeksu pełnotekstowego może wyglądać następująco:

SELECT kolumna FROM tabela WHERE CONTAINS(kolumna,'wyszukiwane_slowo');

Funkcja CONTAINS jako drugi argument akceptuje także wyrażenia logiczne np.:

SELECT kolumna FROM tabela WHERE CONTAINS(kolumna_1,' "slowo_1" AND "slowo_2" ');

W tym przykładzie pokazane zostaną wszystkie te wiersze, które w kolumnie kolumna_1 posiadają słowo_1 i słowo_2.

Wykorzystanie rankingu przy wyszukiwaniu pełnotekstowym

W SQL Server istnieje specjalna funkcja CONTAINSTABLE() zwracająca zbiór danych składający się z dwóch kolumn. Pierwsza z nich to wartości klucza głównego a druga to pozycja w rankingu. Funkcję CONTAINSTABLE() można w zapytaniach traktować jako tabelę:

SELECT * FROM CONTAINSTABLE(tabela1,kolumna1,' "slowo" ')


 

Copyright © 2006-2010 programowaniePC.pl