Udostępnij za pośrednictwem


Włączanie semantycznego wyszukiwania w tabelach i kolumnach

Dotyczy:programu SQL Server

Opisuje sposób włączania lub wyłączania semantycznego indeksowania statystycznego dla wybranych kolumn zawierających dokumenty lub tekst.

Wyszukiwanie semantyczne statystyczne używa indeksów utworzonych przez usługę Full-Text Search i tworzy dodatkowe indeksy. W wyniku tej zależności od wyszukiwania pełnotekstowego tworzony jest nowy indeks semantyczny podczas definiowania nowego indeksu pełnotekstowego lub zmiany istniejącego indeksu pełnotekstowego. Nowy indeks semantyczny można utworzyć przy użyciu instrukcji Transact-SQL lub za pomocą Kreatora indeksowania Full-Text i innych okien dialogowych w programie SQL Server Management Studio, zgodnie z opisem w tym artykule.

Tworzenie indeksu semantycznego

Wymagania i ograniczenia dotyczące tworzenia indeksu semantycznego

  • Indeks można utworzyć na dowolnym obiekcie bazy danych, które są obsługiwane na potrzeby indeksowania pełnotekstowego, w tym tabel i widoków indeksowanych.

  • Przed włączeniem indeksowania semantycznego dla określonych kolumn muszą istnieć następujące wymagania wstępne:

    • Wykaz pełnotekstowy musi istnieć dla bazy danych.

    • Tabela musi mieć indeks pełnotekstowy.

    • Wybrane kolumny muszą uczestniczyć w indeksie pełnotekstowym.

    Możesz jednocześnie utworzyć i włączyć wszystkie te wymagania.

  • Indeks semantyczny można utworzyć w kolumnach, które mają dowolne typy danych obsługiwane na potrzeby indeksowania pełnotekstowego. Aby uzyskać więcej informacji, zobacz Tworzenie indeksów Full-Text i zarządzanie nimi.

  • Można określić dowolny typ dokumentu, który jest obsługiwany do indeksowania pełnotekstowego dla kolumn varbinary(max). Aby uzyskać więcej informacji, zobacz How To: Określanie typów dokumentów, które mogą być indeksowane w tym artykule.

  • Indeksowanie semantyczne tworzy dwa typy indeksów dla wybranych kolumn — indeks kluczowych fraz i indeks podobieństwa dokumentu. Nie można wybrać tylko jednego typu indeksu lub innego podczas włączania indeksowania semantycznego. Można jednak niezależnie wykonywać zapytania dotyczące tych dwóch indeksów. Aby uzyskać więcej informacji, zobacz Znajdź kluczowe frazy w dokumentach z wyszukiwaniem semantycznym oraz Znajdź podobne i powiązane dokumenty z wyszukiwaniem semantycznym.

  • Jeśli nie określisz jawnie identyfikatora LCID dla indeksu semantycznego, tylko język podstawowy i skojarzone z nim statystyki językowe są używane do indeksowania semantycznego.

  • Jeśli określisz język dla kolumny, dla której model językowy nie jest dostępny, tworzenie indeksu zakończy się niepowodzeniem i zwróci komunikat o błędzie.

Tworzenie indeksu semantycznego, gdy nie ma indeksu pełnotekstowego

Podczas tworzenia nowego indeksu pełnotekstowego za pomocą instrukcji CREATE FULLTEXT INDEX można włączyć indeksowanie semantyczne na poziomie kolumny, określając słowo kluczowe STATISTICAL_SEMANTICS w ramach definicji kolumny. Indeksowanie semantyczne można również włączyć, używając Kreatora indeksowania Full-Text, aby utworzyć nowy indeks pełnotekstowy.

Tworzenie nowego indeksu semantycznego przy użyciu Transact-SQL

Wywołaj instrukcję CREATE FULLTEXT INDEX i określ STATISTICAL_SEMANTICS dla każdej kolumny, na której chcesz utworzyć indeks semantyczny. Aby uzyskać więcej informacji na temat wszystkich opcji tego polecenia, zobacz CREATE FULLTEXT INDEX (Transact-SQL).

Przykład 1. Tworzenie unikatowego indeksu, indeksu pełnotekstowego i indeksu semantycznego

Poniższy przykład tworzy domyślny katalog pełnotekstowy, ft. Następnie przykład tworzy unikatowy indeks w kolumnie JobCandidateID tabeli HumanResources.JobCandidate przykładowej bazy danych AdventureWorks2022. Ten unikatowy indeks jest wymagany jako kolumna klucza indeksu pełnotekstowego. W tym przykładzie tworzony jest indeks pełnotekstowy i indeks semantyczny w kolumnie Resume.

