Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Tworzy pełny indeks tekstowy w tabeli lub indeksowanym widoku w bazie danych w SQL Server. Na widok tabeli lub indeksu indeksowanego dozwolony jest tylko jeden indeks pełnego tekstu, a każdy indeks pełnego tekstu odnosi się do pojedynczej tabeli lub widoku indeksowego. Indeks pełnego tekstu może zawierać do 1024 kolumn.
Transact-SQL konwencje składni
Składnia
CREATE FULLTEXT INDEX ON table_name
[ ( { column_name
[ TYPE COLUMN type_column_name ]
[ LANGUAGE language_term ]
[ STATISTICAL_SEMANTICS ]
} [ , ...n ]
) ]
KEY INDEX index_name
[ ON <catalog_filegroup_option> ]
[ WITH ( <with_option> [ , ...n ] ) ]
[;]
<catalog_filegroup_option>::=
{
fulltext_catalog_name
| ( fulltext_catalog_name , FILEGROUP filegroup_name )
| ( FILEGROUP filegroup_name , fulltext_catalog_name )
| ( FILEGROUP filegroup_name )
}
<with_option>::=
{
CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF [ , NO POPULATION ] }
| STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }
| SEARCH PROPERTY LIST [ = ] property_list_name
}
Arguments
table_name
Nazwa tabeli lub widoku indeksowego, który zawiera kolumnę lub kolumny zawarte w indeksie pełnym tekstem.
column_name
Nazwa kolumny zawartej w pełnym tekście indeksu. Do wyszukiwania pełnego tekstu można indeksować tylko kolumny typu char, varchar, nchar, nvarchar, text, ntext, image, xml oraz varbinary(max). Aby określić wiele kolumn, powtórz klauzulę column_name w następujący sposób:
UTWORZENIE PEŁNEGO INDEKSU TEKSTOWEGO NA table_name (column_name1 [...], column_name2 [...]) ...
KOLUMNA TYPU type_column_name
Określa nazwę kolumny tabeli, type_column_name, która służy do przechowywania typu dokumentu dla dokumentu varbinary(max) lub dokumentu obrazowego . Ta kolumna, znana jako kolumna typu, zawiera rozszerzenie pliku podany przez użytkownika (.doc, .pdf, .xlsi tak dalej). Kolumna typu musi być typu char, nchar, varchar lub nvarchar.
Określ KOLUMNĘ TYPU type_column_name tylko wtedy, gdy column_name określa kolumnę varbinary(max) lub obraz , w której dane są przechowywane jako dane binarne; w przeciwnym razie SQL Server zwraca błąd.
Uwaga / Notatka
Podczas indeksowania Full-Text Engine używa skrótu w kolumnie type każdego wiersza tabeli, aby określić, którego filtra pełnotekstowego ma się użyć dla dokumentu w column_name. Filtr ładuje dokument jako strumień binarny, usuwa informacje o formatowaniu i przesyła tekst z dokumentu do komponentu łamającego słowa. Aby uzyskać więcej informacji, zobacz Konfigurowanie filtrów i zarządzanie nimi pod kątem wyszukiwania.
LANGUAGE_TERM JĘZYKA
Język danych przechowywanych w column_name.
language_term jest opcjonalny i może być określony jako ciąg znaków, wartości całkowitej lub szesnastkowej odpowiadające lokalnemu identyfikatorowi (LCID) języka. Jeśli nie podano wartości, używany jest domyślny język instancji SQL Server.
Jeśli language_term jest wskazany, język, który reprezentuje, służy do indeksowania danych przechowywanych w kolumnach char, nchar, varchar, nvarchar, text i ntext . Ten język jest domyślnym używanym w czasie zapytania, jeśli language_term nie jest określony jako część pełnotekstowego predykatu względem kolumny.
Gdy jest określony jako ciąg znaków, language_term odpowiada wartości kolumny aliasu w tabeli systemowej sys.syslanguages . Ciąg musi być otoczony cudzysłowem, jak w 'language_term'. Po określeniu jako liczba całkowita language_term jest rzeczywistym identyfikatorem LCID identyfikującym język. Gdy podano wartość szesnastkową, language_term jest poprzedzana 0x wartością heksadecimalną LCID. Wartość heksadecimalna nie może przekraczać ośmiu cyfr, wliczając wiodące zera.
Jeśli wartość jest w formacie zestawu znaków dwubajtowych (DBCS), program SQL Server konwertuje ją na Unicode.
Zasoby, takie jak łamacze słów i stemmery, muszą być włączone dla języka określonego jako language_term. Jeśli takie zasoby nie obsługują danego języka, SQL Server zwraca błąd.
Użyj procedury zapisanej, sp_configure aby uzyskać dostęp do informacji o domyślnym pełnotekstowym języku instancji Microsoft SQL Server. Więcej informacji można znaleźć w sp_configure (Transact-SQL).
W kolumnach nie-BLOB i nie-XML zawierających dane tekstowe w wielu językach lub w przypadkach, gdy język tekstu przechowywanego w kolumnie jest nieznany, może być odpowiednie skorzystanie z neutralnego zasobu językowego (0x0) Jednak najpierw powinieneś zrozumieć możliwe konsekwencje korzystania0x0 z neutralnego () zasobu językowego. Aby uzyskać informacje o możliwych rozwiązaniach i konsekwencjach korzystania0x0 z neutralnego () zasobu językowego, zobacz Wybierz język podczas tworzenia indeksu Full-Text.
W przypadku dokumentów przechowywanych w kolumnach typu XML lub BLOB, kodowanie językowe w dokumencie jest używane podczas indeksowania. Na przykład w kolumnach xml:lang XML atrybut w dokumentach XML identyfikuje język. W czasie zapytania wartość wcześniej określona w language_term staje się domyślnym językiem używanym do zapytań pełnotekstowych, chyba że language_term jest określony jako część zapytania pełnego tekstu.
STATISTICAL_SEMANTICS
Dotyczy do: SQL Server (SQL Server 2012 (11.x) i nowszy)
Tworzy dodatkowe kluczowe frazy i indeksy podobieństwa dokumentów, które są częścią statystycznego indeksowania semantycznego. Aby uzyskać więcej informacji, zobacz Semantic Search (SQL Server).
KLUCZOWY index_name
Nazwa unikalnego indeksu klucza na table_name. KEY INDEX musi być unikalną, jednokluczową, nieunieważnialną kolumną. Wybierz najmniejszy unikalny indeks klucza dla pełnego tekstu unikalnego klucza. Dla najlepszej wydajności zalecamy całkowitoliczbowy typ danych dla klucza pełnego tekstu.
fulltext_catalog_name
Katalog pełnotekstowy używany do indeksu pełnego tekstu. Katalog musi już istnieć w bazie danych. Ta klauzula jest opcjonalna. Jeśli nie jest to określone, używany jest domyślny katalog. Jeśli nie istnieje domyślny katalog, SQL Server zwraca błąd.
FILEGROUP_NAME FILEGROUP
Tworzy określony indeks pełnego tekstu na określonej grupie plików. Grupa plików musi już istnieć. Jeśli klauzula FILEGROUP nie jest określona, indeks pełnego tekstu umieszcza się w tej samej grupie plików co tabela bazowa lub widok dla tabeli niepartycjonowanej, albo w głównej grupie plików dla tabeli partycjonowanej.
CHANGE_TRACKING [ = ] { MANUAL | AUTO | WYŁĄCZONE [ , BRAK POPULACJI ] }
Określa, czy zmiany (aktualizacje, usuwanie lub wstawianie) w kolumnach tabeli objętych indeksem pełnego tekstu będą propagowane przez SQL Server do indeksu pełnego tekstu. Zmiany danych w WRITETEXT i UPDATETEXT nie są odzwierciedlane w indeksie pełnym tekstem i nie są wykrywane przez śledzenie zmian.
RĘCZNIE
Określa, że śledzone zmiany muszą być propagowane ręcznie poprzez wywołanie ALTER FULLTEXT INDEX ... ROZPOCZNIJ AKTUALIZACJĘ WYCIĄGU POPULACJI Transact-SQL (populacja manualna). Agent programu SQL Server umożliwia okresowe wywoływanie tej instrukcji Transact-SQL.
AUTO
Określa, że śledzone zmiany są propagowane automatycznie wraz z modyfikacją danych w tabeli bazowej (automatyczna populacja). Chociaż zmiany są propagowane automatycznie, mogą nie być one natychmiast odzwierciedlone w indeksie pełnym tekstem. AUTO to domyślne.
WYŁĄCZONE [ , BRAK POPULACJI ]
Określa, że SQL Server nie prowadzi listy zmian w danych indeksowanych. Gdy NIE OKREŚLONO POPULACJI, SQL Server wypełnia indeks w pełni po jego utworzeniu.
Opcja BRAK POPULACJI może być używana tylko wtedy, gdy CHANGE_TRACKING jest WYŁĄCZONA. Gdy NIE JEST określona POPULACJA, SQL Server nie wypełnia indeksu po jego utworzeniu. Indeks jest wypełniany dopiero po wykonaniu polecenia ALTER FULLTEXT INDEX z klauzulą START FULL POPULATION lub START INKREMENTAL POPULATION.
STOPLISTA [ = ] { OFF | SYSTEM | stoplist_name }
Przypisuje pełną listę stopów do indeksu. Indeks nie jest wypełniony żadnymi żetonami będącymi częścią określonej listy stopów. Jeśli STOPLIST nie jest określony, SQL Server przypisuje pełną tekstową stoplistę systemu do indeksu.
OFF
Określa, że żadna lista stopów nie jest powiązana z indeksem pełnego tekstu.
SYSTEM
Określa, że domyślny system pełnotekstowy STOPLIST powinien być używany dla tego indeksu pełnego tekstu.
stoplist_name
Określa nazwę listy stop, która ma być powiązana z indeksem pełnego tekstu.
WYSZUKAJ LISTĘ NIERUCHOMOŚCI [ = ] property_list_name
Dotyczy do: SQL Server (SQL Server 2012 (11.x) i nowszy)
Przypisuje listę nieruchomości wyszukiwania do indeksu.
OFF
Określa, że żadna lista właściwości nie jest powiązana z pełnym tekstem indeksu.
property_list_name
Określa nazwę listy właściwości wyszukiwania, aby była powiązana z indeksem pełnym tekstem.
Uwagi
W kolumnach XML możesz stworzyć indeks pełnotekstowy, który 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, zobacz Use Full-Text Search with XML Columns (Używanie wyszukiwania Full-Text z kolumnami XML).
Zalecamy, aby kolumna klucza indeksowego była typem danych całkowitoliczbowych. Zapewnia to optymalizacje w czasie wykonywania zapytań.
CREATE FULLTEXT INDEX nie może być umieszczony w transakcji użytkownika. To zdanie musi być przeprowadzone w osobnej, niejawnej transakcji.
Więcej informacji o indeksach pełnotekstowych można znaleźć w sekcji Utwórz i zarządzaj Full-Text indeksami.
Interakcje śledzenia zmian i BRAK PARAMETRU POPULACJI
To, czy indeks pełnego tekstu jest wypełniony, zależy od tego, czy monitorowanie zmian jest włączone oraz czy w instrukcji ALTER FULLTEXT INDEX jest określone WITH NO POPULATION. Poniższa tabela podsumowuje efekt ich interakcji.
| Change Tracking | BEZ LUDNOŚCI | Wynik |
|---|---|---|
| Nie włączone | Nieokreślona | Na indeksie przeprowadza się pełną populację. |
| Nie włączone | Określony | Żadna populacja indeksu nie występuje, dopóki nie pojawi się ALTER FULLTEXT INDEX... Wydane jest oświadczenie o populacji START. |
| Włączona | Określony | Pojawia się błąd, a indeks nie jest zmieniany. |
| Włączona | Nieokreślona | Na indeksie przeprowadza się pełną populację. |
Więcej informacji o wypełnianiu indeksów pełnotekstowych można znaleźć w sekcji Fillate Full-Text Indexes.
Permissions
Użytkownik musi mieć REFERENCES uprawnienia do katalogu pełnego tekstu oraz ALTER do widoku tabeli lub indeksu, albo być członkiem stałej sysadmin roli serwera, lub db_ownerdb_ddladmin , lub stałej bazy danych.
Jeśli SET STOPLIST jest to określone, użytkownik musi mieć uprawnienia REFERENCJI na wskazaną listę stopów. Właściciel STOPLISTY może udzielić tego zezwolenia.
Uwaga / Notatka
Publiczność otrzymuje pozwolenie ODNIESIENIA do domyślnej listy stopów dołączonej do SQL Server.
Przykłady
A. Stwórz unikalny indeks, katalog pełnotekstowy oraz indeks pełnotekstowy
Poniższy przykład tworzy unikalny indeks w kolumnie JobCandidateIDHumanResources.JobCandidate tabeli przykładowej bazy danych AdventureWorks2025. Przykład ten tworzy domyślny katalog pełnotekstowy, ft. Na koniec przykład tworzy pełnotekstowy indeks kolumny Resume , korzystając z katalogu ft i listy stopów systemu.
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 STOPLIST = SYSTEM;
GO
B. Stwórz indeks pełnotekstowy na kilku kolumnach tabeli
Poniższy przykład tworzy katalog pełnotekstowy production_catalogw przykładowej bazie danych AdventureWorks. W tym przykładzie zostanie utworzony indeks pełnotekstowy, który używa tego nowego wykazu. Indeks pełnego tekstu znajduje się na , ReviewerNameEmailAddress, oraz kolumnach Comments .Production.ProductReview Dla każdej kolumny przykład określa LCID języka angielskiego, 1033czyli języka danych w kolumnach. Ten pełnotekstowy indeks wykorzystuje istniejący unikalny indeks klucza, PK_ProductReview_ProductReviewID. Zgodnie z zaleceniami, ten klucz indeksowy znajduje się na kolumnie ProductReviewIDcałkowitej .
CREATE FULLTEXT CATALOG production_catalog;
GO
CREATE FULLTEXT INDEX ON Production.ProductReview (
ReviewerName LANGUAGE 1033,
EmailAddress LANGUAGE 1033,
Comments LANGUAGE 1033
) KEY INDEX PK_ProductReview_ProductReviewID ON production_catalog;
GO
C. Stwórz indeks pełen tekstu z listą właściwości wyszukiwania bez wypełniania jej
Poniższy przykład tworzy indeks pełnego tekstu na kolumnach Title, , oraz Document tabeli Production.DocumentDocumentSummary. Przykład określa LCID języka angielskiego, 1033czyli język danych w kolumnach. Ten pełnotekstowy indeks wykorzystuje domyślny katalog pełnotekstowy oraz istniejący unikalny indeks klucza, PK_Document_DocumentID. Zgodnie z zaleceniami, ten klucz indeksowy znajduje się na kolumnie DocumentIDcałkowitej .
Przykład określa listę stoplistu SYSTEM. Określa także listę właściwości wyszukiwania, ; dla przykładu, który tworzy tę listę, DocumentPropertyListzobacz CREATE SEARCH PROPERTY LIST (Transact-SQL).
Przykład określa, że śledzenie zmian jest wyłączone bez populacji. Później, w godzinach poza szczytem, przykład wykorzystuje wyrażenie ALTER FULLTEXT INDEX, aby rozpocząć pełną populację nowego indeksu i umożliwić automatyczne śledzenie zmian.
CREATE FULLTEXT INDEX ON Production.Document (
Title LANGUAGE 1033,
DocumentSummary LANGUAGE 1033,
Document TYPE COLUMN FileExtension LANGUAGE 1033
) KEY INDEX PK_Document_DocumentID
WITH STOPLIST = SYSTEM,
SEARCH PROPERTY LIST = DocumentPropertyList,
CHANGE_TRACKING OFF,
NO POPULATION;
GO
Później, w godzinach poza szczytem, indeks jest wypełniany.
ALTER FULLTEXT INDEX ON Production.Document SET CHANGE_TRACKING AUTO;
GO