Udostępnij za pomocą


UTWÓRZ PEŁNY INDEKS TEKSTU (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure 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

Zobacz także