Sdílet prostřednictvím


FREETEXTTABLE (Transact-SQL)

platí pro: SQL Server Azure SQL DatabaseAzure SQL Managed Instance

Je funkce používaná v klauzuli FROM v příkazu SELECT Transact-SQL k provedení celotextového vyhledávání SQL Server na indexovaných sloupcích obsahujících znakové datové typy. Tato funkce vrací tabulku s nula, jedním nebo více řádky pro ty sloupce obsahující hodnoty odpovídající významu, nikoli pouze přesnému znění textu v daném freetext_string. FREETEXTTABLE je odkazován, jako by šlo o běžný název tabulky.

FREETEXTTABLE je užitečný pro stejné typy shod jako FREETEXT (Transact-SQL),

Dotazy využívající FREETEXTTABLE vracejí hodnotu relevance rank (RANK) a full-text key (KEY) pro každý řádek.

Poznámka:

Informace o formách fulltextového vyhledávání, které sql Server podporuje, najdete v tématu Query s Full-Text Search.

Transact-SQL konvence syntaxe

Syntaxe

FREETEXTTABLE (table , { column_name | (column_list) | * }   
          , 'freetext_string'   
     [ , LANGUAGE language_term ]   
     [ , top_n_by_rank ] )  

Arguments

table
Je název tabulky, která byla označena pro dotazování plného textu. tabulka nebo pohledmůže být jednodílný, dvou- nebo třídílný název databázového objektu. Při dotazování pohledu může být použita pouze jedna celotextová indexovaná základní tabulka.

tabulka nemůže specifikovat název serveru a nemůže být použita v dotazech proti propojeným serverům.

column_name
Je název jednoho nebo více fulltextových indexovaných sloupců tabulky zadané v klauzuli FROM. Sloupce můžou být typu znak, varchar, nchar, nvarchar, textové,ntext, obrázku, xml, varbinárnínebo varbinary(max).

column_list
Označuje, že je možné zadat několik sloupců oddělených čárkou. column_list musí být uzavřeny v závorkách. Pokud není zadán language_term, musí být jazyk všech sloupců column_list stejný.

*
Určuje, že všechny sloupce, které byly registrovány pro fulltextové vyhledávání, by měly být použity k vyhledání dané freetext_string. Pokud language_term není specifikováno, jazyk všech sloupců indexovaných v plném textu v tabulce musí být stejný.

freetext_string
Je text, který chcete vyhledat v column_name. Můžete zadat libovolný text, včetně slov, frází nebo vět. Shody se vygenerují, pokud se v fulltextovém indexu nachází nějaký termín nebo formy jakéhokoli termínu.

Na rozdíl od vyhledávacího stavu OBSAHUJE, kde je AND klíčové slovo, je při použití v freetext_string slovo 'and' považováno za šumové slovo nebo stopword a bude zamítnuto.

Použití funkce WEIGHT, FORMSOF, zástupných znaků, NEAR a jiné syntaxe není povoleno. freetext_string je slovobroken, stemmed, a prošel tesaurus.

LANGUAGE_TERM JAZYKA
Je jazyk, jehož prostředky se v rámci dotazu použijí pro dělení slov, vytváření a tesaurus a odebrání stopwordu. Tento parametr je volitelný a lze jej zadat jako řetězec, celé číslo nebo šestnáctkovou hodnotu odpovídající identifikátoru národního prostředí (LCID) jazyka. Pokud je zadán language_term, jazyk, který představuje, se použije na všechny prvky podmínky hledání. Pokud není zadána žádná hodnota, použije se jazyk fulltextu sloupce.

Pokud jsou dokumenty různých jazyků uloženy společně jako binární velké objekty (BLOB) v jednom sloupci, identifikátor národního prostředí (LCID) daného dokumentu určuje, jaký jazyk se používá k indexování jeho obsahu. Při dotazování takového sloupce může zadání LANGUAGE language_term zvýšit pravděpodobnost dobré shody.

Když je zadán jako řetězec, odpovídá language_term hodnotě sloupce alias v pohledu kompatibility sys.syslanguages (Transact-SQL). Řetězec musí být uzavřený v jednoduchých uvozovkách, jako v "language_term". Pokud je zadáno jako celé číslo, language_term je skutečný identifikátor LCID, který identifikuje jazyk. Pokud je zadaná jako šestnáctková hodnota, language_term je 0x následovaná šestnáctkovou hodnotou LCID. Šestnáctková hodnota nesmí překročit osm číslic, včetně počátečních nul.

Pokud je hodnota ve formátu dvoubajtové znakové sady (DBCS), Microsoft SQL Server ji převede na Unicode.

