Tworzenie indeksów pełnotekstowych i zarządzanie nimi

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Ten artykuł opisuje, jak tworzyć, wypełniać i zarządzać indeksami pełnotekstowymi w SQL Server Database Engine. Indeks pełnotekstowy wspiera wyszukiwanie słów kluczowych i językowych w kolumnach znakowych w tabeli.

Stwórz katalog w pełnym tekstie

Zanim stworzysz indeks pełnotekstowy, potrzebujesz katalogu pełnego tekstu. Wykaz jest kontenerem wirtualnym dla co najmniej jednego indeksu pełnotekstowego. Więcej informacji można znaleźć w sekcji Utwórz i zarządzaj Full-Text katalogami.

Tworzenie, zmienianie lub usuwanie indeksu pełnotekstowego

Wypełnianie indeksu pełnotekstowego

Proces tworzenia i utrzymywania indeksu pełnotekstowego jest nazywany populacją (znaną również jako przeszukiwanie). Istnieją trzy typy populacji indeksów pełnotekstowych:

  • Pełna populacja
  • Populacja oparta na śledzeniu zmian
  • Populacja przyrostowa na podstawie znacznika czasu

Aby uzyskać więcej informacji, zobacz Wypełnianie indeksów Full-Text.

Wyświetlanie właściwości indeksu pełnotekstowego

Wyświetlanie właściwości indeksu pełnotekstowego za pomocą Transact-SQL

Wykaz lub dynamiczny widok zarządzania Description
sys.fulltext_index_catalog_usages Zwraca wiersz dla każdego odniesienia katalogu pełnotekstowego do indeksu pełnotekstowego.
sys.fulltext_index_columns Zawiera wiersz dla każdej kolumny będącej częścią indeksu pełnotekstowego.
sys.fulltext_index_fragments Indeks pełnotekstowy wykorzystuje wewnętrzne tabele zwane fragmentami indeksu pełnego tekstu do przechowywania odwróconych danych indeksowych. Możesz użyć tego widoku, aby zapytać metadane dotyczące tych fragmentów. Ten widok zawiera po jednym wierszu dla każdego fragmentu indeksu pełnotekstowego w każdej tabeli zawierającej indeks pełnotekstowy.
Sys.fulltext_indexes Zawiera jeden wiersz dla każdego indeksu pełnotekstowego obiektu tabelarycznego.
sys.dm_fts_index_keywords Zwraca informacje o zawartości indeksu pełnotekstowego dla określonej tabeli.
sys.dm_fts_index_keywords_by_document Zwraca informacje o zawartości na poziomie dokumentu indeksu pełnotekstowego dla określonej tabeli. Dane słowo kluczowe może pojawić się w kilku dokumentach.
sys.dm_fts_index_population Zwraca informacje o populacjach indeksów pełnotekstowych aktualnie w toku.

Wyświetlanie właściwości indeksu pełnotekstowego za pomocą programu SQL Server Management Studio

Uwaga / Notatka

