sys.dm_fts_parser (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Vrátí konečný výsledek tokenizace po aplikaci kombinace word breakeru, synonymu a stoplistu na vstup dotazového řetězce. Výsledek tokenizace odpovídá výstupu Full-Text Engine pro zadaný dotazovací řetězec.

sys.dm_fts_parser je dynamická řídící funkce.

Syntax

sys.dm_fts_parser (
    'query_string'
    , lcid
    , stoplist_id
    , accent_sensitivity
)

Argumenty

query_string

Dotaz, který chcete rozdělit. query_string může být řetězce řetězců, které OBSAHUJÍ podporu syntaxe. Například můžete zahrnout flexní tvary, synonymum a logické operátory.

Identifikátor lokality (LCID) word breakeru, který se používá pro parsování query_string.

stoplist_id

Identifikace stoplistu, pokud existuje, má použít word breaker identifikovaný LCID. stoplist_id je inteligence. Pokud zadáte 'NULL', nepoužije se žádný stoplist. Pokud zadáte 0, systém STOPLIST se použije.

ID stoplistu je v databázi jedinečné. Pro získání ID stoplistu pro plnotextový index v dané tabulce použijte sys.fulltext_indexes katalogový pohled.

accent_sensitivity

Booleovská hodnota, která určuje, zda je vyhledávání v plném textu citlivé nebo necitlivé na diakritiku. accent_sensitivity je bit, s jednou z následujících hodnot:

Value Citlivost na přízvuk je...
0 Necitlivé

Slova jako "café" a "café" jsou považována za totožná.
1 Citlivé

Slova jako "café" a "café" jsou považována za odlišná.

Note

Pro zobrazení aktuálního nastavení této hodnoty pro plnotextový katalog spusťte následující příkaz Transact-SQL: SELECT fulltextcatalogproperty('<catalog_name>', 'AccentSensitivity');.

Vrácená tabulka

Název sloupce Datový typ Description
keyword 1 varbinary(128) Hexadecimální reprezentace daného klíčového slova vrácená word breakerem. Tato reprezentace se používá k uložení klíčového slova v indexu plného textu. Tato hodnota není čtivá člověkem, ale je užitečná pro propojení daného klíčového slova s výstupem vráceným jinými dynamickými pohledy správy, které vracejí obsah celého textového indexu, jako jsou sys.dm_fts_index_keywords a sys.dm_fts_index_keywords_by_document.
group_id int Obsahují celočíselnou hodnotu, která je užitečná pro rozlišení logické skupiny, ze které byl daný termín generován. Například v angličtině produkuje Server AND DB OR FORMSOF(THESAURUS, DB) následující group_id hodnoty:

1: Server
2: DB
3: DB
phrase_id int Obsahuje celočíselnou hodnotu, která je užitečná pro rozlišení případů, kdy jsou alternativní formy složených slov, jako je plný text, vydávány word breakerem. Někdy, s přítomností složených slov ("multi-milion"), jsou vydávány alternativní formy slovolamářem. Tyto alternativní formy (fráze) je někdy potřeba rozlišit.

Například v angličtině produkuje multi-million následující phrase_id hodnoty:

1 pro multi
1 pro million
2 pro multimillion
occurrence int Označuje pořadí jednotlivých členů ve výsledku parsování. Například pro frázi SQL Server query processor výskyt by obsahoval následující hodnoty výskytu pro termíny ve frázi v angličtině:

1 pro SQL
2 pro Server
3 pro query
4 pro processor
special_term nvarchar(4000) Obsahuje informace o charakteristikách termínu, který vydává Word breaker, jeden z:

- Přesná shoda
- Slovo šumu
- Konec věty
- Konec odstavce
- Konec kapitoly
display_term nvarchar(4000) Obsahuje lidsky čitelnou formu klíčového slova. Stejně jako u funkcí určených k přístupu k obsahu celého textového indexu nemusí být tento zobrazený termín totožný s původním termínem kvůli omezení denormalizace. Mělo by to však být dostatečně přesné, aby vám pomohlo ji rozpoznat od původního vstupu.
expansion_type int Obsahuje informace o povaze rozšíření daného termínu, jednoho z:

0 = Pád s jedním slovem
2 = Flexivní expanze
4 = Rozšíření/nahrazení tezauru

Například uvažujme případ, kdy tezaurus definuje run jako rozšíření :jog

<expansion>
<sub>run</sub>
<sub>jog</sub>
</expansion>

Tento člen FORMSOF (FREETEXT, run) generuje následující výstup:

run s expansion_type = 0
runs kde expansion_type = 2
running kde expansion_type = 2
ran kde expansion_type = 2
jog kde expansion_type = 4
source_term nvarchar(4000) Termín nebo fráze, ze které byl daný termín generován nebo parsován. Například dotaz na , '"word breakers" AND stemmers' který v angličtině vyprodukuje následující hodnoty source_term :

word breakers Za display_termword
word breakers Za display_termbreakers
stemmers Za display_termstemmers

10xFF představuje speciální znak, který označuje konec souboru nebo datové sady.

Poznámky

sys.dm_fts_parserpodporuje syntaxi a funkce fulltextových predikátů, jako jsou CONTAINS a FREETEXT, a funkcí jako CONTAINSTABLE a FREETEXTTABLE.

Použijte Unicode pro parsování speciálních znaků

Když parsujete dotazovací řetězec, použije sys.dm_fts_parser kolekci databáze, ke které jste připojeni, pokud dotazovací řetězec nespecifikujete jako Unicode. Proto pro řetězec mimo Unicode a obsahující speciální znaky, jako je ü nebo ç, může být výstup neočekávaný, v závislosti na uspořádání databáze. Pro zpracování dotazovacího řetězce nezávisle na databázové kolaci předpoňme řetězec , Ntedy N'<query_string>'.

Pro více informací viz C. Zobrazit výstup řetězce obsahujícího speciální znaky později v tomto článku.

Kdy použít sys.dm_fts_parser

sys.dm_fts_parser může být výkonná pro ladění. Mezi hlavní scénáře použití patří:

  • Abychom pochopili, jak daný word breaker zachází s daným vstupem

    Když dotaz vrátí neočekávané výsledky, pravděpodobnou příčinou je způsob, jakým word breaker data analyzuje a ničí. Použitím sys.dm_fts_parser, zjistíte výsledek, že word breaker přechází do indexu plného textu. Navíc můžete vidět, které výrazy jsou stopwordy, které nejsou v indexu plného textu vyhledávány. Zda je termín stopwordem pro daný jazyk, závisí na tom, zda je v stoplistu specifikovaném hodnotou stoplist_id , která je deklarována ve funkci.

    Příznak citlivosti přízvuku vám umožní vidět, jak word breaker zpracovává vstup, přičemž bere v úvahu informace o citlivosti přízvuku.

  • Abychom pochopili, jak stemmer funguje na daném vstupu

    Jak word breaker a stemmer parsují dotazovací termín a jeho stemové formy, můžete zjistit tím, že zadáte nebo CONTAINSCONTAINSTABLE dotaz obsahující následující FORMSOF klauzuli:

    FORMSOF ( INFLECTIONAL, <query_term> )
    

    Výsledky vám řeknou, jaké termíny jsou předávány do indexu plného textu.

  • Abychom pochopili, jak tezaurus rozšiřuje nebo nahrazuje celý nebo část vstupu

    Můžete také uvést:

    FORMSOF ( THESAURUS, <query_term> )
    

    Výsledky tohoto dotazu ukazují, jak word breaker a synonymum interagují pro dotazovací termín. Rozšíření nebo náhrady můžete vidět v tezauru a identifikovat výsledný dotaz, který je skutečně zadáván vůči plnotextovému indexu.

    Pokud uživatel vydá:

    FORMSOF ( FREETEXT, <query_term> )
    

    Flexivní a tezaurické schopnosti probíhají automaticky.

Kromě předchozích scénářů použití může výrazně pomoci sys.dm_fts_parser pochopit a řešit mnoho dalších problémů s plnotextovým dotazem.

Povolení

Vyžaduje CREATE FULLTEXT CATALOG povolení a přístupová práva k určenému stoplistu.

Examples

A. Zobrazit výstup daného word breakera pro klíčové slovo nebo frázi

Následující příklad vrací výstup z anglického word breakeru, jehož LCID je 1033, a bez stoplistu na následujícím dotazovacím řetězci:

The Microsoft business analysis

Citlivost na přízvuk je vypnutá.

SELECT *
FROM sys.dm_fts_parser(' "The Microsoft business analysis" ', 1033, 0, 0);

B. Zobrazit výstup daného word breakeru v kontextu filtrování stoplistu

Následující příklad vrací výstup z anglického word breakeru, jehož LCID je 1033, a anglického stoplistu, jehož ID je 77, na následujícím dotazovacím řetězci:

"The Microsoft business analysis" OR "MS revenue"

Citlivost na přízvuk je vypnutá.

SELECT *
FROM sys.dm_fts_parser(' "The Microsoft business analysis"  OR " MS revenue" ', 1033, 77, 0);

C. Zobrazit výstup řetězce obsahujícího speciální znaky

Následující příklad používá Unicode k analýze následujícího francouzského řetězce:

français

Příklad specifikuje LCID pro francouzský jazyk, 1036, a ID uživatelsky definovaného stoplistu, 5. Citlivost na přízvuk je zapnutá.

SELECT *
FROM sys.dm_fts_parser(N'français', 1036, 5, 1);