Konfigurace a správa souborů tesaurus pro vyhledávání Full-Text

platí pro:SQL Server

SQL Server Full-Text Vyhledávací dotazy mohou hledat synonyma uživatelem zadaných termínů pomocí Full-Text vyhledávání tezaurus. Každý tesaurus definuje sadu synonym pro určitý jazyk. Díky vývoji tesauru přizpůsobeného fulltextovým datům můžete efektivně rozšířit rozsah fulltextových dotazů na tato data.

Porovnávání tezauru probíhá pro všechny dotazy FREETEXT a FREETEXTTABLE a pro jakékoliv dotazy CONTAINS a CONTAINSTABLE, které specifikují klauzuli FORMSOF THESAURUS.

Full-Text Hledat tesaurus je textový soubor XML.

Co je v teauru

Než můžou fulltextové vyhledávací dotazy hledat synonyma v daném jazyce, musíte pro daný jazyk definovat mapování tesaurus (tj. synonyma). Každý tesaurus musí být ručně nakonfigurovaný tak, aby definoval následující nastavení:

  • Rozšiřující sada

    Rozšiřující sada obsahuje skupinu synonym, jako je "spisovatel," "autor" a "novinář," které jsou zaměnitelné při použití fulltextového vyhledávání. Dotazy, které obsahují shodu pro všechna synonyma v rozšiřující sadě, se rozbalí tak, aby zahrnovaly všechna ostatní synonyma v rozšiřující sadě.

    Další informace naleznete v tématu XML struktura rozšiřující sady dále v tomto článku.

  • Náhradní sada

    Náhradní sada obsahuje textový vzor, který se má nahradit sadou nahrazení. Příklad najdete v části STRUKTURA XML náhradní sady dále v tomto článku.

  • Nastavení diakritiky

    U daného tezauru jsou všechny vzory hledání buď citlivé na diakritiku nebo na ni nerozlišují, včetně znaků jako tilda (~), přízvuková čárka (´) nebo přehláska (¨) (to znamená, diakriticky citlivé nebo diakriticky nerozlišující). Předpokládejme například, že v fulltextovém dotazu zadáte vzor "kavárna", který se nahradí jinými vzory. Pokud je tezaurus nerozlišující, fulltextové vyhledávání nahradí vzory "café" a "cafe". Pokud je tesaurus citlivý na zvýraznění, fulltextové vyhledávání nahradí pouze vzor "kavárna". Ve výchozím nastavení je tezaurus necitlivý na diakritiku.

Výchozí soubory tesaurus

SQL Server poskytuje sadu souborů XML tesaurus, jeden pro každý podporovaný jazyk. Tyto soubory jsou v podstatě prázdné. Obsahují pouze strukturu XML nejvyšší úrovně, která je společná pro všechny tezaury SQL Serveru a příklad okomentovaného tezauru.

Umístění souborů tesaurus

Výchozí umístění souborů tesaurus je:

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

Toto výchozí umístění obsahuje následující soubory:

  • soubory tesaurus specifické pro jazyk

    Instalační program nainstaluje soubory prázdného tezauru v původním umístění. Pro každý podporovaný jazyk je k dispozici samostatný soubor. Správce systému může tyto soubory přizpůsobit.

    Výchozí názvy souborů tesaurus používají následující formát:

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

    Název souboru tesaurus pro daný jazyk je zadán v registru v následující hodnotě:

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

  • Soubor globálního tezauru

    Soubor globálního tezauru je prázdný, tsGlobal.xml.

Změna umístění souboru tesaurus

Umístění a názvy souboru tesaurus můžete změnit změnou jeho klíče registru. Pro každý jazyk je umístění souboru tesaurus zadáno v následující hodnotě v registru:

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

Globální soubor tezauru odpovídá neutrálnímu jazyku s LCID 0. Tuto hodnotu můžou změnit jenom správci.

Jak fulltextové dotazy používají tesaurus

Dotaz tesaurus používá jazykově specifický tesaurus i globální tesaurus.

  1. Nejprve dotaz vyhledá soubor specifický pro jazyk a načte ho ke zpracování (pokud ještě není načtený). Dotaz se rozšíří tak, aby zahrnoval synonyma specifická pro jazyk určená sadou rozšiřování a pravidly nahrazovací sady v souboru tezaurus.

  2. Tyto kroky se pak opakují pro globální tesaurus. Pokud je však termín již součástí shody v souboru tesauru specifického pro jazyk, není termín způsobilý pro porovnávání v globálním tesauru.

Struktura souboru tesaurus

Každý soubor tesaurus definuje kontejner XML, jehož ID je Microsoft Search Thesaurus, a komentář, <!-- ... -->, který obsahuje ukázkový tesaurus. Tesaurus je definován v <thesaurus> elementu, který obsahuje vzorky podřízených prvků, které definují nastavení diakritiky, rozšiřující sady a náhradní sady.

Typický prázdný soubor tesaurus obsahuje následující text 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 expanzní sady

Každá rozšiřující sada je uzavřena v <expansion> elementu. V tomto prvku zadáte jednu nebo více náhrad v <sub> elementu. V rozšiřující sadě můžete určit skupinu nahrazení, která jsou synonymy sebe navzájem.