Aby wyświetlić właściwości indeksów pełnotekstowych dla baz danych Azure SQL Database, użyj języka Transact-SQL.

  1. W programie SQL Server Management Studio w Eksploratorze obiektów rozwiń serwer.

  2. Rozwiń Databases, a następnie bazę danych, która zawiera indeks pełnotekstowy.

  3. Rozwiń Tabele.

  4. Kliknij prawym przyciskiem myszy tabelę, w której zdefiniowano indeks Full-Text, wybierz pozycję Full-Text indeks, a następnie w menu kontekstowym indeks Full-Text wybierz pozycję Właściwości. Ta akcja otwiera okno dialogowe Właściwości indeksu pełnego tekstu .

  5. W panelu Wybierz stronę wybierz dowolną z następujących stron:

    Strona Description
    Ogólne Wyświetla podstawowe właściwości indeksu pełnotekstowego. Właściwości te obejmują kilka modyfikowalnych właściwości oraz wiele niezmiennych, takich jak nazwa bazy danych, nazwa tabeli oraz nazwa kolumny klucza pełnego tekstu. Właściwości modyfikowalne to:

    Stoplista indeksu pełnotekstowego

    Włączono indeksowanie pełnotekstowe

    Śledzenie zmian

    Lista właściwości wyszukiwania
    Columns Wyświetla kolumny tabeli, które są dostępne do indeksowania pełnotekstowego. Wybrana kolumna lub kolumny są indeksowane pełnotekstowo. Możesz wybrać dowolną liczbę dostępnych kolumn, które mają zostać uwzględnione w indeksie pełnotekstowym. Aby uzyskać więcej informacji, zobacz Wypełnianie indeksów Full-Text.
    Harmonogramy Ta strona służy do tworzenia lub zarządzania harmonogramami zadania agenta programu SQL Server, które uruchamiają przyrostowe wypełnianie tabel dla indeksów pełnotekstowych. Aby uzyskać więcej informacji, zobacz Wypełnianie indeksów Full-Text.

    Uwaga: Po zamknięciu okna dialogowego Właściwości indeksu pełnotekstowego każdy nowo utworzony harmonogram jest skojarzony z zadaniem agenta SQL Server (Start Incremental Table Population w database_name.table_name).
  6. Wybierz przycisk OK , aby zapisać wszelkie zmiany i zamknąć okno dialogowe Właściwości indeksu pełnotekstowego .

Wyświetlanie właściwości indeksowanych tabel i kolumn

Możesz użyć kilku funkcji Transact-SQL, takich jak OBJECTPROPERTYEX, aby uzyskać wartość różnych właściwości indeksowania pełnego tekstu. Te informacje są przydatne do administrowania wyszukiwaniem pełnotekstowym i rozwiązywaniem problemów z nim.

W poniższej tabeli wymieniono właściwości pełnotekstowe związane z indeksowanymi tabelami i kolumnami oraz powiązanymi funkcjami Transact-SQL.

Majątek Description Funkcja
FullTextTypeColumn TYPE COLUMN w tabeli, która zawiera informacje o typie dokumentu w kolumnie. COLUMNPROPERTY
IsFulltextIndexed Określa, czy kolumna jest włączona do indeksowania pełnego tekstu. COLUMNPROPERTY
IsFulltextKey Czy indeks jest kluczem pełnotekstowym dla tabeli? INDEXPROPERTY
TableFulltextBackgroundUpdateIndexOn Czy tabela ma pełnotekstowe aktualizowanie w tle przy indeksowaniu. OBJECTPROPERTYEX
TableFulltextCatalogId Identyfikator wykazu pełnotekstowego, w którym znajdują się dane indeksu pełnotekstowego dla tabeli. OBJECTPROPERTYEX
TableFulltextChangeTrackingOn Określa, czy tabela ma włączone śledzenie zmian pełnotekstowych. OBJECTPROPERTYEX
TableFulltextDocsProcessed Liczba wierszy przetworzonych od początku indeksowania pełnotekstowego. OBJECTPROPERTYEX
TableFulltextFailCount Liczba wierszy nie zindeksowanych przez pełnotekstowe wyszukiwanie. OBJECTPROPERTYEX
TableFulltextItemCount Liczba wierszy, które zostały pomyślnie indeksowane pełnotekstowo. OBJECTPROPERTYEX
TableFulltextKeyColumn Identyfikator kolumny będącej unikatowym kluczem pełnotekstowym. OBJECTPROPERTYEX
TableFullTextMergeStatus Czy tabela z indeksem pełnotekstowym jest obecnie w trakcie scalania? OBJECTPROPERTYEX
TableFulltextPendingChanges Liczba oczekujących wpisów śledzenia zmian do przetworzenia. OBJECTPROPERTYEX
TableFulltextPopulateStatus Stan populacji tabeli pełnotekstowej. OBJECTPROPERTYEX
TableHasActiveFulltextIndex Określa, czy tabela ma aktywny indeks pełnotekstowy. OBJECTPROPERTYEX

Uzyskaj informacje o kluczowej kolumnie pełnotekstowej

