Udostępnij za pośrednictwem


FREETEXT (Transact-SQL)

Predykat służy w klauzula WHERE do kolumny zawierające typy danych znakowych dla wartości, które odpowiadają znaczenie i nie tylko dokładną treść wyrazów w warunek wyszukiwaniawyszukiwania.Użyto FREETEXT aparatu zapytanie pełnotekstowe wewnętrznie wykonuje następujące akcje na freetext_string, przypisuje każdej pojęcie masy, a następnie znajdzie dopasowania.

  • Oddziela ciąg na pojedyncze wyrazy oparte na granice programu word (dzielenia wyrazów).

  • Generuje inflectional formy wyrazów (wynikające).

  • Identyfikuje listy osiągnięcia lub części zamienne dla warunków oparte na dopasowania w tezaurusie.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

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

Argumenty

  • column_name
    Jest nazwą jednej lub kilku kolumn indeksowanych pełnotekstowe tabela określonego w klauzulaFROM.The columns can be of type char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary, or varbinary(max).

  • column_list
    Wskazuje, można określić kilka kolumn, oddzielone przecinkiem.column_listmuszą być ujęte w nawiasy.Chyba że language_term jest określony język wszystkich kolumn column_list musi być taka sama.

  • *
    Określa, że wszystkie kolumny, które zostały zarejestrowane dla wyszukiwanie pełnotekstowe powinny być używane do wyszukiwania danego freetext_string.Jeśli więcej niż jednej tabela z klauzula* musi być kwalifikowany nazwa tabela .Chyba że language_term określono język wszystkie kolumny tabela musi być taka sama.

  • freetext_string
    Jest to tekst do wyszukania w column_name.Można wprowadzić dowolny tekst, włączając w to słowa, frazy lub zdania.Dopasowuje są generowane, jeśli każdy termin lub formularze każdy termin został znaleziony w indeksu pełnotekstowego.

    W przeciwieństwie do w CONTAINSTABLE i ZAWIERA warunek wyszukiwania gdzie i jest słowo kluczowe w freetext_string wyraz "i" uznaje się za wyraz ignorowanylub stopwordi zostaną odrzucone.

    Nie dopuszcza się stosowanie wagi, FORMSOF, symboli wieloznacznych, NEAR i innych składni.freetext_stringjest wordbroken odpływową i przekazywane za pośrednictwem tezaurusa.Jeśli freetext_string jest ujęty w znaki cudzysłowu, zamiast tego jest wykonywane dopasowanie frazę; Mapowanie rdzeni i tezaurus nie są wykonywane.

    freetext_stringis nvarchar.Niejawna konwersja występuje, gdy inny typ danych znak jest używany jako danych wejściowych.W poniższym przykładzie @SearchWord zmienną, która jest zdefiniowana jako varchar(30), powoduje, że niejawna konwersja w FREETEXT predykatu.

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

    Ponieważ "Wykrywanie parametr" nie działa poprzez konwersję, użyj nvarchar dla lepszej wydajności.W tym przykładzie zadeklarować @SearchWord jako nvarchar(30).

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

    Za pomocą wskazówkę dotyczącą optymalizacji dla kwerendy dla przypadków, w których-optymalny plan jest generowany.

  • JĘZYKlanguage_term
    To język, którego zasoby będą używane do dzielenia wyrazu, wynikające i usuwania tezaurusa i stopword jako część tej kwerendy.Ten parametr jest opcjonalny i może być określony jako ciąg, liczba całkowita lub wartość szesnastkową odpowiadającą identyfikator ustawienia regionalne (LCID) języka.Jeśli language_term określono język reprezentuje zostaną zastosowane do wszystkich elementów warunek wyszukiwania.Jeśli nie określono wartości, używany jest język pełnego tekstu kolumna .

    Dokumenty w różnych językach są przechowywane razem jako dużych obiektów binarnych (bloków BLOB) w jednej kolumna, identyfikator ustawienia regionalne (LCID) danego dokumentu określa, jaki język jest używany do indeksowania zawartości.Podczas badania takiej kolumna, określając LANGUAGElanguage_term można zwiększyć prawdopodobieństwo dobre dopasowanie.

    Gdy określona jako ciąg language_term odpowiada alias wartośćkolumna w on sys.syslanguages (Transact-SQL) Widok zgodności. ciąg musi być ujęty w znaki pojedynczego cudzysłowu, tak jak w "language_term".Gdy określona jako liczba całkowita, language_term jest rzeczywisty identyfikator LCID identyfikujący język.Gdy określona jako wartość szesnastkową language_term x 0 następuje szesnastkowej wartości LCID.Wartość szesnastkowa nie może przekraczać ośmiu cyfr, łącznie z zerami na początku.

    Jeśli wartość jest w formacie zestaw znaków dwubajtowych (zestaw znaków dwubajtowych), Microsoft SQL Server przekonwertuje go do kodu Unicode.

    Jeśli język określony jest nieprawidłowa lub istnieje żadne zasoby zainstalowanych odpowiadające tym języku, Microsoft SQL Server zwraca błąd.Aby korzystać z zasobów języków neutralnych, określić 0x0 jako language_term.

Uwagi

Pełny tekst predykaty i funkcje pracy na pojedynczej tabela, która jest wprost w predykacie od.Wyszukiwanie wielu tabel, należy użyć sprzężonej tabela w klauzula FROM wyszukiwania na zestaw wyników będącego produktem dwóch lub więcej tabel.

Kwerendy pełnego tekstu za pomocą FREETEXT są mniej dokładne niż tych kwerend pełnego tekstu za pomocą ZAWIERA.Aparatuprzeszukiwanie pełnego tekstuSQL Serveridentyfikuje ważne wyrazów i fraz. Nie specjalne znaczenie podano do zastrzeżonych słów kluczowych lub znaki wieloznaczne, które zazwyczaj mają znaczenie w <contains_search_condition> parametr predykatu ZAWIERA.

Jeśli poziom zgodności jest mniejsza niż 70, FREETEXT nie został rozpoznany jako słowo kluczowe.Aby uzyskać więcej informacji, zobacz sp_dbcmptlevel (języka Transact-SQL).

Predykaty pełnego tekstu nie są dozwolone w dane wyjściowe klauzula gdy zgodności bazy danych poziom jest zestaw na 100.

Porównanie podobne z wyszukiwania pełnotekstowego

W przeciwieństwie do przeszukiwanie pełnego tekstu jak Transact-SQL predykat pracuje tylko wzorców znaków.Ponadto nie można używać w predykacie LIKE kwerendy sformatowane dane binarne.Ponadto PODOBNYCH zapytanie dużą ilość tekstu bez struktury danych jest znacznie mniejsza niż równoważne zapytanie pełnotekstowe na tych samych danych.PODOBNEGO zapytanie milionów wierszy tekstu danych może trwać minut zwrotu; zapytanie pełnotekstowe może podjąć tylko sekund lub mniej przeciwko te same dane w zależności od liczby wierszy zwracanych.

Przykłady

A.Aby wyszukać wyrazy zawierające określony znak wartości przy użyciu FREETEXT

Następujący przykład wyszukuje wszystkie dokumenty zawierające wyrazy związane z "istotne", "bezpieczeństwo" i "składniki".

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

B.Korzystanie ze zmiennych FREETEXT

W poniższym przykładzie użyto zmiennej, zamiast określonego wyszukiwany termin.

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