CREATE FULLTEXT CATALOG ft AS DEFAULT
GO

CREATE UNIQUE INDEX ui_ukJobCand
    ON HumanResources.JobCandidate(JobCandidateID)
GO

CREATE FULLTEXT INDEX ON HumanResources.JobCandidate
    (Resume
        Language 1033
        Statistical_Semantics
    )
    KEY INDEX JobCandidateID
    WITH STOPLIST = SYSTEM
GO

Przykład 2: Tworzenie indeksu pełnotekstowego i semantycznego na kilku kolumnach z opóźnionym zapełnianiem indeksu

Poniższy przykład tworzy katalog pełnotekstowy documents_catalogw przykładowej bazie danych AdventureWorks2022. W tym przykładzie zostanie utworzony indeks pełnotekstowy, który używa tego nowego wykazu. Indeks pełnotekstowy jest tworzony w kolumnach Title, DocumentSummaryi Document tabeli Production.Document, podczas gdy indeks semantyczny jest tworzony tylko w kolumnie Document. Ten indeks pełnotekstowy używa nowo utworzonego wykazu pełnotekstowego i istniejącego unikatowego indeksu kluczy, PK_Document_DocumentID. Zgodnie z zaleceniami ten klucz indeksu jest tworzony w kolumnie liczby całkowitej DocumentID. W przykładzie określono identyfikator LCID dla języka angielskiego 1033, czyli język danych w kolumnach.

W tym przykładzie określono również, że śledzenie zmian jest wyłączone bez populacji. Później, poza godzinami szczytu, w przykładzie użyto instrukcji ALTER FULLTEXT INDEX, aby rozpocząć pełną populację w nowym indeksie i włączyć automatyczne śledzenie zmian.

CREATE FULLTEXT CATALOG documents_catalog
GO

CREATE FULLTEXT INDEX ON Production.Document
    (
    Title
        Language 1033,
    DocumentSummary
        Language 1033,
    Document
        TYPE COLUMN FileExtension
        Language 1033
        Statistical_Semantics
    )
    KEY INDEX PK_Document_DocumentID
        ON documents_catalog
        WITH 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

Tworzenie nowego indeksu semantycznego przy użyciu programu SQL Server Management Studio

Uruchom Kreatora indeksowania Full-Text i włącz statystyczną semantykę na stronie Select Table Columns dla każdej kolumny, dla której chcesz utworzyć indeks semantyczny. Aby uzyskać więcej informacji, w tym na temat uruchamiania Kreatora indeksowania Full-Text, zobacz Użyj Kreatora indeksowania Full-Text.

Tworzenie indeksu semantycznego w przypadku istniejącego indeksu pełnotekstowego

Indeksowanie semantyczne można dodać podczas zmiany istniejącego indeksu pełnotekstowego za pomocą instrukcji ALTER FULLTEXT INDEX. Indeksowanie semantyczne można również dodać przy użyciu różnych okien dialogowych w programie SQL Server Management Studio.

Dodawanie indeksu semantycznego przy użyciu Transact-SQL

Wywołaj instrukcję ALTER FULLTEXT INDEX z opcjami opisanymi w poniższej sekcji dla każdej kolumny, na której chcesz dodać indeks semantyczny. Aby uzyskać więcej informacji na temat wszystkich opcji tej instrukcji, zapoznaj się z ALTER FULLTEXT INDEX (Transact-SQL).

Zarówno indeksy pełnotekstowe, jak i semantyczne są ponownie wypełniane po wywołaniu ALTER, chyba że określono inaczej.

  • Aby dodać indeksowanie pełnotekstowe tylko do kolumny, użyj składni ADD.

  • Aby dodać indeksowanie pełnotekstowe i semantyczne do kolumny, użyj składni ADD z opcją STATISTICAL_SEMANTICS.

  • Aby dodać indeksowanie semantyczne do kolumny, która jest już włączona na potrzeby indeksowania pełnotekstowego, użyj opcji ADD STATISTICAL_SEMANTICS. Indeksowanie semantyczne można dodać tylko do jednej kolumny w jednej instrukcji ALTER.

Przykład: Dodawanie indeksowania semantycznego do kolumny, która ma już indeksowanie pełnotekstowe

Poniższy przykład zmienia istniejący indeks pełnotekstowy w tabeli Production.Document w przykładowej bazie danych AdventureWorks2022. W przykładzie dodano indeks semantyczny w kolumnie Document tabeli Production.Document, która ma już indeks pełnotekstowy. W przykładzie określono, że indeks nie jest wypełniany automatycznie.

