Udostępnij za pośrednictwem


Konfigurowanie plików Thesaurus i zarządzanie nimi na potrzeby wyszukiwania Full-Text

Dotyczy:programu SQL Server

Zapytania sql Server Full-Text Search mogą wyszukiwać synonimy terminów określonych przez użytkownika za pomocą Full-Text Search tezaurusa. Każdy tezaurus definiuje zestaw synonimów dla określonego języka. Opracowując tezaurusa dostosowane do danych pełnotekstowych, można skutecznie rozszerzyć zakres pełnotekstowych zapytań dotyczących tych danych.

Dopasowanie tezaurusa występuje dla wszystkich zapytań FREETEXT i FREETEXTABLE oraz dla wszystkich zapytań CONTAINS i CONTAINSTABLE, które określają klauzulę FORMSOF THESAURUS.

Full-Text Search thesaurus jest plikiem tekstowym XML.

Co znajduje się w tezaurusie

Zanim zapytania wyszukiwania pełnotekstowego mogą wyszukiwać synonimy w danym języku, należy zdefiniować mapowania tezaurusa (czyli synonimy) dla tego języka. Każdy tezaurus musi być skonfigurowany ręcznie, aby zdefiniować następujące elementy:

  • Zestaw rozszerzeń

    Zestaw rozszerzeń zawiera grupę synonimów, takich jak "writer", "author" i "dziennikarz", które mogą być zamieniane między sobą za pomocą zapytania pełnotekstowego. Zapytania zawierające dopasowanie dla dowolnego synonimu w zestawie rozszerzeń są rozszerzane tak, aby zawierały każdy inny synonim w zestawie rozszerzeń.

    Aby uzyskać więcej informacji, zapoznaj się z strukturą XML zestawu rozszerzeń w dalszej części tego tematu.

  • Zestaw zastępczy

    Zestaw zastępczy zawiera wzorzec tekstu, który ma zostać zastąpiony przez zestaw zamienników. Aby zapoznać się z przykładem, zobacz sekcję struktura XML zestawu zastępczego w dalszej części tego tematu.

  • Ustawienie znaków diakrytycznych

    W przypadku danego tezaurusa wszystkie wzorce wyszukiwania są wrażliwe lub niewrażliwe na znaki diakrytyczne, takie jak tylda (~), ostry akcent (´) lub umlaut (¨) (czyli wrażliwy na akcent lub niewrażliwy na akcent). Załóżmy na przykład, że określisz wzorzec "café", który ma zostać zastąpiony przez inne wzorce w zapytaniu pełnotekstowym. Jeśli tezaurus jest niewrażliwy na akcent, wyszukiwanie pełnotekstowe zastępuje wzorce "café" i "cafe". Jeśli tezaurus jest wrażliwy na akcent, wyszukiwanie pełnotekstowe zastępuje tylko wzorzec "café". Domyślnie tezaurus jest niewrażliwy na akcent.

Domyślne pliki tezaurusa

Program SQL Server udostępnia zestaw plików tezaurusa XML, po jednym dla każdego obsługiwanego języka. Te pliki są zasadniczo puste. Zawierają one tylko strukturę XML najwyższego poziomu, która jest wspólna dla wszystkich tezaurów programu SQL Server i skomentowany przykład tezaurusa.

Lokalizacja plików tezaurusa

Domyślna lokalizacja plików tezaurusa to:

<SQL_Server_data_files_path>\MSSQL13.MSSQLSERVER\MSSQL\FTDATA\

Ta domyślna lokalizacja zawiera następujące pliki:

  • pliki tezaurusa specyficzne dla języka

    Instalator instaluje puste pliki tezaurusa w powyższej lokalizacji. Dla każdego obsługiwanego języka jest udostępniany oddzielny plik. Administrator systemu może dostosować te pliki.

    Domyślne nazwy plików tezaurusa mają następujący format:

    'ts' + <three-letter language-abbreviation> + '.xml'

    Nazwa pliku tezaurusa dla danego języka jest określona w rejestrze w następującej wartości:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<instance-name>\MSSearch\<language-abbrev>

  • Plik globalnej tezaurusa

    Pusty globalny plik tezaurusa tsGlobal.xml.

Zmienianie lokalizacji pliku tezaurusa

Lokalizację i nazwy pliku tezaurusa można zmienić, zmieniając jego klucz rejestru. Dla każdego języka lokalizacja pliku tezaurusa jest określona w następującej wartości w rejestrze:

HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance name>\MSSearch\Language\<language-abbreviation>\TsaurusFile

Globalny plik tezaurusa odpowiada językowi Neutral z identyfikatorem LCID 0. Tę wartość można zmienić tylko przez administratorów.

Jak zapytania pełnotekstowe używają tezaurusa

