Zapełnianie indeksów Full-Text
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Tworzenie i utrzymywanie indeksu pełnotekstowego obejmuje wypełnianie indeksu przy użyciu procesu nazywanego populacji (nazywanego również przeszukiwaniem ).
Typy populacji
Indeks pełnotekstowy obsługuje następujące typy populacji:
- pełna populacja
- Automatyczna lub ręczna populacja oparta na śledzeniu zmian
- Przyrost liczby ludności na podstawie sygnatury czasowej
Pełna populacja
Podczas pełnej populacji wpisy indeksu są tworzone dla wszystkich wierszy tabeli lub widoku indeksowanego. Pełna populacja indeksu pełnotekstowego tworzy wpisy indeksu dla wszystkich wierszy tabeli podstawowej lub widoku indeksowanego.
Domyślnie program SQL Server wypełnia nowy indeks pełnotekstowy natychmiast po jego utworzeniu.
- Z jednej strony pełna populacja może zużywać znaczną ilość zasobów. W związku z tym podczas tworzenia indeksu pełnotekstowego w okresach szczytowych często najlepszym rozwiązaniem jest opóźnienie pełnej populacji do czasu poza szczytem, szczególnie jeśli tabela podstawowa indeksu pełnotekstowego jest duża.
- Z drugiej strony wykaz pełnotekstowy, do którego należy indeks, nie może być używany do momentu wypełnienia wszystkich indeksów pełnotekstowych.
Aby utworzyć indeks pełnotekstowy bez natychmiastowego wypełniania go, określ klauzulę CHANGE_TRACKING OFF, NO POPULATION
w instrukcji CREATE FULLTEXT INDEX
. Jeśli określisz CHANGE_TRACKING MANUAL
, mechanizm Full-Text nie wypełni nowego indeksu pełnotekstowego, dopóki nie wykonasz instrukcji ALTER FULLTEXT INDEX
z użyciem klauzuli START FULL POPULATION
lub START INCREMENTAL POPULATION
.
Przykład — tworzenie indeksu pełnotekstowego bez uruchamiania pełnej populacji
Poniższy przykład tworzy indeks pełnotekstowy w tabeli Production.Document
przykładowej bazy danych AdventureWorks
. W tym przykładzie użyto WITH CHANGE_TRACKING OFF, NO POPULATION
, aby opóźnić początkową pełną populację.
CREATE UNIQUE INDEX ui_ukDoc ON Production.Document(DocumentID);
CREATE FULLTEXT CATALOG AW_Production_FTCat;
CREATE FULLTEXT INDEX ON Production.Document
(
Document --Full-text index column name
TYPE COLUMN FileExtension --Name of column that contains file type information
Language 1033 --1033 is LCID for the English language
)
KEY INDEX ui_ukDoc
ON AW_Production_FTCat
WITH CHANGE_TRACKING OFF, NO POPULATION;
GO
Przykład — uruchamianie pełnej populacji w tabeli
Poniższy przykład uruchamia pełną populację w tabeli Production.Document
przykładowej bazy danych AdventureWorks
.
ALTER FULLTEXT INDEX ON Production.Document
START FULL POPULATION;
Populacja oparta na śledzeniu zmian
Opcjonalnie możesz użyć śledzenia zmian, aby zachować indeks pełnotekstowy po początkowej pełnej populacji. Istnieje niewielkie obciążenie związane ze śledzeniem zmian, ponieważ program SQL Server utrzymuje tabelę, w której śledzi zmiany w tabeli podstawowej od ostatniej populacji. W przypadku korzystania ze śledzenia zmian program SQL Server przechowuje rekord wierszy w tabeli podstawowej lub widoku indeksowanego, które zostały zmodyfikowane przez aktualizacje, usuwanie lub wstawianie. Zmiany danych wprowadzone za pomocą WRITETEXT i UPDATETEXT nie są odzwierciedlane w indeksie pełnotekstowym i nie są wykrywane przez śledzenie zmian.
Notatka
W przypadku tabel zawierających sygnaturę czasową kolumny można użyć populacji przyrostowej zamiast śledzenia zmian.
Po włączeniu śledzenia zmian podczas tworzenia indeksu program SQL Server w pełni wypełnia nowy indeks pełnotekstowy natychmiast po jego utworzeniu. Następnie zmiany są śledzone i propagowane do indeksu pełnotekstowego.
Włączanie śledzenia zmian
Istnieją dwa typy śledzenia zmian:
- Automatyczne ( opcja
CHANGE_TRACKING AUTO
). Automatyczne śledzenie zmian jest zachowaniem domyślnym. - Ręczne (opcja
CHANGE_TRACKING MANUAL
).
Typ śledzenia zmian określa sposób wypełniania indeksu pełnotekstowego w następujący sposób:
automatyczne wypełnianie
Domyślnie lub jeśli określisz
CHANGE_TRACKING AUTO
, aparat Full-Text używa automatycznej populacji w indeksie pełnotekstowym. Po zakończeniu początkowej pełnej populacji zmiany są śledzone w miarę modyfikowania danych w tabeli podstawowej, a śledzone zmiany są propagowane automatycznie. Indeks pełnotekstowy jest jednak aktualizowany w tle, więc propagowane zmiany mogą nie zostać odzwierciedlone natychmiast w indeksie.Aby rozpocząć śledzenie zmian przy użyciu automatycznej populacji
UTWÓRZ INDEKS FULLTEXT ... z automatycznym CHANGE_TRACKING
ALTER FULLTEXT INDEX ... USTAWIANIE CHANGE_TRACKING AUTOMATYCZNE
Przykład — zmiana indeksu pełnotekstowego w celu używania automatycznego śledzenia zmian
Poniższy przykład zmienia indeks pełnotekstowy tabeliHumanResources.JobCandidate
w przykładowej bazie danychAdventureWorks
, aby używać śledzenia zmian z automatyczną populacją.USE AdventureWorks; GO ALTER FULLTEXT INDEX ON HumanResources.JobCandidate SET CHANGE_TRACKING AUTO; GO
Ręczne wypełnianie
Jeśli określisz CHANGE_TRACKING MANUAL, silnik Full-Text używa ręcznego wypełniania indeksu pełnotekstowego. Po zakończeniu początkowej pełnej populacji zmiany są śledzone w miarę modyfikowania danych w tabeli podstawowej. Nie są one jednak propagowane do indeksu pełnotekstowego do momentu wykonania polecenia ALTER FULLTEXT INDEX ... START UPDATE POPULATION. Agent programu SQL Server umożliwia okresowe wywoływanie tej instrukcji Transact-SQL.
Aby rozpocząć śledzenie zmian przy użyciu ręcznej populacji
CREATE FULLTEXT INDEX ... Z RĘCZNYM ŚLEDZENIEM ZMIAN
ALTER FULLTEXT INDEX ... USTAWIANIE CHANGE_TRACKING RĘCZNE
Przykład — tworzenie indeksu pełnotekstowego z ręcznym śledzeniem zmian
Poniższy przykład tworzy indeks pełnotekstowy, który będzie używać śledzenia zmian z ręczną populacją w tabeliHumanResources.JobCandidate
przykładowej bazy danychAdventureWorks
.USE AdventureWorks; GO CREATE UNIQUE INDEX ui_ukJobCand ON HumanResources.JobCandidate(JobCandidateID); CREATE FULLTEXT CATALOG ft AS DEFAULT; CREATE FULLTEXT INDEX ON HumanResources.JobCandidate(Resume) KEY INDEX ui_ukJobCand WITH CHANGE_TRACKING=MANUAL; GO
przykład — uruchamianie ręcznej populacji
Poniższy przykład uruchamia ręczną populację w indeksie pełnotekstowym śledzonym przez zmiany tabeliHumanResources.JobCandidate
przykładowej bazy danychAdventureWorks
.USE AdventureWorks; GO ALTER FULLTEXT INDEX ON HumanResources.JobCandidate START UPDATE POPULATION; GO
Wyłączanie śledzenia zmian
CREATE FULLTEXT INDEX ... Z wyłączonym CHANGE_TRACKING
ALTER FULLTEXT INDEX ... USTAW CHANGE_TRACKING WYŁĄCZONE
Populacja przyrostowa na podstawie znacznika czasu
Populacja przyrostowa to alternatywny mechanizm ręcznego wypełniania indeksu pełnotekstowego. Jeśli w tabeli występuje duża liczba wstawiania, użycie populacji przyrostowej może być bardziej wydajne przy użyciu populacji ręcznej.
Można uruchomić populację przyrostową dla indeksu pełnotekstowego, który ma CHANGE_TRACKING ustawiony na RĘCZNE lub WYŁĄCZONE.
Wymaganie dla populacji przyrostowej polega na tym, że indeksowana tabela musi mieć kolumnę znacznika czasu typu danych. Jeśli kolumna sygnatury czasowej nie istnieje, nie można wykonać populacji inkrementalnej.
Program SQL Server używa sygnatury czasowej kolumny, aby zidentyfikować wiersze, które uległy zmianie od ostatniej populacji. Populacja przyrostowa aktualizuje następnie indeks pełnotekstowy dla wierszy dodanych, usuniętych lub zmodyfikowanych po ostatniej populacji lub gdy ostatnia populacja była w toku. Pod koniec przetwarzania populacji silnik Full-Text rejestruje nową wartość znacznika czasu. Ta wartość jest największym znacznikiem czasu znalezionym przez program zbierający SQL. Ta wartość będzie używana, gdy rozpocznie się kolejna populacja przyrostowa.
W niektórych przypadkach żądanie dla populacji przyrostowej powoduje pełną populację.
- Żądanie dotyczące populacji przyrostowej w tabeli bez sygnatury czasowej kolumny powoduje pełną operację populacji.
- Jeśli pierwsza populacja w indeksie pełnotekstowym jest populacją przyrostową, indeksuje wszystkie wiersze, co odpowiada pełnej populacji.
- Jeśli jakiekolwiek metadane wpływające na indeks pełnotekstowy tabeli zmieniły się od ostatniej populacji, żądania populacji przyrostowej są implementowane jako pełne populacje. Obejmuje to zmiany metadanych spowodowane zmianą dowolnej kolumny, indeksu lub definicji indeksu pełnotekstowego.
Uruchamianie populacji przyrostowej
Aby uruchomić populację przyrostową, wykonaj instrukcję ALTER FULLTEXT INDEX
przy użyciu klauzuli START INCREMENTAL POPULATION
.
Tworzenie lub zmienianie harmonogramu dla populacji przyrostowej
W programie Management Studio w Eksploratorze obiektów rozwiń serwer.
Rozwiń Databases, a następnie bazę danych, która zawiera indeks pełnotekstowy.
Rozwiń Tabele.
Kliknij prawym przyciskiem myszy tabelę, w której zdefiniowano indeks pełnotekstowy, wybierz Full-Text indeks, a następnie w menu kontekstowym indeksu Full-Textkliknij pozycję Właściwości. Spowoduje to otwarcie okna dialogowego właściwości pełnotekstowego indeksu .
Ważny
Jeśli tabela podstawowa lub widok nie zawiera kolumny sygnatury czasowej typu danych, przyrostowa populacja nie jest możliwa.
W okienku Wybierz stronę wybierz pozycję Harmonogramy.
Ta strona służy do tworzenia harmonogramów zadania agenta programu SQL Server lub zarządzania nimi, które uruchamia przyrostową populację tabel w tabeli podstawowej lub indeksowany widok indeksu pełnotekstowego.
Opcje są następujące:
Aby utworzyć nowy harmonogram, kliknij przycisk Nowy.
Spowoduje to otwarcie okna dialogowego New Full-Text Indexing Table Schedule, w którym można utworzyć harmonogram. Aby zapisać harmonogram, kliknij przycisk OK.
Ważny
Zadanie agenta SQL Server (Rozpocznij przyrostową populację tabeli w database_name.table_name) jest skojarzone z nowym harmonogramem po zamknięciu okna dialogowego Właściwości indeksu Full-Text. Jeśli tworzysz wiele harmonogramów dla tego samego indeksu pełnotekstowego, wszystkie używają tego samego zadania.
Aby zmienić istniejący harmonogram, wybierz istniejący harmonogram i kliknij przycisk Edytuj.
Spowoduje to otwarcie okna dialogowego New Full-Text Indexing Table Schedule, w którym można zmodyfikować harmonogram.
Notatka
Aby uzyskać informacje na temat modyfikowania zadania agenta programu SQL Server, zobacz Modyfikowanie zadania.
Aby usunąć istniejący harmonogram, wybierz istniejący harmonogram i kliknij przycisk Usuń.
Wybierz pozycję OK.
Rozwiązywanie problemów z błędami w populacji pełnotekstowej (przeszukiwanie)
Gdy wystąpi błąd podczas przeszukiwania, narzędzie rejestrowania przeszukiwania Full-Text tworzy i prowadzi dziennik przeszukiwania, który jest plikiem zwykłego tekstu. Każdy dziennik przeszukiwania odpowiada określonemu wykazowi pełnotekstowemu. Domyślnie dzienniki przeszukiwania dla danego wystąpienia (w tym przykładzie wystąpienie domyślne) znajdują się w folderze %ProgramFiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\LOG
.
Plik dziennika przeszukiwania jest zgodny z następującym schematem nazewnictwa:
SQLFT<DatabaseID><FullTextCatalogID>.LOG[<n>]
Poniżej przedstawiono zmienne części nazwy pliku dziennika przeszukiwania.
- < DatabaseID> — identyfikator bazy danych. < dbid> jest liczbą pięciocyfrową z zerami wiodącymi.
- < FullTextCatalogID> — identyfikator wykazu pełnotekstowego. < catid> jest liczbą pięciocyfrową z zerami wiodącymi.
- < n> — jest liczbą całkowitą wskazującą, że istnieje co najmniej jeden dziennik przeszukiwania tego samego wykazu pełnotekstowego.
Na przykład SQLFT0000500008.2
jest plikiem dziennika przeszukiwania bazy danych o identyfikatorze bazy danych = 5, a identyfikatorem wykazu pełnotekstowego = 8. Wartość 2 na końcu nazwy pliku wskazuje, że istnieją dwa pliki dziennika przeszukiwania dla tej pary bazy danych/katalogu.
Zobacz też
sys.dm_fts_index_population (Transact-SQL)
Rozpocznij pracę z usługą Full-Text Search
tworzenie indeksów Full-Text i zarządzanie nimi
TWÓRZ PEŁNOTEKSTOWY INDEKS (Transact-SQL)
ALTER FULLTEXT INDEX (Transact-SQL)