Oddíl rozšíření můžete například upravit tak, aby se se slovy "writer", "author" a "novinář" zacházelo jako se synonymy. Dotazy fulltextového vyhledávání, které obsahují shody v jedné náhradě, se rozbalí tak, aby zahrnovaly všechny ostatní náhrady zadané v sadě rozšíření. Ve výše uvedeném příkladu, když zadáte dotaz FORMS OF THESAURUS nebo FREETEXT na slovo "author", fulltextové vyhledávání také vrátí výsledky obsahující slova "writer" a "novinář".

Sekce rozšiřující sestavy vypadá takto v předchozím příkladu:

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

Struktura XML náhradní sady

Každá náhradní sada je uzavřena v prvku <replacement>. V rámci tohoto prvku můžete zadat jeden nebo více vzorů v elementu <pat> a nula nebo více nahrazení v <sub> prvcích, jeden na synonymum. Můžete zadat vzor, který se má nahradit náhradou. Vzory a náhrady můžou obsahovat slovo nebo posloupnost slov. Pokud pro vzor není zadána žádná náhrada, má vliv na odebrání vzoru z uživatelského dotazu.

Předpokládejme například, že chcete, aby se dotazy na "Win8" nahradily nahrazením "Windows Server 2012" nebo "Windows 8.0". Pokud spustíte fulltextový dotaz pro Win8, fulltextové vyhledávání vrátí jenom výsledky hledání obsahující Windows Server 2012 nebo Windows 8.0. Nevrací výsledky obsahující "Win8". Důvodem je, že vzor "Win8" je "nahrazen" vzory "Windows Server 2012" a "Windows 8.0".

V předchozím příkladu by část náhradní sady vypadala takto:

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

Pokud máte dvě náhradní sady s podobnými vzory, bude mít přednost delší z těchto dvou sad. Pokud například spustíte dotaz ve funkci FORMS OF THESAURUS pro „online komunitu Internet Explorer“ a máte následující sady náhrad, sada náhrad „Internet Explorer“ bude mít přednost před sadou náhrad „Internet“. Dotaz se proto zpracuje jako online komunita IE nebo online komunita IE 9.

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

a

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

Struktura XML nastavení diakritiky

Diakritické nastavení tesauru je určeno v jednom <diacritics_sensitive> prvku. Tento prvek obsahuje celočíselnou hodnotu, která řídí citlivost zvýraznění následujícím způsobem:

Nastavení diakritiky Hodnota jazyk XML
Nerozlišující přízvuk 0 <diacritics_sensitive>0</diacritics_sensitive>
Citlivá na přízvuk 1 <diacritics_sensitive>1</diacritics_sensitive>

Poznámka

Toto nastavení se dá použít jenom jednou v souboru a platí pro všechny vzory hledání v souboru. Toto nastavení nelze zadat pro jednotlivé vzory.

Úprava tesauru

Tesaurus pro daný jazyk můžete nakonfigurovat úpravou souboru tesaurus (soubor XML). Během instalace se nainstalují prázdné soubory tesaurus, které obsahují pouze kontejner <xml> a ukázkový <thesaurus> s komentáři. Aby plně textové vyhledávací dotazy, které hledají synonyma, fungovaly správně, musíte vytvořit skutečný prvek <thesaurus>, který definuje sadu synonym. Můžete definovat dvě formy synonym, rozšiřující sady a náhradní sady.

Úprava souboru tesaurus

  1. Otevřete soubor tesaurus v Poznámkovém bloku nebo jiném textovém editoru.

  2. Pokud soubor tesaurus upravujete poprvé, odeberte na začátku a na konci souboru následující řádky komentářů:

    <!--Commented out
    -->
    
  3. Přidání, úprava nebo odstranění náhradní sady nebo rozšiřující sady

  4. Uložte soubor a zavřete Poznámkový blok.

  5. Použijte sp_fulltext_load_thesaurus_file k načtení obsahu souboru tezaurus do tempdb, určení místního identifikátoru (LCID), který odpovídá jazyku souboru tezaurus. Například pro anglický tezaurus soubor, tsenu.xml, odpovídající LCID je 1033.

    USE AdventureWorks;
    
    EXECUTE sys.sp_fulltext_load_thesaurus_file 1033;
    GO
    

Doporučení pro úpravy souborů tesaurus

Doporučujeme, aby položky v souboru tesaurus neobsahují žádné speciální znaky. Důvodem je, že oddělovače slov mají jemné chování s ohledem na speciální znaky. Pokud položka tesaurus obsahuje nějaké speciální znaky, můžou mít dělení slov v kombinaci s danou položkou jemný dopad na chování fulltextového dotazu.

Doporučujeme, aby položky <sub> neobsahovaly žádná stopslova, protože stopslova jsou z fulltextového indexu vynechána. Dotazy jsou rozšířeny tak, aby zahrnovaly <sub> položky ze souboru tezauru, a pokud položka <sub> obsahuje stop slova, velikost dotazu se zbytečně zvýší.

Omezení pro úpravy souborů tesaurus

Pro úpravy souboru tesaurus platí následující omezení:

  • Soubory tesaurus můžou aktualizovat, upravovat nebo odstraňovat pouze správci systému.

  • Při úpravě souborů tesaurus pomocí nástrojů textového editoru musí být soubory uloženy ve formátu Unicode a musí být zadány značky pořadí bajtů.

  • Položky tezauru nemohou být prázdné nebo oddělení slov na prázdný řetězec.

  • Fráze v souboru tesaurus nesmí být delší než 512 znaků.

  • Tesaurus nesmí obsahovat žádné duplicitní položky mezi <sub> položkami rozšiřujících sad a <pat> prvků náhradních sad.