Zapytanie tezaurusa używa zarówno tezaurusa specyficznego dla języka, jak i globalnego tezaurusa.

  1. Najpierw zapytanie wyszukuje plik specyficzny dla języka i ładuje go do przetwarzania (chyba że został już załadowany). Zapytanie jest rozszerzane w celu uwzględnienia synonimów specyficznych dla języka określonych przez zestaw rozszerzeń i reguł zestawu zastępczego w pliku thesaurus.
  2. Te kroki są następnie powtarzane dla globalnego tezaurusa. Jeśli jednak termin jest już częścią dopasowania w pliku tezaurusa specyficznego dla języka, termin nie kwalifikuje się do dopasowania w globalnym tezaurusie.

Struktura pliku tezaurusa

Każdy plik tezaurusa definiuje kontener XML, którego identyfikator jest Microsoft Search Thesaurusi komentarz, <!-- ... -->, który zawiera przykładowy tezaurusa. Tezaurus jest definiowany w elemencie <thesaurus> zawierającym próbki elementów podrzędnych definiujących ustawienia znaków diakrytycznych, zestawy rozszerzeń i zestawy zastępcze.

Typowy pusty plik tezaurusa zawiera następujący tekst XML:

<XML ID="Microsoft Search Thesaurus">  
  
<!--  Commented out  
  
    <thesaurus xmlns="x-schema:tsSchema.xml">  
<diacritics_sensitive>0</diacritics_sensitive>  
        <expansion>  
            <sub>Internet Explorer</sub>  
            <sub>IE</sub>  
            <sub>IE5</sub>  
        </expansion>  
        <replacement>  
            <pat>NT5</pat>  
            <pat>W2K</pat>  
            <sub>Windows 2012</sub>  
        </replacement>  
        <expansion>  
            <sub>run</sub>  
            <sub>jog</sub>  
        </expansion>  
    </thesaurus>  
-->  
</XML>  

Struktura XML zestawu rozszerzeń

Każdy zestaw rozszerzeń jest ujęty w element <expansion>. W tym elemencie należy określić jeden lub więcej zamienników w elemencie <sub>. W zestawie rozszerzeń można określić grupę zamienników, które są synonimami siebie nawzajem.

Na przykład możesz edytować sekcję rozwinięcia, aby traktować zamienniki "writer", "author" i "dziennikarz" jako synonimy. Kwerendy wyszukiwania pełnotekstowego, które zawierają dopasowania w jednym z podstawień, są rozszerzane w celu uwzględnienia wszystkich innych podstawień określonych w zestawie zastąpień. W związku z tym w poprzednim przykładzie, w przypadku wydawania formularzy THESAURUS lub zapytania FREETEXT dla słowa "author", wyszukiwanie pełnotekstowe zwraca również wyniki wyszukiwania zawierające słowa "writer" i "dziennikarz".

Tak wygląda sekcja zestawu rozszerzeń dla powyższego przykładu:

<expansion>  
        <sub>writer</sub>  
        <sub>author</sub>  
        <sub>journalist</sub>  
</expansion>  

Struktura XML zestawu zastępczego

Każdy zestaw zastępczy jest ujęty w elemencie <replacement>. W tym elemencie można określić co najmniej jeden wzorzec w elemencie <pat> i zero lub więcej podstawień w elementach <sub>, jeden na synonim. Można określić wzorzec, który ma zostać zastąpiony przez zestaw zamienników. Wzorce i podstawianie mogą zawierać wyraz lub sekwencję wyrazów. Jeśli nie określono podstawienia dla wzorca, powoduje to usunięcie wzorca z zapytania użytkownika.

Załóżmy na przykład, że chcesz, aby zapytania dla "Win8" jako wzorca zostały zastąpione przez "Windows Server 2012" lub "Windows 8.0" jako zamienników. Jeśli uruchamiasz zapytanie pełnotekstowe dla "Win8", wyszukiwanie pełnotekstowe zwraca tylko wyniki wyszukiwania zawierające ciąg "Windows Server 2012" lub "Windows 8.0". Nie zwraca wyników zawierających "Win8". Dzieje się tak, ponieważ wzorzec "Win8" został zastąpiony przez wzorce "Windows Server 2012" i "Windows 8.0".

Oto jak wygląda sekcja zestawu zastępczego dla powyższego przykładu:

<replacement>  
        <pat>Win8</pat>  
        <sub>Windows Server 2012</sub>  
        <sub>Windows 8.0</sub>  
</replacement>  