Pokud zadaný jazyk není platný nebo nejsou nainstalovány žádné zdroje odpovídající tomuto jazyku, SQL Server vrátí chybu. Chcete-li použít neutrální jazykové prostředky, zadejte 0x0 jako language_term.

top_n_by_rank
Specifikuje, že se vrací pouze nnejvýše hodnocených shod, sestupně. Platí pouze v případě, že je zadána celočíselná hodnota n. Pokud se top_n_by_rank zkombinuje s jinými parametry, dotaz by mohl vrátit méně řádků než počet řádků, které ve skutečnosti odpovídají všem predikátům. top_n_by_rank umožňuje zvýšit výkon dotazů tím, že si vzpomenete jenom na nejrelevavantnější přístupy.

Poznámky

Predikáty a funkce fulltextu pracují na jedné tabulce, která je odvozena v predikátu FROM. Pokud chcete vyhledat více tabulek, pomocí spojené tabulky v klauzuli FROM vyhledejte sadu výsledků, která je součinem dvou nebo více tabulek.

FREETEXTTABLE používá stejné vyhledávací podmínky jako predikát FREETEXT.

Stejně jako CONTAINSTABLE má vrácená tabulka sloupce pojmenované KEY a RANK, které jsou v dotazu odkazovány pro získání příslušných řádků a použití hodnot pořadí řádků.

Povolení

FREETEXTTABLE mohou volat pouze uživatelé s příslušnými SELECT oprávněními pro zadanou tabulku nebo odkazované sloupce tabulky.

Examples

A. Jednoduchý příklad

Následující příklad vytváří a vyplňuje jednoduchou tabulku se dvěma sloupci, která uvádí 3 okresy a barvy jejich vlajek. Poté vytvoří a vyplní plnotextový katalog a index v tabulce. Poté je předvedena syntax FREETEXTTABLE .

CREATE TABLE Flags (Country nvarchar(30) NOT NULL, FlagColors varchar(200));  
CREATE UNIQUE CLUSTERED INDEX FlagKey ON Flags(Country);  
INSERT Flags VALUES ('France', 'Blue and White and Red');  
INSERT Flags VALUES ('Italy', 'Green and White and Red');  
INSERT Flags VALUES ('Tanzania', 'Green and Yellow and Black and Yellow and Blue');  
SELECT * FROM Flags;  
GO  
  
CREATE FULLTEXT CATALOG TestFTCat;  
CREATE FULLTEXT INDEX ON Flags(FlagColors) KEY INDEX FlagKey ON TestFTCat;  
GO   
  
SELECT * FROM Flags;  
SELECT * FROM FREETEXTTABLE (Flags, FlagColors, 'Blue');  
SELECT * FROM FREETEXTTABLE (Flags, FlagColors, 'Yellow');  

B. Použití FREETEXT v INNER JOIN

Následující příklad vrací popis a hodnost libovolných součinů s popisem, který odpovídá významu .high level of performance

USE AdventureWorks2022;  
GO  
  
SELECT FT_TBL.Description  
    ,KEY_TBL.RANK  
FROM Production.ProductDescription AS FT_TBL   
    INNER JOIN FREETEXTTABLE(Production.ProductDescription,  
    Description,   
    'high level of performance') AS KEY_TBL  
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]  
ORDER BY RANK DESC;  
GO  

C. Specifikace jazyka a nejvýše hodnocených zápasů

Následující příklad je identický a ukazuje použití LANGUAGE parametrů language_term a top_n_by_rank.

USE AdventureWorks2022;  
GO  
  
SELECT FT_TBL.Description  
    ,KEY_TBL.RANK  
FROM Production.ProductDescription AS FT_TBL   
    INNER JOIN FREETEXTTABLE(Production.ProductDescription,  
    Description,   
    'high level of performance',  
    LANGUAGE N'English', 2) AS KEY_TBL  
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]  
ORDER BY RANK DESC;  
GO  

Poznámka:

Parametr LANGUAGE language_term není vyžadován pro použití parametru top_n_by_rank .

Viz také

Začínáme s Full-Text vyhledáváním
Vytváření a správa katalogů Full-Text
VYTVOŘIT FULLTEXT KATALOG (Transact-SQL)
VYTVOŘIT FULLTEXT INDEX (Transact-SQL)
vytváření a správa indexů Full-Text
dotaz pomocí hledání Full-Text
Vytvoření Full-Text Vyhledávacích dotazů (Visual Database Tools)
OBSAHUJE (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
VOLNÝ TEXT (Transact-SQL)
Funkce sady řádků (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)
Možnost konfigurace serveru pro precompute rank
Porovnejte funkce v Azure SQL Database a Azure SQL Managed Instance