ALTER FULLTEXT INDEX ON Production.Document
    ALTER COLUMN Document
        ADD Statistical_Semantics
    WITH NO POPULATION
GO

Dodawanie indeksu semantycznego przy użyciu programu SQL Server Management Studio

Możesz zmienić kolumny, które są włączone do indeksowania semantycznego i pełnotekstowego, na stronie Full-Text Indeks Kolumn w oknie dialogowym Właściwości Indeksu Full-Text. Aby uzyskać więcej informacji, zobacz Manage Full-Text Indexes.

Zmienianie indeksu semantycznego

Wymagania i ograniczenia dotyczące zmiany istniejącego indeksu

  • Nie można zmienić istniejącego indeksu, gdy populacja indeksu jest w toku. Aby uzyskać więcej informacji na temat monitorowania postępu populacji indeksów, zobacz Manage and Monitor Semantic Search.

  • Nie można dodać indeksowania do kolumny i zmienić lub upuść indeksowania dla tej samej kolumny w jednym wywołaniu instrukcji ALTER FULLTEXT INDEX.

Usuwanie indeksu semantycznego

Indeksowanie semantyczne można usunąć, zmieniając istniejący indeks pełnotekstowy za pomocą instrukcji ALTER FULLTEXT INDEX. Indeksowanie semantyczne można również usunąć przy użyciu różnych okien dialogowych w programie SQL Server Management Studio.

Usuwanie indeksu semantycznego przy użyciu Transact-SQL

Aby usunąć indeksowanie semantyczne tylko z kolumny lub kolumn, wywołaj instrukcję ALTER FULLTEXT INDEX z opcją ALTER COLUMN <column_name> DROP STATISTICAL_SEMANTICS. Indeksowanie można usunąć z wielu kolumn w jednej instrukcji ALTER.

USE database_name;
GO

ALTER FULLTEXT INDEX
    ALTER COLUMN column_name
    DROP STATISTICAL_SEMANTICS;
GO

Aby usunąć indeksowanie pełnotekstowe i semantyczne z kolumny, wywołaj instrukcję ALTER FULLTEXT INDEX z opcją ALTER COLUMN <column_name> DROP.

USE database_name;
GO

ALTER FULLTEXT INDEX
    ALTER COLUMN column_name
    DROP;
GO

Usuwanie indeksu semantycznego za pomocą programu SQL Server Management Studio

Możesz zmienić kolumny, które są włączone do indeksowania semantycznego i pełnotekstowego na stronie kolumn indeksuFull-Text okna dialogowego właściwości indeksu Full-Text. Aby uzyskać więcej informacji, zobacz Manage Full-Text Indexes.

Wymagania i ograniczenia dotyczące usuwania indeksu semantycznego

  • Nie można usunąć indeksowania pełnotekstowego z kolumny przy zachowaniu indeksowania semantycznego. Indeksowanie semantyczne zależy od indeksowania pełnotekstowego dla wyników podobieństwa dokumentów.

  • Nie można określić opcji NO POPULATION podczas porzucania indeksowania semantycznego z ostatniej kolumny w tabeli, dla której włączono indeksowanie semantyczne. Aby usunąć wyniki, które były wcześniej zindeksowane, wymagany jest cykl populacji.

Sprawdzanie, czy wyszukiwanie semantyczne jest włączone w obiektach bazy danych

Czy wyszukiwanie semantyczne jest włączone dla bazy danych?

Wykonaj zapytanie dotyczące właściwości IsFullTextEnabled w funkcji metadanych DATABASEPROPERTYEX (Transact-SQL).

Wartość zwracana 1 wskazuje, że dla bazy danych włączono wyszukiwanie pełnotekstowe i wyszukiwanie semantyczne. Wartość zwracana 0 wskazuje, że nie są aktywne.

SELECT DATABASEPROPERTYEX('database_name', 'IsFullTextEnabled');
GO

Czy wyszukiwanie semantyczne jest włączone dla tabeli?

Zadaj zapytanie o właściwość TableFullTextSemanticExtraction w funkcji metadanych OBJECTPROPERTYEX (Transact-SQL).

Wartość zwracana 1 wskazuje, że wyszukiwanie semantyczne jest włączone dla tabeli; wartość zwracana 0 wskazuje, że nie jest włączona.

SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFullTextSemanticExtraction')
GO

Czy wyszukiwanie semantyczne jest włączone dla kolumny?