Jeśli masz dwa zestawy zastępcze ze zgodnymi podobnymi wzorcami, dłuższy z tych dwóch ma pierwszeństwo. Jeśli na przykład wykonasz zapytanie FORMS OF THESAURUS dla "społeczności online Internet Explorer" i masz następujące zestawy zamienników, zestaw zamienników "Internet Explorer" ma pierwszeństwo przed zestawem zamienników "Internet". W związku z tym zapytanie będzie przetwarzane jako "społeczność online IE" lub "Społeczność online programu IE 9".

<replacement>  
         <pat>Internet</pat>  
         <sub>intranet</sub>  
</replacement>  

i

<replacement>  
         <pat>Internet Explorer</pat>  
         <sub>IE</sub>  
         <sub>IE 9</sub>  
</replacement>  

Struktura XML ustawienia znaków diakrytycznych

Ustawienie znaków diakrytycznych tezaurusa jest określone w jednym elemencie <diacritics_sensitive>. Ten element zawiera wartość całkowitą, która kontroluje czułość akcentu w następujący sposób:

Ustawienie znaków diakrytycznych Wartość XML
Niewrażliwy na akcent 0 <diacritics_sensitive>0</diacritics_sensitive>
Uwzględnianie akcentu 1 <diacritics_sensitive>1</diacritics_sensitive>

Notatka

To ustawienie można zastosować tylko raz w pliku i dotyczy wszystkich wzorców wyszukiwania w pliku. Nie można określić tego ustawienia dla poszczególnych wzorców.

Edytowanie pliku tezaurusa

Można skonfigurować tezaurusa dla danego języka, edytując jego plik tezaurusa (plik XML). Podczas instalacji puste pliki tezaurusa, zawierające tylko kontener <xml> i zakomentowany przykładowy element <thesaurus>, są instalowane. Aby zapytania wyszukiwania pełnotekstowego szukały synonimów, aby działały prawidłowo, należy utworzyć rzeczywisty element <thesaurus> definiujący zestaw synonimów. Można zdefiniować dwie formy synonimów, zestawów rozszerzeń i zestawów zastępczych.

Edytowanie pliku tezaurusa

  1. Otwórz plik tezaurusa w Notatniku lub innym edytorze tekstów.

  2. Jeśli edytujesz plik tezaurusa po raz pierwszy, usuń następujące wiersze komentarza na początku i na końcu pliku, odpowiednio:

    <!--Commented out  
    -->  
    
  3. Dodawanie, modyfikowanie lub usuwanie zestawu zastępczego lub zestawu rozszerzeń.

  4. Zapisz plik i zamknij Notatnik.

  5. Użyj sp_fulltext_load_thesaurus_file, aby załadować zawartość pliku tezaurusa do bazy danych tempdb, określając identyfikator lokalny (LCID), który odpowiada językowi pliku tezaurusa. Na przykład w przypadku angielskiego pliku tezaurusa tsenu.xmlodpowiedni identyfikator LCID to 1033.

    USE AdventureWorks;  
    EXEC sys.sp_fulltext_load_thesaurus_file 1033;  
    GO
    

Zalecenia dotyczące edytowania plików tezaurusa

Zalecamy, aby wpisy w pliku tezaurusa nie zawierały znaków specjalnych. Dzieje się tak, ponieważ mechanizmy dzielenia wyrazów mają subtelne zachowania w odniesieniu do znaków specjalnych. Jeśli wpis tezaurusa zawiera znaki specjalne, podziały wyrazów używane w połączeniu z tym wpisem mogą mieć subtelne konsekwencje behawioralne dla zapytania pełnotekstowego.

Zalecamy, aby wpisy <sub> nie zawierały wyrazów stopowych, ponieważ wyrazy stopowe są pomijane w indeksie pełnotekstowym. Zapytania są rozszerzane w celu uwzględnienia wpisów <sub> z pliku tezaurusa, a jeśli wpis <sub> zawiera stopwords, rozmiar zapytania niepotrzebnie się zwiększa.

Ograniczenia edytowania plików tezaurusa

Następujące ograniczenia dotyczą edytowania pliku tezaurusa:

  • Tylko administratorzy systemu mogą aktualizować, modyfikować lub usuwać pliki tezaurusa.

  • Podczas edytowania plików tezaurusa przy użyciu narzędzi edytora tekstu pliki muszą być zapisywane w formacie Unicode, a znaczniki kolejności bajtów muszą być określone.

  • Wpisy tezaurusa nie mogą być puste ani dzielić się na pusty ciąg.

  • Frazy w pliku tezaurusa nie mogą być dłuższe niż 512 znaków.

  • W tezaurusie nie mogą znajdować się żadne zduplikowane wpisy wśród <sub> wpisów zestawów rozszerzeń i <pat> elementów zestawów zastępczych.

Zobacz też

CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
sp_fulltext_load_thesaurus_file (Transact-SQL)
sys.dm_fts_parser (Transact-SQL)