Full-Text Predicates and Functions Overview

Kwerendy pełnego tekstu służą funkcje (CONTAINSTABLE i FREETEXTTABLE) i pełnego tekstu predykatów (CONTAINS i FREETEXT).Obsługują one sformatowanego Transact-SQL Składnia obsługuje szereg formularzy terminów kwerendy. Zapisać kwerendy pełnego tekstu, ale musi kiedy i sposobów korzystania z nich predykaty i funkcje.W tym temacie zestawiono predykatów i funkcje i omówiono commonalities między predykat CONTAINS a funkcja CONTAINSTABLE.

Omówienie Full-Text predykaty (CONTAINS i FREETEXT)

CONTAINS i FREETEXT są określone w WHERE lub klauzulę HAVING w instrukcja SELECT.Się je połączyć z żadnym z drugiej strony Transact-SQL Predykaty, takie jak LIKE i BETWEEN.

Predykaty CONTAINS i FREETEXT zwraca wartość PRAWDA lub FAŁSZ.Można ich używać tylko po to, aby określić kryteria określające, czy dany wiersz jest zgodny z zapytanie pełnotekstowe.Zgodnych wierszy są zwracane zestaw wyników.

Podczas korzystania z CONTAINS lub FREETEXT, można określić jedną kolumna, lista kolumn lub wszystkich kolumn w tabela, która ma być przeszukiwany.Opcjonalnie można określić język, w których zasobów będą używane przez biorąc pod uwagę zapytanie pełnotekstowe wyraz, dzielenia i mapowanie rdzeni, tezaurusa wyszukiwania i usuwania wyraz pomijalny.

CONTAINS i FREETEXT przydają się do innego rodzaju dopasowania, w następujący sposób:

  • Dokładne lub niewyraźny odpowiedników (mniej dokładne) do pojedynczych wyrazów i fraz, bliskość wyrazy w pewnej odległości od siebie lub ważona odpowiada za pomocą CONTAINS (lub CONTAINSTABLE).W przypadku korzystania z CONTAINS, należy określić wyszukiwania co najmniej jeden warunek, który określa tekst, który podczas wyszukiwania i warunki, które określą dopasowania.

    Operacja logiczna między warunków wyszukiwania można użyć.Aby uzyskać więcej informacji zobacz Za pomocą logiczny operatory — AND, OR I NOT (w CONTAINS i CONTAINSTABLE), w dalszej części tego tematu.

  • Korzystanie z określonego słowa, frazy lub zdania (FREETEXT (lub FREETEXTTABLE) do dopasowania znaczenie, ale nie dokładna treść, ciąg FREETEXT).Dopasowuje są generowane, jeśli dowolnego terminu lub formularzu wszelkie termin znajduje się w indeksie pełnego tekstu w określonej kolumnie.

Aby wykonywać kwerendy, połączone serwery, można użyć nazwy four-part CONTAINS lub FREETEXT.Aby uzyskać więcej informacji zobaczQuerying Linked Servers (Full-Text Search).

Aby uzyskać informacje dotyczące składnię i argumenty te predykatów zobacz CONTAINS (Transact-SQL) i FREETEXT (Transact-SQL).

Uwaga

Predykaty pełnego tekstu nie są dozwolone w Klauzula wyjście wówczas, gdy poziom zgodności bazy danych jest równa 100.

Przykłady

A.Z użyciem polecenia CONTAINS z <prostym_terminem>

W poniższym przykładzie wyszukuje wszystkie produkty z cena $80.99 zawierają wyraz "Mountain".

USE AdventureWorks;
GO
SELECT Name, ListPrice
FROM Production.Product
WHERE ListPrice = 80.99
   AND CONTAINS(Name, 'Mountain');
GO

B.Wyszukiwanie słów zawierających określony znak wartości za pomocą FREETEXT

Następujący przykład wyszukuje wszystkie dokumenty zawierające wyrazy bezpieczeństwa związanych z istotne, składniki.

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

Omówienie funkcji Full-Text (CONTAINSTABLE i FREETEXTTABLE)

