Sdílet prostřednictvím


FREETEXT (Transact-SQL)

platí pro:SQL ServerAzure SQL Databaseazure SQL Managed InstanceSQL Database v Microsoft Fabric

Je predikát použitý v klauzuli WHERE Transact-SQL příkazu Transact-SQL SELECT k provedení fulltextového vyhledávání SQL Serveru na fulltextových indexovaných sloupcích obsahujících datové typy založené na znakech. Tento predikát vyhledá hodnoty, které odpovídají významu a nejen přesnému formulaci slov ve hledané podmínce. Při použití funkce FREETEXT interně dotazovací modul fulltext interně provádí následující akce na freetext_string, přiřadí každému termínu váhu a pak najde shody:

  • Rozdělí řetězec na jednotlivá slova na základě hranic slova (dělení slov).

  • Generuje inflexní formy slov (stemming).

  • Identifikuje seznam rozšíření nebo nahrazení podmínek na základě shody v tesauru.

Poznámka

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

platí pro: SQL Server ( SQL Server 2008 (10.0.x) až aktuální verze).

Transact-SQL konvence syntaxe

Syntax

FREETEXT ( { column_name | (column_list) | * }   
          , 'freetext_string' [ , LANGUAGE language_term ] )  

Argumenty

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 je v klauzuli FROM více než jedna tabulka, musí být * kvalifikovaný názvem tabulky. Pokud není zadán language_term, musí být jazyk všech sloupců tabulky 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í podmínky CONTAINS a CONTAINSTABLE, kde A je klíčové slovo, při použití v freetext_string slovo "a" je považováno za slovo šumu nebo zarážkaa bude zahozena.

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

freetext_string je nvarchar. Implicitní převod nastane, když se jako vstup použije jiný datový typ znaku. Velké datové typy řetězců nvarchar(max) a varchar(max) nelze použít. V následujícím příkladu @SearchWord proměnná, která je definována jako varchar(30), způsobí implicitní převod v predikátu FREETEXT.

USE AdventureWorks2022;  
GO  
DECLARE @SearchWord VARCHAR(30)  
SET @SearchWord ='performance'  
SELECT Description   
FROM Production.ProductDescription   
WHERE FREETEXT(Description, @SearchWord);  
  

Vzhledem k tomu, že při převodu nefunguje "zašifrování parametrů", použijte nvarchar pro lepší výkon. V příkladu deklarujte @SearchWord jako nvarchar(30).

USE AdventureWorks2022;  
GO  
DECLARE @SearchWord NVARCHAR(30)  
SET @SearchWord = N'performance'  
SELECT Description   
FROM Production.ProductDescription   
WHERE FREETEXT(Description, @SearchWord);  
  

Můžete také použít nápovědu k dotazu OPTIMIZE FOR pro případy, kdy se vygeneruje neoptimální plán.

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í na takový sloupec může určení jazyka language_term zvýšit pravděpodobnost dobré shody.

Při zadání jako řetězec language_term odpovídá aliasu hodnoty sloupce v sys.syslanguages zobrazení kompatibility. Ř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é prostředky odpovídající danému jazyku, microsoft SQL Server vrátí chybu. Chcete-li použít neutrální jazykové prostředky, zadejte 0x0 jako language_term.

Obecné 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.

Fulltextové dotazy používající FREETEXT jsou méně přesné než ty fulltextové dotazy používající contains. Fulltextový vyhledávací modul SQL Serveru identifikuje důležitá slova a fráze. Žádnému z vyhrazených klíčových slov nebo zástupných znaků, které mají obvykle význam při zadání v parametru <contains_search_condition> predikátu CONTAINS, se neposkytuje žádný zvláštní význam.

Predikáty fulltextu nejsou v klauzuli OUTPUT povoleny, pokud je úroveň kompatibility databáze nastavená na 100.

Poznámka

Funkce FREETEXTTABLE je užitečná pro stejné druhy shod jako predikát FREETEXT. Na tuto funkci můžete odkazovat jako na běžný název tabulky v klauzuli FROM příkazu SELECT. Další informace naleznete v tématu FREETEXTTABLE (Transact-SQL).

Dotazování vzdálených serverů

V predikátu CONTAINS nebo FREETEXT můžete použít čtyřdílný název k dotazování fulltextových indexovaných sloupců cílových tabulek na propojeném serveru. Pokud chcete připravit vzdálený server pro příjem fulltextových dotazů, vytvořte fulltextový index cílových tabulek a sloupců na vzdáleném serveru a pak přidejte vzdálený server jako propojený server.

Na rozdíl od fulltextového vyhledávání funguje predikát LIKETransact-SQL pouze na vzorech znaků. Predikát LIKE také nelze použít k dotazování na formátovaná binární data. Dotaz LIKE oproti velkému množství nestrukturovaných textových dat je navíc mnohem pomalejší než ekvivalentní fulltextový dotaz na stejná data. Dotaz LIKE na miliony řádků textových dat může trvat několik minut, než se vrátí; Zatímco fulltextový dotaz může trvat pouze sekundy nebo méně u stejných dat v závislosti na počtu vrácených řádků.

Příklady

A. Hledání slov obsahujících zadané hodnoty znaků pomocí funkce FREETEXT

Následující příklad vyhledá všechny dokumenty obsahující slova související se zásadními, bezpečnostními, součástmi.

USE AdventureWorks2022;  
GO  
SELECT Title  
FROM Production.Document  
WHERE FREETEXT (Document, 'vital safety components' );  
GO  

B. Použití FUNKCE FREETEXT s proměnnými

Následující příklad používá proměnnou místo konkrétního hledaného termínu.

USE AdventureWorks2022;  
GO  
DECLARE @SearchWord NVARCHAR(30);  
SET @SearchWord = N'high-performance';  
SELECT Description   
FROM Production.ProductDescription   
WHERE FREETEXT(Description, @SearchWord);  
GO  

Viz také

Začínáme s Full-Text vyhledávacími
Vytváření a správa katalogů Full-Text
VYTVOŘIT FULLTEXT KATALOG (Transact-SQL)
CREATE FULLTEXT INDEX (Transact-SQL)
vytváření a správa indexů Full-Text
dotaz pomocí hledání Full-Text
vytváření vyhledávacích dotazů Full-Text (Visual Database Tools)
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
datových typů (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
WHERE (Transact-SQL)