Zazwyczaj łączy się wynik funkcji zwracających zestaw wierszy CONTAINSTABLE lub FREETEXTTABLE z tabelą bazową. W takich przypadkach musisz znać unikatową nazwę kolumny klucza. Możesz sprawdzić, czy dany unikalny indeks jest używany jako klucz pełnotekstowy, oraz uzyskać identyfikator kolumny klucza pełnego tekstu.

Określanie, czy dany unikatowy indeks jest używany jako kolumna klucza pełnotekstowego

Użyj instrukcji SELECT , aby wywołać funkcję INDEXPROPERTY . W wywołaniu funkcji użyj OBJECT_ID funkcji do przekształcenia nazwy tabeli (table_name) na identyfikator tabeli, określ nazwę unikalnego indeksu dla tabeli i określ właściwość indeksu IsFulltextKey w następujący sposób:

SELECT INDEXPROPERTY(OBJECT_ID('table_name'), 'index_name', 'IsFulltextKey');

To zdanie zwraca 1 , jeśli indeks wymusza unikalność dla kolumny klucza pełnego tekstu, a 0 jeśli nie.

Example

Poniższy przykład sprawdza, czy PK_Document_DocumentNode indeks wymusza unikalność dla kolumny klucza pełnego tekstu:

USE AdventureWorks2025;
GO

SELECT INDEXPROPERTY(OBJECT_ID('Production.Document'), 'PK_Document_DocumentNode', 'IsFulltextKey');

Ten przykład zwraca 1, jeśli PK_Document_DocumentNode indeks wymusza unikalność dla kolumny klucza pełnego tekstu. W przeciwnym razie zwraca 0 lub NULL. NULL Oznacza to, że używasz nieprawidłowej nazwy indeksu, nazwa indeksu nie odpowiada tabeli, tabela nie istnieje i tak dalej.

Znajdź identyfikator kolumny klucza pełnotekstowego

Każda tabela z pełnym tekstem ma kolumnę, która wymusza unikalne wiersze dla tabeli (unikalna kolumna klucza). Właściwość TableFulltextKeyColumn, uzyskana z funkcji OBJECTPROPERTYEX, zawiera identyfikator kolumny klucza unikatowego.

Aby uzyskać ten identyfikator, użyj SELECT instrukcji, która wywołuje funkcję OBJECTPROPERTYEX . Użyj OBJECT_ID funkcji do przekształcenia nazwy tabeli (table_name) na identyfikator tabeli i określenia TableFulltextKeyColumn własności, w następujący sposób:

SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFulltextKeyColumn') AS 'Column Identifier';

Przykłady

Poniższy przykład zwraca identyfikator kolumny klucza pełnego tekstu lub NULL. NULL Oznacza to, że używasz nieprawidłowej nazwy indeksu, nazwa indeksu nie odpowiada tabeli, tabela nie istnieje itd.

USE AdventureWorks2025;
GO

SELECT OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn');
GO

Poniższy przykład pokazuje, jak użyć identyfikatora unikalnej kolumny klucza, aby uzyskać nazwę kolumny.

USE AdventureWorks2025;
GO

DECLARE @key_column AS SYSNAME;

SET @key_column = COL_NAME(
    OBJECT_ID('Production.Document'),
    OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn')
);

SELECT @key_column AS 'Unique Key Column';
GO

Ten przykład zwraca kolumnę zestawu wyników o nazwie Unique Key Column, która wyświetla pojedynczy wiersz zawierający nazwę unikatowej kolumny klucza tabeli DocumentNode. Jeśli to zapytanie zawierało nieprawidłową nazwę indeksu, nazwa indeksu nie odpowiadała tabeli, tabela nie istniała i tak dalej, zwracało NULL.

Zindeksuj kolumny varbinary(max) i XML

Jeśli utworzysz indeks pełnotekstowy dla kolumny varbinary(max), varbinary lub xml, możesz wykonywać na niej zapytania za pomocą predykatów pełnotekstowych (CONTAINS i FREETEXT) oraz funkcji (CONTAINSTABLE i FREETEXTTABLE), tak jak w przypadku każdej innej kolumny zindeksowanej pełnotekstowo.

Indeks varbinary(max) lub varbinary data