Aby odwołać się do funkcji CONTAINSTABLE i FREETEXTTABLE, należy użyć takich jak nazwa tabela regularne w klauzula FROM instrukcja SELECT.Zwracały tabela zero, jeden lub więcej wierszy, które odpowiadają zapytanie pełnotekstowe.Tabela zwrócona zawiera tylko wiersze z tabela bazowa, spełniających kryteria określone w warunek wyszukiwania pełnotekstowego funkcja.

Kwerendy przy użyciu jednej z tych funkcji zwracają znaczenia, klasyfikacja wartość (pozycja) i pełnego tekstu klucz (KEY) dla każdego wiersza w następujący sposób:

  • Kolumna klucz

    Kolumna klucz zwraca unikatowe wartości zwracanych wierszy.Kolumna klucz może być wykorzystana do określenia kryteriów wyboru.

  • Pozycja kolumna

    Zwraca pozycja kolumna wartość rangi dla każdego wiersza, która wskazuje, jak wiersz spełnione kryteria wyboru.Im wyższa rangi wartość tekstu lub dokumentu w wierszu, bardziej odpowiedni wiersz jest dla danej zapytanie pełnotekstowe.Należy zauważyć, że różnych wierszy można klasyfikację takich samych nazwach.Można ograniczyć liczbę przedmiotów, które mają zostać zwrócone przez określenie opcjonalnej top_n_by_rank parametr. Aby uzyskać więcej informacji zobacz Ograniczanie USZEREGOWANY zestawy wyników (wyszukiwanie) i How Search Query Results Are Ranked (Full-Text Search).

W przypadku korzystania z jednej z tych funkcji, musisz określić tabela bazowa, który ma być pełnotekstowe przeszukiwanie.Podobnie jak w przypadku predykatów, można określić jedną kolumna, lista kolumn lub wszystkich kolumn w tabela, która ma być przeszukiwany i opcjonalnie, język, w których zasobów będą używane przez podane zapytanie pełnotekstowe.

CONTAINSTABLE przydaje się do tego samego rodzaju dopasowania, CONTAINS i FREETEXTTABLE jest przydatne do tego samego rodzaju dopasowania jako FREETEXT.Aby uzyskać więcej informacji zobacz Omówienie Full-Text predykaty (CONTAINS i FREETEXT), we wcześniejszej części tego topic.When uruchamianie kwerendy używające funkcji CONTAINSTABLE i FREETEXTTABLE, należy jawnie przyłączyć wierszy, które są zwracane z wierszy w SQL Server Tabela bazowa.

Aby uzyskać informacje dotyczące składnię i argumenty z tych funkcji zobacz CONTAINSTABLE (Transact-SQL) i FREETEXTTABLE (Transact-SQL).

Przykłady

A.Za pomocą CONTAINSTABLE

W poniższym przykładzie zwraca opis i kategorii nazwę wszystkie kategorie żywności, dla których Opis kolumna zawiera wyrazy "słodka i savory" u "sosy" lub słowo „ candies. „ Uwzględniane są wszystkie wiersze z nazwą kategorii "Ryby".Zwracane są tylko wiersze z wartością rangi równą 2 lub wyższy.

USE Northwind;
GO
SELECT FT_TBL.Description, 
   FT_TBL.CategoryName, 
   KEY_TBL.RANK
FROM Categories AS FT_TBL INNER JOIN
   CONTAINSTABLE (Categories, Description, 
      '("sweet and savory" NEAR sauces) OR
      ("sweet and savory" NEAR candies)'
   ) AS KEY_TBL
   ON FT_TBL.CategoryID = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK > 2
   AND FT_TBL.CategoryName <> 'Seafood'
ORDER BY KEY_TBL.RANK DESC;
GO

B.Za pomocą FREETEXTTABLE

W poniższym przykładzie rozszerza kwerendy FREETEXTTABLE najpierw zwraca najwyższą USZEREGOWANY wierszy oraz do dodawania ranking każdego wiersza na liście.Aby określić kwerendę, należy znać IDKategorii jest unikatowy kolumna klucz dla Kategorie tabela.

