Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
azure SQL Managed Instance
Pro sloupce XML můžete vytvořit fulltextový index, který indexuje obsah hodnot XML, ale ignoruje kód XML. Značky elementů se používají jako hranice tokenů. Indexují se následující položky:
Obsah elementů XML.
Obsah atributů XML elementu nejvyšší úrovně pouze, pokud tyto hodnoty nejsou číselné hodnoty.
Pokud je to možné, můžete fulltextové vyhledávání kombinovat s indexem XML následujícím způsobem:
Nejprve vyfiltrujte hodnoty XML, které zajímají, pomocí fulltextového vyhledávání SQL.
Dále zadejte dotaz na hodnoty XML, které ve sloupci XML používají index XML.
Příklad: Kombinování fulltextového vyhledávání s dotazováním XML
Po vytvoření fulltextového indexu ve sloupci XML následující dotaz zkontroluje, že hodnota XML obsahuje slovo "vlastní" v názvu knihy:
SELECT *
FROM T
WHERE CONTAINS(xCol,'custom')
AND xCol.exist('/book/title/text()[contains(.,"custom")]') = 1;
Metoda contains()
používá fulltextový index pro vytvoření podmnožiny hodnot XML obsahujících slovo "vlastní" kdekoli v dokumentu. Klauzule exist()
zajišťuje, že slovo "custom" se vyskytuje v názvu knihy.
Fulltextové vyhledávání, které používá contains()
a contains()
XQuery, má jinou sémantiku. Posledně jmenované je shoda podřetězce a první jmenované je shoda tokenu, která používá stemming. Při hledání řetězce, který má v názvu "run", budou shody zahrnovat "run", "runs" a "running", protože jsou splněné podmínky jak pro fulltextové vyhledávání contains()
, tak pro XQuery contains()
. Dotaz ale neodpovídá slovu "přizpůsobitelný" v názvu v tom, že fulltextová contains()
selže, ale contains()
XQuery je splněná. Obecně platí, že pro čistou shodu podřetězce by měla být odstraněna klauzule fulltext contains()
.
Navíc fulltextové vyhledávání používá stemming slov, ale XQuery contains()
je doslovná shoda. Tento rozdíl je znázorněn v dalším příkladu.
Příklad: Fulltextové vyhledávání hodnot XML pomocí stemmingu
Kontrola contains()
XQuery provedená v předchozím příkladu obecně nejde odstranit. Zvažte tento dotaz:
SELECT *
FROM T
WHERE CONTAINS(xCol,'run');
Slovo "běžet" v dokumentu odpovídá hledané podmínce kvůli zamykání. Kontext vyhledávání se navíc nekontroluje pomocí XQuery.
Když je XML rozložen do relačních sloupců pomocí AXSD, které jsou indexovány fulltextem, XPath dotazy, ke kterým dochází v zobrazení XML, neprovádějí fulltextové vyhledávání v podkladových tabulkách.