Pojedyncza kolumna varbinary(max) lub varbinary może przechowywać wiele typów dokumentów. Database Engine obsługuje każdy typ dokumentu, dla którego zainstalowany jest filtr i dostępny w systemie operacyjnym. Typ dokumentu każdego dokumentu jest identyfikowany przez rozszerzenie pliku dokumentu. Na przykład dla rozszerzenia .doc pliku wyszukiwanie pełnotekstowe wykorzystuje filtr wspierający dokumenty Microsoft Word. Aby uzyskać listę dostępnych typów dokumentów, wykonaj zapytanie dotyczące widoku wykazu sys.fulltext_document_types .

Silnik Full-Text może używać istniejących filtrów zainstalowanych w systemie operacyjnym. Aby można było używać filtrów systemu operacyjnego, modułów dzielenia wyrazów i stemmerów, należy załadować je w wystąpieniu serwera w następujący sposób:

EXECUTE sp_fulltext_service
    @action = 'load_os_resources',
    @value = 1;

Aby utworzyć indeks pełnotekstowy w kolumnie varbinary(max), silnik Full-Text musi mieć dostęp do rozszerzeń plików dokumentów w kolumnie varbinary(max). Musisz przechowywać te informacje w kolumnie tabeli, zwanej kolumną typu, którą przypisujesz kolumnie varbinary(max) w indeksie pełnym tekstem. Podczas indeksowania dokumentu aparat Full-Text używa rozszerzenia pliku w kolumnie typu w celu zidentyfikowania, który filtr ma być używany.

Indeksowanie danych XML

Kolumna typu danych XML przechowuje tylko dokumenty XML i fragmenty, a tylko filtr XML jest używany dla dokumentów. W związku z tym kolumna typu jest niepotrzebna. W kolumnach XML indeks pełnotekstowy indeksuje zawartość elementów XML, ale ignoruje znaczniki XML. Wartości atrybutów są indeksowane w pełnym tekście, chyba że są to wartości liczbowe. Znaczniki elementów są używane jako granice tokenów. Obsługiwane są dobrze skonstruowane dokumenty XML lub HTML oraz fragmenty zawierające wiele języków.

Aby uzyskać więcej informacji o indeksowaniu i zapytaniach na kolumnie xml , zobacz : Użyj pełnotekstowego wyszukiwania z kolumnami XML.

Wyłączanie lub ponowne włączanie indeksowania pełnotekstowego dla tabeli

W Database Engine wszystkie bazy danych tworzone przez użytkownika są domyślnie włączone z pełnym tekstem. Ponadto pojedyncza tabela jest automatycznie włączona na potrzeby indeksowania pełnotekstowego zaraz po utworzeniu na nim indeksu pełnotekstowego i do indeksu zostanie dodana kolumna. Tabela jest automatycznie wyłączona na potrzeby indeksowania pełnotekstowego, gdy ostatnia kolumna zostanie porzucona z indeksu pełnotekstowego.

W tabeli z indeksem pełnego tekstu można ręcznie wyłączyć lub ponownie włączyć tabelę do indeksowania pełnego tekstu, korzystając z SQL Server Management Studio.

  1. Rozwiń grupę serwerów, rozwiń węzeł Bazy danych i rozwiń bazę danych zawierającą tabelę, którą chcesz włączyć do indeksowania pełnotekstowego.

  2. Rozwiń Tabele i kliknij prawym przyciskiem myszy tabelę, którą chcesz wyłączyć lub ponownie włączyć do indeksowania pełnotekstowego.

  3. Wybierz indeks Full-Text, a następnie wybierz opcję Wyłącz indeks Full-Text lub Włącz indeks Full-Text.

Usuwanie indeksu pełnotekstowego z tabeli

  1. W Eksploratorze obiektów kliknij prawym przyciskiem myszy tabelę zawierającą indeks pełnotekstowy, który chcesz usunąć.

  2. Wybierz Usuń Full-Text index.

  3. Po wyświetleniu monitu wybierz przycisk OK , aby potwierdzić, że chcesz usunąć indeks pełnotekstowy.