Aby określić, czy wyszukiwanie semantyczne jest włączone dla określonej kolumny:

  • Wykonaj zapytanie o właściwość StatisticalSemanticsCOLUMNPROPERTY (Transact-SQL) funkcji metadanych.

    Wartość zwracana 1 wskazuje, że wyszukiwanie semantyczne jest włączone dla kolumny; wartość zwracana 0 wskazuje, że nie jest włączona.

    SELECT COLUMNPROPERTY(OBJECT_ID('table_name'), 'column_name', 'StatisticalSemantics');
    GO
    
  • Wykonaj zapytanie dotyczące widoku wykazu sys.fulltext_index_columns (Transact-SQL) dla indeksu pełnotekstowego.

    Wartość 1 w kolumnie statistical_semantics wskazuje, że określona kolumna jest włączona do indeksowania semantycznego oprócz indeksowania pełnotekstowego.

    SELECT * FROM sys.fulltext_index_columns
    WHERE object_id = OBJECT_ID('table_name');
    GO
    
  • W Eksploratorze obiektów w programie Management Studio kliknij prawym przyciskiem myszy kolumnę i wybierz pozycję właściwości . Na stronie Ogólne okna dialogowego Właściwości kolumny, sprawdź wartość właściwości Semantyka statystyczna.

    Wartość True wskazuje, że określona kolumna jest włączona na potrzeby indeksowania semantycznego oprócz indeksowania pełnotekstowego.

Sprawdzanie, które języki są obsługiwane w przypadku wyszukiwania semantycznego

W przypadku indeksowania semantycznego obsługiwanych jest mniej języków niż w przypadku indeksowania pełnotekstowego. W związku z tym mogą istnieć kolumny, które można indeksować na potrzeby wyszukiwania pełnotekstowego, ale nie do wyszukiwania semantycznego.

Wykonaj zapytanie dotyczące widoku katalogu sys.fulltext_semantic_languages (Transact-SQL).

SELECT * FROM sys.fulltext_semantic_languages;
GO

Następujące języki są obsługiwane w przypadku indeksowania semantycznego. Ta lista reprezentuje dane wyjściowe widoku wykazu sys.fulltext_semantic_languages (Transact-SQL)uporządkowane według identyfikatora LCID.

Język Identyfikator lokalizacji LCID
Chiński tradycyjny 1028
Niemiecki 1031
Angielski (USA) 1033
Francuski 1036
Włoski 1040
Brazylijski 1046
Rosyjski 1049
Szwedzki 1053
Chiński uproszczony 2052
Brytyjski angielski 2057
Portugalski 2070
Chiński (Hongkong, SAR, CHRL) 2070
Hiszpański 3082
Chiński (Singapur) 4100
Chiński (Makao SAR) 5124

Notatka

Jeśli wyniki są puste, musisz pobrać i zainstalować bazę danych Semantic Language Statistics. Aby uzyskać więcej informacji, zobacz Instalowanie, dołączanie i rejestrowanie bazy danych statystyk języka semantycznego.

Określanie typów dokumentów, które mogą być indeksowane

Wykonaj zapytanie względem widoku wykazu sys.fulltext_document_types (Transact-SQL).

Jeśli typ dokumentu, który chcesz indeksować, nie znajduje się na liście obsługiwanych typów, może być konieczne zlokalizowanie, pobranie i zainstalowanie dodatkowych filtrów. Aby uzyskać więcej informacji, zobacz Wyświetl lub zmień zarejestrowane filtry i narzędzia do dzielenia wyrazów.

Najlepsze rozwiązanie: tworzenie oddzielnej grupy plików dla indeksów pełnotekstowych i semantycznych

Rozważ utworzenie oddzielnej grupy plików dla indeksów pełnotekstowych i semantycznych, jeśli alokacja miejsca na dysku jest problemem. Indeksy semantyczne są tworzone w tej samej grupie plików co indeks pełnotekstowy. W pełni wypełniony indeks semantyczny może zawierać dużą ilość danych.

Problem: Wyszukiwanie w określonej kolumnie nie zwraca żadnych wyników

Czy dla języka Unicode określono identyfikator LCID nie-Unicode?

Istnieje możliwość włączenia indeksowania semantycznego dla typu kolumny innej niż Unicode z identyfikatorem LCID dla języka, który zawiera tylko wyrazy Unicode, takie jak LCID 1049 dla języka rosyjskiego. W takim przypadku żadne wyniki nie są nigdy zwracane z indeksów semantycznych w tej kolumnie.