Omówienie funkcji i predykaty pełnego tekstu
Kwerendy pełnego tekstu służą funkcje (CONTAINSTABLE i FREETEXTTABLE) i pełnego tekstu predykatów (ZAWIERA i FREETEXT).Obsługują one rich Transact-SQL składni, który obsługuje różnorodne formy kwerendy warunków.Do pisania kwerend pełnotekstowe muszą poznać, kiedy i jak używać tych predykaty i funkcje.Ten temat zawiera podsumowanie funkcja i predykaty i omówiono commonalities między funkcja CONTAINSTABLE i predykatu ZAWIERA.
Omówienie pełnego tekstu predykaty (ZAWIERA i FREETEXT)
ZAWIERA i FREETEXT są określone w WHERE lub klauzula HAVING w instrukcja SELECT.Mogą być połączone z żadnym z drugiej Transact-SQL predykatów, takie jak LIKE i BETWEEN.
Predykaty ZAWIERA i FREETEXT zwraca wartość PRAWDA lub FAŁSZ.Można je tylko po to, aby określić kryteria dla określenia, czy dany wiersz jest zgodny z zapytanie pełnotekstowe.Zwracanych zgodnych wierszy zestaw wyników.
Używając ZAWIERA lub FREETEXT można określić pojedynczą kolumna, lista kolumn lub wszystkich kolumn w tabela mają być przeszukiwane.Opcjonalnie można określić język, którego zasoby, który będzie używany przez podane zapytanie pełnotekstowe word dzielenia i wynikające, tezaurus wyszukiwania i usuwania wyraz pomijalny.
ZAWIERA i FREETEXT przydają się do różnego rodzaju dopasowania, jak następuje:
CONTAINS (lub CONTAINSTABLE) dokładne lub rozmyty (mniej dokładne) pasuje do pojedynczych wyrazów i fraz, bliskość wyrazy w pewnej odległości od siebie lub używać ważonej dopasowań.Używając ZAWIERA, należy określić co najmniej jeden warunek wyszukiwania, która określa tekst, który wyszukiwane i warunki, które określą dopasowań.
Można użyć operacji logicznej między warunków wyszukiwania.Aby uzyskać więcej informacji, zobacz Using wartość logiczna operatorów — AND, OR I nie (w ZAWIERA i CONTAINSTABLE), dalej w tym temacie.
Użyj określonego słowa, frazy lub zdania FREETEXT (lub FREETEXTTABLE) do dopasowywania znaczenie, ale nie dokładna treść ( ciąg freetext).Dopasowuje są generowane, jeśli dowolnego terminu lub formularza każdy termin został znaleziony w indeksu pełnotekstowego określonej kolumna.
Aby wykonać serwery połączone kwerend, można użyć nazwy czteroczęściowym ZAWIERA lub FREETEXT.Aby uzyskać więcej informacji, zobacz Połączonych serwerów (wyszukiwanie pełnotekstowe).
Aby uzyskać informacje o składni i argumenty te orzeczenia, zobacz CONTAINS (Transact-SQL) i FREETEXT (Transact-SQL).
Ostrzeżenie
Predykaty pełnego tekstu nie są dozwolone w Klauzuli WYJŚCIOWEGO , gdy poziom zgodności bazy danych jest zestaw do 100.
Przykłady
A.Za pomocą ZAWIERA z <simple_term>
Następujący przykład wyszukuje wszystkie produkty o cenie $80.99 zawierających wyraz "Mountain".
USE AdventureWorks2008R2;
GO
SELECT Name, ListPrice
FROM Production.Product
WHERE ListPrice = 80.99
AND CONTAINS(Name, 'Mountain');
GO
B.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 bezpieczeństwa odnoszących się do istotnych, składniki.
USE AdventureWorks2008R2;
GO
SELECT Title
FROM Production.Document
WHERE FREETEXT (Document, 'vital safety components' );
GO
Omówienie funkcji pełnego tekstu (CONTAINSTABLE i FREETEXTTABLE)
Do funkcji CONTAINSTABLE i FREETEXTTABLE odwołuje się jak nazwy regularnych tabela w klauzula FROM instrukcja SELECT.Zwracają one tabela zero, jeden lub więcej wierszy, które odpowiadają zapytanie pełnotekstowe.Zwrócone tabela zawiera tylko wiersze tabela bazowa, spełniających kryteria określone w całym tekście warunek wyszukiwania funkcja.
Kwerendy przy użyciu jednej z tych funkcji zwracają przydatności Klasyfikacja wartość (RANGA) i pełnego tekstu klucz (klucz) dla każdego wiersza w następujący sposób:
Kolumna klucza
Kolumna klucza zwraca unikatowe wartości zwracanych wierszy.Kolumna klucza można określić kryteria wyboru.
Pozycja kolumna
Zwraca kolumna RANGI rangi wartość dla każdego wiersza, który wskazuje, jak wiersz dopasowane kryteriów wyboru.Wyższej 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ę identycznie.Można ograniczyć liczbę odpowiedników zwracane przez określenie opcjonalnej top_n_by_rank parametru.Aby uzyskać więcej informacji, zobacz Ograniczanie środkowa zestawów wyników (wyszukiwanie pełnotekstowe) i Jak wyniki kwerendy wyszukiwania są uporządkowane (wyszukiwanie pełnotekstowe).
Korzystając z tych funkcji, należy określić tabela bazowa, który ma być przeszukiwany pełnego tekstu.Podobnie jak w przypadku predykatów, można określić pojedynczą kolumna, lista kolumn lub wszystkich kolumn w tabela mają być przeszukiwane i opcjonalnie języka, którego zasoby będą używane przez zapytanie pełnotekstowe podane.
CONTAINSTABLE jest użyteczny dla tego samego rodzaju dopasowań, gdyż ZAWIERA i FREETEXTTABLE jest przydatne do tego samego rodzaju dopasowania jako FREETEXT.Aby uzyskać więcej informacji, zobacz Omówienie predykaty pełnego tekstu (ZAWIERA i FREETEXT), wcześniej w tym temacie.Podczas uruchamiania kwerendy używające funkcji CONTAINSTABLE i FREETEXTTABLE muszą wyraźnie łączyć wierszy zwracanych z wierszy w SQL Server tabela podstawowej.
Uzyskać informacje o składni i argumenty funkcji CONTAINSTABLE (Transact-SQL) i FREETEXTTABLE (Transact-SQL).
Przykłady
A.Przy użyciu CONTAINSTABLE
Poniższy przykład zwraca nazwę opis i kategorii wszystkie kategorie żywności, dla której Opis kolumna zawiera wyrazy "słodkie i savory" blisko wyrazu "sosy" lub wyraz "candies". Wszystkie wiersze z nazwą kategorii "Ryby" nie są uwzględniane.Zwracane są tylko wiersze z wartością rangi 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.Przy użyciu FREETEXTTABLE
Poniższy przykład rozszerza kwerendy FREETEXTTABLE najpierw zwrócić najwyższą wierszy środkowa i dodać do listy wybierz klasyfikację każdego wiersza.Aby określić kwerendę, należy znać, IDkategorii jest unikatowy klucz kolumna dla kategorii 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
Oto rozszerzenia samą kwerendę, która zwraca tylko wiersze z wartością rangi 10 lub większej:
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ą wartość logiczna operatorów — AND, OR I nie (w ZAWIERA i CONTAINSTABLE)
Funkcja CONTAINSTABLE i predykatu ZAWIERA używać tych samych warunków wyszukiwania.Zarówno obsługuje łączenie kilku wyszukiwania przy użyciu warunków wartość logiczna operatorów — AND, OR I nie — do wykonywania operacji logicznych.Można użyć oraz, na przykład, aby znaleźć wiersze zawierające zarówno "Kawa latte" i "Nowy Jork styl bagel".Można, A nie, na przykład aby znaleźć wiersze zawierające "bagel" ale nie zawierają "śmietana ser".
Ostrzeżenie
Natomiast Traktuj FREETEXT i FREETEXTTABLE wartość logiczna warunki jako wyrazy mają być przeszukiwane.
Informacje o łączeniu ZAWIERA z innych predykatów, w których używane są operatory logiczne AND, OR i nie, zobacz Warunek wyszukiwania (Transact-SQL).
Przykład
W poniższym przykładzie użyto ProductDescription tabela AdventureWorks2008R2 bazy danych.W kwerendzie użyto predykatu ZAWIERA opisy, w których opis identyfikator nie jest równa 5 i opis zawiera wyraz "Aluminiowa" wyszukiwania a wyraz "wrzeciona." Warunek wyszukiwania używa i operator logiczny.
USE AdventureWorks2008R2;
GO
SELECT Description
FROM Production.ProductDescription
WHERE ProductDescriptionID <> 5 AND
CONTAINS(Description, ' Aluminum AND spindle');
GO
Uwagi dodatkowe
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 typu kwerendy pełnego tekstu, należy nazwę niepowtarzalną kolumna klucz.Aby uzyskać więcej informacji, zobacz Jak Uzyskiwanie informacji o kolumnie klucza pełnotekstowego (Transact-SQL).
Wiele wyrazów kwerendy polegają na zachowanie dzielenie wyrazów.Aby zapewnić, że używasz poprawnej dzielącego (i program szukający rdzeni) i plik tezaurusa, zalecamy określić argument języka.Aby uzyskać więcej informacji, zobacz Najważniejsze wskazówki dotyczące Wybieranie języka podczas tworzenia indeksu pełnotekstowego.
Definiując zapytanie pełnotekstowe pełnotekstowe silnika odrzuca stopwords (nazywane również słowa ignorowane) z kryteriów wyszukiwania.Stopwords są wyrazy, takie jak"" "i", "jest" lub "" który może 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 zostaną pominięte w kwerendzie lub indeksu w indeksowania czas.Aby uzyskać więcej informacji, zobacz Stopwords i Stoplists.
Tezaurus dopasowywania występuje ZAWIERA i CONTAINSTABLE Transact-SQL kwerend, które określ klauzula FORMSOF, TEZAURUS i kwerend domyślnie FREETEXT i FREETEXTABLE
Zobacz także