USE Northwind;
GO
SELECT KEY_TBL.RANK, FT_TBL.Description
FROM Categories AS FT_TBL 
     INNER JOIN
     FREETEXTTABLE(Categories, Description,
                    'How can I make my own beers and ales?') AS KEY_TBL
     ON FT_TBL.CategoryID = KEY_TBL.[KEY]
ORDER BY KEY_TBL.RANK DESC;
GO

W tym polu jest rozszerzeniem tej samej kwerendy, która zwraca tylko wiersze z wartością rangi 10 lub nowszej:

USE Northwind;
GO
SELECT KEY_TBL.RANK, FT_TBL.Description
FROM Categories FT_TBL 
     INNER JOIN
     FREETEXTTABLE (Categories, Description,
                    'How can I make my own beers and ales?') AS KEY_TBL
     ON FT_TBL.CategoryID = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK >= 10
ORDER BY KEY_TBL.RANK DESC;
GO

Za pomocą logiczny operatory — AND, OR I NOT (w CONTAINS i CONTAINSTABLE)

Predykat CONTAINS i funkcja CONTAINSTABLE używają tych samych warunkach wyszukiwania.Oba obsługuje łączenie kilku warunków wyszukiwania, przy użyciu logiczny operatory — AND, OR I NOT — do wykonywania operacji logicznych.Można użyć oraz, na przykład, aby znaleźć wiersze zawierające zarówno "latte" i "" Nowy Jork stylu bagel".Umożliwia i nie, na przykład, aby znaleźć wiersze, które zawierają "bagel", ale nie zawierają "śmietany ser".

Uwaga

Natomiast FREETEXT i FREETEXTTABLE traktują warunków logicznych jako wyrazy mają być przeszukane.

Aby uzyskać informacje o łączeniu z innymi predykatów, w których używane są operatory logiczne AND, OR i NOT, zobacz CONTAINS Search Condition (Transact-SQL).

Przykład

W poniższym przykładzie jest używana tabela ProductDescription z bazy danych AdventureWorks.W kwerendzie jest używany predykat CONTAINS w celu wyszukiwania opisów, w których wartość ID nie jest równa 5 i które zawierają zarówno wyraz „Aluminium”, jak i „spindle”. W warunku wyszukiwania jest używany operator logiczny AND.

USE AdventureWorks;
GO
SELECT Description
FROM Production.ProductDescription
WHERE ProductDescriptionID <> 5 AND
   CONTAINS(Description, ' Aluminum AND spindle');
GO

Dodatkowe zagadnienia

Each full-text enabled table has a column that is used to enforce unique rows for the table (the uniquekey column).Podczas pisania CONTAINSTABLE lub FREETEXTTABLE typ kwerendy pełnego tekstu, należy nazwę kolumna klucz unikatowego.Aby uzyskać więcej informacji zobaczJak Uzyskiwanie informacji o kolumnie klucz Full-Text (języka Transact-SQL).

Wiele warunków kwerendy dużym stopniu zależy dzielącego zachowanie.Aby upewnić się, że używasz poprawnej dzielącego (i program szukający rdzeni) i plik tezaurusa, firma Microsoft zaleca określenie argumentu LANGUAGE.Aby uzyskać więcej informacji zobaczBest Practices for Choosing a Language When Creating a Full-Text Index.

Podczas tworzenia kwerendy pełnego tekstu, aparat Full-Text odrzuca stopwords (nazywanego również słowa ignorowane) z kryteriów wyszukiwania.Stopwords są wyrazy, takie jak „, „ "i", "jest" lub "", które mogą występować często, ale które zazwyczaj nie pomagają podczas wyszukiwania określonego tekstu.Stopwords są wymienione w stoplist.Każdy indeks pełnotekstowy jest skojarzony z określonym stoplist, która określa, jakie stopwords zostały pominięte z kwerendy lub indeksu w czasie indeksowanie.Aby uzyskać więcej informacji zobaczStopwords and Stoplists.

Dopasowywanie tezaurusa występuje CONTAINS i CONTAINSTABLE Transact-SQL kwerendy, które określają klauzula THESAURUS FORMSOF i FREETEXT i FREETEXTABLE kwerendy domyślnie.