Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Wyszukiwania precyzyjnych lub rozmytych (mniej precyzyjnych) dopasowań do pojedynczych słów i fraz, słów w określonej odległości od siebie lub dopasowania ważonych w SQL Server. CONTAINS to predykat używany w klauzuli WHERE w instrukcji SELECT Transact-SQL do przeprowadzania pełnotekstowego wyszukiwania SQL Server na kolumnach indeksowanych w pełnym tekście zawierających znakowe typy danych.
CONTAINS może wyszukiwać:
Słowo lub zwrot.
Przedrostek słowa lub frazy.
Słowo przy innym słowie.
Słowo wygenerowane fleksyjnie od innego (na przykład słowo drive to flekcyjny rdzeń od drives, drive, driving i driven).
Słowo będące synonimem innego słowa za pomocą tezaurusa (na przykład słowo "metal" może mieć synonimy takie jak "aluminium" i "stal").
Aby uzyskać informacje na temat formularzy wyszukiwań pełnotekstowych obsługiwanych przez program SQL Server, zobacz Query with Full-Text Search.
Transact-SQL konwencje składni
Składnia
CONTAINS (
{
column_name | ( column_list )
| *
| PROPERTY ( { column_name }, 'property_name' )
}
, '<contains_search_condition>'
[ , LANGUAGE language_term ]
)
<contains_search_condition> ::=
{
<simple_term>
| <prefix_term>
| <generation_term>
| <generic_proximity_term>
| <custom_proximity_term>
| <weighted_term>
}
|
{ ( <contains_search_condition> )
[ { <AND> | <AND NOT> | <OR> } ]
<contains_search_condition> [ ...n ]
}
<simple_term> ::=
{ word | "phrase" }
<prefix term> ::=
{ "word*" | "phrase*" }
<generation_term> ::=
FORMSOF ( { INFLECTIONAL | THESAURUS } , <simple_term> [ ,...n ] )
<generic_proximity_term> ::=
{ <simple_term> | <prefix_term> } { { { NEAR | ~ }
{ <simple_term> | <prefix_term> } } [ ...n ] }
<custom_proximity_term> ::=
NEAR (
{
{ <simple_term> | <prefix_term> } [ ,...n ]
|
( { <simple_term> | <prefix_term> } [ ,...n ] )
[, <maximum_distance> [, <match_order> ] ]
}
)
<maximum_distance> ::= { integer | MAX }
<match_order> ::= { TRUE | FALSE }
<weighted_term> ::=
ISABOUT
( {
{
<simple_term>
| <prefix_term>
| <generation_term>
| <proximity_term>
}
[ WEIGHT ( weight_value ) ]
} [ ,...n ]
)
<AND> ::=
{ AND | & }
<AND NOT> ::=
{ AND NOT | &! }
<OR> ::=
{ OR | | }
Arguments
column_name
To nazwa kolumny indeksowanej w pełnym tekście w tabeli określonej w klauzuli FROM. Kolumny mogą być typu
column_list
Określa dwie lub więcej kolumn, oddzielonych przecinkami.
column_list muszą być ujęte w nawiasy. Jeśli nie określono language_term, język wszystkich kolumn column_list musi być taki sam.
*
Określa, że zapytanie przeszukuje wszystkie kolumny indeksowane w pełnym tekstie w tabeli określonej w klauzuli FROM dla danego warunku wyszukiwania. Kolumny w klauzuli CONTAINS muszą pochodzić z jednej tabeli z indeksem pełnego tekstu. Jeśli nie określono language_term, język wszystkich kolumn tabeli musi być taki sam.
WŁASNOŚĆ ( column_name , 'property_name')
Dotyczy: SQL Server 2012 (11.x) i nowsze.
Określa właściwość dokumentu, na której należy wyszukiwać określony warunek wyszukiwania.
Ważne
Aby zapytanie zwróciło dowolne wiersze, property_name musi być określone w liście właściwości wyszukiwania w indeksie pełnym tekstem, a indeks pełnego tekstu musi zawierać wpisy specyficzne dla właściwości dla property_name. Więcej informacji można znaleźć w artykule Wyszukaj dokumenty nieruchomości za pomocą Wyszukiwań w Listach Nieruchomości.
LANGUAGE_TERM JĘZYKA
Czy to język używany do łamania słów, stemmingu, rozszerzania i zastępowania tezaurusów oraz usuwania słów szumowych (lub stopwordów) jako część zapytania. Ten parametr jest opcjonalny.
Jeśli dokumenty różnych języków są przechowywane razem jako binarne duże obiekty (BLOB) w jednej kolumnie, identyfikator lokalny (LCID) danego dokumentu decyduje, w jakim języku należy indeksować jego treść. Podczas wykonywania zapytań dotyczących takiej kolumny określenie language_term LANGUAGE może zwiększyć prawdopodobieństwo dobrego dopasowania.
language_term może być określony jako ciąg ciągów, liczb całkowitych lub szesnastkowych odpowiadający LCID języka. Jeśli language_term jest określony, język, który reprezentuje, jest stosowany do wszystkich elementów warunku wyszukiwania. Jeśli nie określono żadnej wartości, używany jest język pełnotekstowy kolumny.
Gdy jest oznaczony jako ciąg znaków, language_term odpowiada wartości kolumny aliasu w widoku zgodności sys.syslanguages (Transact-SQL). Ciąg musi być ujęta w pojedynczy cudzysłów, tak jak w ciągu "language_term". Po określeniu jako liczba całkowita language_term jest rzeczywistym identyfikatorem LCID identyfikującym język. Po określeniu jako wartości szesnastkowej language_term jest 0x, a następnie wartość szesnastkowa LCID. Wartość szesnastkowa nie może przekraczać ośmiu cyfr, w tym zer wiodących.
Jeśli wartość jest w formacie zestawu znaków dwubajtowych (DBCS), program SQL Server konwertuje ją na Unicode.
Jeśli podany język nie jest poprawny lub nie zainstalowano żadnych zasobów odpowiadających temu językowi, SQL Server zwraca błąd. Aby użyć zasobów języka neutralnego, określ 0x0 jako language_term.
<
contains_search_condition>
Określa tekst do wyszukania w column_name i warunki dopasowania.
<contains_search_condition> jest Nvarchar. Niejawna konwersja występuje, gdy inny typ danych znaków jest używany jako dane wejściowe. Nie można używać dużych typów danych ciągów nvarchar(max) i varchar(max). W poniższym przykładzie zmienna @SearchWord zdefiniowana jako varchar(30)powoduje niejawną konwersję w predykacie CONTAINS.
USE AdventureWorks2022;
GO
DECLARE @SearchWord VARCHAR(30)
SET @SearchWord ='performance'
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, @SearchWord);
Ponieważ "wąchanie parametrów" nie działa w ramach konwersji, użyj nvarchar w celu uzyskania lepszej wydajności. W tym przykładzie zadeklaruj @SearchWord jako nvarchar(30).
USE AdventureWorks2022;
GO
DECLARE @SearchWord NVARCHAR(30)
SET @SearchWord = N'performance'
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, @SearchWord);
Możesz także użyć podpowiedzi OPTIMIZE FOR w przypadkach, gdy generowany jest plan nieoptymalny.
słowo
To ciąg znaków bez spacji i interpunkcji.
fraza
To jedno lub więcej słów z odstępami między każdym słowem.
Uwaga / Notatka
Niektóre języki, takie jak te zapisane w niektórych częściach Azji, mogą mieć frazy składające się z jednego lub więcej słów bez przerw między nimi.
<simple_term>
Określa dopasowanie dla dokładnego słowa lub frazy. Przykładami poprawnych prostych terminów są "blue berry", blueberry oraz "Microsoft SQL Server". Frazy powinny być otoczone podwójnymi cudzysłowami (""). Słowa w frazie muszą pojawiać się w tej samej kolejności, w jakiej jest określona w <contains_search_condition> , jak w kolumnie bazy danych. Wyszukiwanie znaków w słowie lub frazie nie jest zależne od wielkich liter. Słowa szumu (lub stopwordy) (takie jak a, and, lub the) w kolumnach indeksowanych pełnym tekstem nie są przechowywane w indeksie pełnym tekstem. Jeśli w wyszukiwaniu pojedynczego słowa użyte jest słowo szumowe, SQL Server zwraca komunikat o błędzie wskazującym, że zapytanie zawiera wyłącznie słowa szumowe. SQL Server zawiera standardową listę słów szumowych w katalogu \Mssql\Binn\FTERef każdej instancji SQL Servera.
Interpunkcja jest ignorowana. Dlatego dopasowuje CONTAINS(testing, "computer failure") wiersz do wartości "Gdzie jest mój komputer? Nieznalezienie tego byłoby kosztowne." Więcej informacji o zachowaniu łamaczy słów znajdziesz w sekcji Konfiguruj i zarządzaj łamaczami słów oraz stemmerami w wyszukiwarce.
<prefix_term>
Określa dopasowanie słów lub zwrotów zaczynających się od określonego tekstu. Umieść przedrostek w podwójnych cudzysłowach ("") i dodaj gwiazdkę (*) przed cudzysłowem końcowym, tak aby cały tekst zaczynający się od prostego terminu podanego przed gwiazdką był dopasowany. Klauzula powinna być określona w następujący sposób: CONTAINS (column, '"text*"'). Gwiazdka pasuje do zera, jednego lub więcej znaków (rdzeniowego słowa lub słów w wyrazie lub wyrażeniu). Jeśli tekst i gwiazdka nie są wyznaczone podwójnym cudzysłowem, więc predykat brzmi , CONTAINS (column, 'text*')wyszukiwanie w pełnym tekście traktuje gwiazdkę jako znak i szuka dokładnych zgodności z .text* Silnik pełnotekstowy nie znajdzie słów z gwiazdką (*), ponieważ łamacze słów zazwyczaj ignorują takie znaki.
Gdy <prefix_term> jest frazą, każde słowo zawarte w niej jest traktowane jako osobny prefiks. W związku z tym, zapytanie określające prefiks "lokalne wino*" pasuje do wszystkich wierszy z tekstem "lokalna winiarnia", "lokalnie wino i kolacja" i tak dalej.
<generation_term>
Określa dopasowanie słów, gdy zawarte proste terminy zawierają warianty oryginalnego słowa, których należy szukać.
INFLECTIONAL
Określa, że stemmer zależny od języka ma być używany na określonym prostym terminie. Zachowanie stemmerów definiuje się na podstawie reguł stemmingu każdego konkretnego języka. Język neutralny nie ma przypisanego stemmera. Język kolumn zapytywanych kolumn służy do określenia pożądanego stemmera. Jeśli language_term jest określony, używa się stemmera odpowiadającego temu językowi.
Dany <simple_term> w obrębie <generation_term> nie będzie pasował zarówno rzeczownikom, jak i czasownikom.
TEZAURUS
Określa, że używany jest tezaurus odpowiadający kolumnowemu językowi pełnotekstowemu lub język określony w zapytaniu. Najdłuższy wzór lub wzory z simple_term<> są dopasowywane do tezaurusu, a dodatkowe terminy generowane są w celu rozszerzenia lub zastąpienia oryginalnego wzoru. Jeśli nie zostanie znalezione dopasowanie dla całego lub części <simple_term>, część niedopasowana traktowana jest jako simple_term. Więcej informacji o tezaurusie wyszukiwania pełnego tekstu można znaleźć w sekcji Konfiguruj i zarządzaj plikami tezaurusa dla wyszukiwania Full-Text.
<generic_proximity_term>
Określa dopasowanie słów lub fraz, które muszą znaleźć się w przeszukiwanym dokumencie.
Ważne
Ta funkcja zostanie usunięta w przyszłej wersji programu SQL Server. Unikaj używania tej funkcji w nowych pracach programistycznych i zaplanuj modyfikowanie aplikacji, które obecnie korzystają z tej funkcji. Zalecamy korzystanie z <custom_proximity_term>.
BLISKO | ~
Oznacza, że słowo lub fraza po każdej stronie operatora NEAR lub ~ musi pojawić się w dokumencie, aby dopasowanie zostało zwrócone. Musisz podać dwa hasła wyszukiwania. Dane hasło wyszukiwania może być pojedynczym słowem lub frazą wyznaczoną podwójnym cudzysłowem ("fraza").
Kilka wyrazów bliskości można łączyć w łańcuch, jak w lub a NEAR b NEAR ca ~ b ~ c. Łańcuchowe warunki bliskości muszą być wszystkie w dokumencie, aby dopasowanie zostało zwrócone.
Na przykład CONTAINS(*column_name*, 'fox NEAR chicken') i CONTAINSTABLE(*table_name*, *column_name*, 'fox ~ chicken') oba zwracają dokumenty w podanej kolumnie, które zawierają zarówno "lis", jak i "kurczak". Dodatkowo, CONTAINSTABLE zwraca rangę dla każdego dokumentu na podstawie bliskości "lis" i "kurczak". Na przykład, jeśli dokument zawiera zdanie "Lis zjadł kurczaka", jego pozycja byłaby wysoka, ponieważ terminy są do siebie bliższe niż w innych dokumentach.
Aby uzyskać więcej informacji o ogólnych terminach bliskości, zobacz Wyszukaj słowa blisko innego słowa z NEAR.
<custom_proximity_term>
Dotyczy: SQL Server 2012 (11.x) i nowsze.
Określa dopasowanie słów lub zwrotów, a opcjonalnie maksymalną dozwoloną odległość między hasłami wyszukiwania. Możesz też określić, że hasła wyszukiwania muszą być znajdowane dokładnie w kolejności, w jakiej je podając (<match_order>).
Dane hasło wyszukiwania może być pojedynczym słowem lub frazą wyznaczoną podwójnym cudzysłowem ("fraza"). Każdy określony termin musi znaleźć się w dokumencie, aby dopasowanie zostało zwrócone. Musisz podać co najmniej dwa hasła wyszukiwania. Maksymalna liczba haseł wyszukiwania to 64.
Domyślnie niestandardowy wyraz bliskości zwraca wszystkie wiersze zawierające określone terminy, niezależnie od odległości pośredniej i ich kolejności. Na przykład, aby dopasować następujące zapytanie, dokument musiałby po prostu zawierać term1 i "term3 term4" w dowolnej kolejności:
CONTAINS(column_name, 'NEAR(term1,"term3 term4")')
Parametry opcjonalne są następujące:
<maximum_distance>
Określa maksymalną dozwoloną odległość między hasłami wyszukiwania na początku i końcu ciągu znaków, aby ten ciąg zakwalifikował się jako dopasowanie.
integer
Określa dodatnią liczbę całkowitą od 0 do 4294967295. Ta wartość decyduje, ile haseł niebędących wyszukiwaniem może pojawić się pomiędzy pierwszym a ostatnim hasłem wyszukiwania, z wyłączeniem dodatkowych określonych haseł wyszukiwania.
Na przykład następujące zapytanie szuka AA i BB, w dowolnej kolejności, w maksymalnej odległości pięciu.
CONTAINS(column_name, 'NEAR((AA,BB),5)')
Sznurek AA one two three four five BB będzie pasował. W poniższym przykładzie zapytanie określa trzy hasła wyszukiwania, AA, BB, oraz CC w maksymalnej odległości pięciu:
CONTAINS(column_name, 'NEAR((AA,BB,CC),5)')
To zapytanie odpowiadałoby następującemu ciągowi, w którym łączna odległość wynosi pięć:
BB one two CC three four five A A
Zauważ, że wewnętrzne słowo wyszukiwania, CC, nie jest liczone.
MAX
Zwraca dowolne wiersze zawierające określone terminy, niezależnie od odległości między nimi. Jest to opcja domyślna.
<match_order>
Określa, czy terminy muszą pojawić się w określonej kolejności, aby zostały zwrócone przez zapytanie wyszukiwania. Aby określić <match_order>, musisz również określić <maximum_distance>.
<match_order> przyjmuje jedną z następujących wartości:
TRUE
Egzekwuje określony porządek na określonych warunkach. Na przykład pasowałby NEAR(A,B) tylko A ... B.
FALSE
Ignoruje określoną kolejność. Na przykład dopasowałby NEAR(A,B) zarówno , A ... B jak i B ... A.
Jest to opcja domyślna.
Na przykład następujący wyraz bliskości wyszukuje słowa "Monday", "Tuesday", oraz "Wednesday" w określonej kolejności z niezależnie od odległości między nimi:
CONTAINS(column_name, 'NEAR ((Monday, Tuesday, Wednesday), MAX, TRUE)')
Aby uzyskać więcej informacji o używaniu niestandardowych haseł bliskości, zobacz Wyszukaj słowa blisko innego słowa z NEAR.
<weighted_term>
Określa, że pasujące wiersze (zwracane przez zapytanie) odpowiadają liście słów i fraz, z których każde opcjonalnie otrzymuje wartość wagową.
O TYM
Określa <weighted_term> słowo kluczowe.
WAGA(weight_value)
Określa wartość wagową, która jest liczbą od 0,0 do 1,0. Każdy element w <weighted_term> może zawierać weight_value.
weight_value sposób na zmianę, jak różne części zapytania wpływają na wartość rangi przypisaną każdemu wierszowi odpowiadającemu zapytaniu. WEIGHT nie wpływa na wyniki zapytań CONTAINS, ale WEIGHT wpływa na ranking w zapytaniach CONTAINSTABLE .
Uwaga / Notatka
Separator dziesiętny to zawsze kropka, niezależnie od lokalizacji systemu operacyjnego.
{ AND | & } | { I NIE | &! } | { LUB | | }
Określa operację logiczną pomiędzy dwoma warunkami wyszukiwania zawierającymi kryteria.
{ AND | & }
Oznacza, że warunki wyszukiwania obu zawiera muszą być spełnione, aby uzyskać dopasowanie. Symbol ampersand (&) może być używany zamiast słowa kluczowego AND, aby reprezentować operator AND.
{ I NIE | &! }
Wskazuje, że drugi warunek wyszukiwania nie może być obecny dla dopasowania. Ampersand i symbol wykrzyknika (&!) mogą być używane zamiast słowa kluczowego AND NOT, aby reprezentować operator AND NOT.
{ LUB | | }
Oznacza, że którykolwiek z tych dwóch warunków wyszukiwania musi być spełniony, aby uzyskać dopasowanie. Symbol kreskowy (|) może być używany zamiast słowa kluczowego OR do reprezentowania operatora OR.
Gdy <contains_search_condition> zawiera grupy w nawiasach, te grupy są oceniane jako pierwsze. Po ocenie grup w nawiasach, te reguły mają zastosowanie przy użyciu tych operatorów logicznych z zawiera warunki wyszukiwania:
NOT jest stosowane przed AND.
NOT może wystąpić tylko po AND, czyli w AND NOT. Operator OR NOT jest zabroniony. NOT nie może być określony przed pierwszym semestrem. Na przykład, nie
CONTAINS (mycolumn, 'NOT "phrase_to_search_for" ' )jest poprawny.AND jest stosowany przed OR.
Operatory boole'a tego samego typu (AND, OR) są asocjatywne i mogą być stosowane w dowolnej kolejności.
n
Jest zastępczym zastępczym oznaczającym, że wiele ZAWIERA warunki wyszukiwania i warunki wyszukiwania w nich można określić.
Uwagi ogólne
Predykaty i funkcje pełnotekstowe działają na pojedynczej tabeli, co jest implikowane w predykacie FROM. Aby wyszukać wiele tabel, użyj tabeli sprzężonej w klauzuli FROM, aby wyszukać zestaw wyników, który jest produktem co najmniej dwóch tabel.
Predykaty pełnotekstowe nie są dozwolone w klauzuli OUTPUT, gdy poziom zgodności bazy danych jest ustawiony na 100.
Wykonywanie zapytań względem serwerów zdalnych
Możesz użyć czteroczęściowej nazwy w predykacie CONTAINS lub FREETEXT do zapytań o kolumny indeksowanych w pełnym tekstie tabel docelowych na serwerze połączonym. Aby przygotować serwer zdalny do odbierania zapytań pełnotekstowych, utwórz indeks pełnotekstowy w tabelach docelowych i kolumnach na serwerze zdalnym, a następnie dodaj serwer zdalny jako serwer połączony.
Porównanie funkcji LIKE do wyszukiwania Full-Text
W przeciwieństwie do wyszukiwania pełnotekstowego likeTransact-SQL predykat działa tylko na wzorcach znaków. Ponadto nie można użyć predykatu LIKE do wykonywania zapytań o sformatowane dane binarne. Ponadto zapytanie LIKE względem dużej ilości danych tekstowych bez struktury jest znacznie wolniejsze niż równoważne zapytanie pełnotekstowe względem tych samych danych. Zapytanie LIKE dla milionów wierszy danych tekstowych może zająć kilka minut; natomiast pełnotekstowe zapytanie może trwać tylko kilka sekund lub mniej na tych samych danych, w zależności od liczby zwróconych wierszy i ich rozmiaru. Kolejną kwestią jest to, że LIKE wykonuje tylko prosty skan wzorców całej tabeli. Zapytanie pełne tekstu, w przeciwieństwie do tego, jest świadome języka, stosując konkretne transformacje w czasie indeksu i zapytania, takie jak filtrowanie słów stopowych oraz tworzenie tezaurusów i rozszerzeń flexyjnych. Te transformacje pomagają zapytaniam pełnym tekstem poprawić ich zapamiętywanie i ostateczną pozycję wyników.
Zapytanie do wielu kolumn (Full-Text Search)
Możesz zapytać wiele kolumn, określając listę kolumn do przeszukiwania. Kolumny muszą pochodzić z tej samej tabeli.
Na przykład, poniższe ZAWIERA wyszukiwania zapytań dla terminu Red w kolumnach i ColorName w Production.Product tabeli przykładowej bazy danych AdventureWorks2025.
Use AdventureWorks2022;
GO
SELECT Name, Color
FROM Production.Product
WHERE CONTAINS((Name, Color), 'Red');
Przykłady
A. Używając CONTAINS z <simple_term>
Poniższy przykład pokazuje wszystkie produkty o cenie , $80.99 która zawiera słowo Mountain.
USE AdventureWorks2022;
GO
SELECT Name, ListPrice
FROM Production.Product
WHERE ListPrice = 80.99
AND CONTAINS(Name, 'Mountain');
GO
B. Używając CONTAINS i frazy z <simple_term>
Poniższy przykład zwraca wszystkie iloczyny, które zawierają albo frazę Mountain , albo Road.
USE AdventureWorks2022;
GO
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, ' Mountain OR Road ')
GO
C. Używając CONTAINS z <prefix_term>
Poniższy przykład zwraca wszystkie nazwy produktów z co najmniej jednym słowem zaczynającym się od łańcucha prefiksów w kolumnie Name .
USE AdventureWorks2022;
GO
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, ' "Chain*" ');
GO
D. Używając CONTAINS i OR z <prefix_term>
Poniższy przykład zwraca wszystkie opisy kategorii zawierające ciągi z prefiksami albo chain , albo full.
USE AdventureWorks2022;
GO
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, '"chain*" OR "full*"');
GO
E. Używając CONTAINS z <proximity_term>
Dotyczy: SQL Server 2012 (11.x) i nowsze.
Poniższy przykład przeszukuje tabelę Production.ProductReview pod kątem wszystkich komentarzy zawierających słowo bike w 10 terminach słowa "control" i w określonej kolejności (czyli gdzie "bike" poprzedza "control").
USE AdventureWorks2022;
GO
SELECT Comments
FROM Production.ProductReview
WHERE CONTAINS(Comments , 'NEAR((bike,control), 10, TRUE)');
GO
F. Używając CONTAINS z <generation_term>
Poniższy przykład wyszukuje wszystkie produkty z nazwami w formie ride: riding, ridden i tak dalej.
USE AdventureWorks2022;
GO
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, ' FORMSOF (INFLECTIONAL, ride) ');
GO
G. Używając CONTAINS z <weighted_term>
Poniższy przykład wyszukuje wszystkie nazwy produktów zawierające wyrazy performance, comfortablelub smoothi różne wagi dla każdego słowa.
USE AdventureWorks2022;
GO
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, 'ISABOUT (performance weight (.8),
comfortable weight (.4), smooth weight (.2) )' );
GO
H. Używając CONTAINS ze zmiennymi
W poniższym przykładzie użyto zmiennej zamiast określonego terminu wyszukiwania.
USE AdventureWorks2022;
GO
DECLARE @SearchWord NVARCHAR(30)
SET @SearchWord = N'Performance'
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, @SearchWord);
GO
I. Używając CONTAINS z operatorem logicznym (AND)
Poniższy przykład wykorzystuje tabelę ProductDescription bazy AdventureWorks2025 danych. Zapytanie wykorzystuje predykat CONTAINS do wyszukiwania opisów, w których ID opisu nie jest równe 5, a opis zawiera zarówno słowo Aluminum , jak i słowo spindle. Warunek wyszukiwania wykorzystuje operator boolowski AND.
USE AdventureWorks2022;
GO
SELECT Description
FROM Production.ProductDescription
WHERE ProductDescriptionID <> 5 AND
CONTAINS(Description, 'Aluminum AND spindle');
GO
J. Użycie CONTAINS do weryfikacji wstawiania wiersza
Poniższy przykład wykorzystuje CONTAINS w podzapytaniu SELECT. Korzystając z bazy AdventureWorks2025 danych, zapytanie otrzymuje wartość komentarza wszystkich komentarzy w tabeli ProductReview dla danego cyklu. Warunek wyszukiwania wykorzystuje operator boolowski AND.
USE AdventureWorks2022;
GO
INSERT INTO Production.ProductReview
(ProductID, ReviewerName, EmailAddress, Rating, Comments)
VALUES
(780, 'John Smith', 'john@fourthcoffee.com', 5,
'The Mountain-200 Silver from AdventureWorks2008 Cycles meets and exceeds expectations. I enjoyed the smooth ride down the roads of Redmond');
-- Given the full-text catalog for these tables is Adv_ft_ctlg,
-- with change_tracking on so that the full-text indexes are updated automatically.
WAITFOR DELAY '00:00:30';
-- Wait 30 seconds to make sure that the full-text index gets updated.
SELECT r.Comments, p.Name
FROM Production.ProductReview AS r
JOIN Production.Product AS p
ON r.ProductID = p.ProductID
AND r.ProductID = (SELECT ProductID
FROM Production.ProductReview
WHERE CONTAINS (Comments,
' AdventureWorks2008 AND
Redmond AND
"Mountain-200 Silver" '));
GO
K. Zapytanie do własności dokumentu
Dotyczy: SQL Server 2012 (11.x) i nowsze.
Następne zapytanie wyszukuje na indeksowanej właściwości Title, w kolumnie Document tabeli Production.Document . Zapytanie zwraca tylko dokumenty, których Title własność zawiera ciąg Maintenance lub Repair.
Uwaga / Notatka
Aby wyszukiwanie właściwości zwróciło wiersze, filtr lub filtry analizujące kolumnę podczas indeksowania muszą wyodrębnić określoną właściwość. Ponadto pełny indeks tekstowy określonej tabeli musiał być skonfigurowany tak, aby zawierał tę właściwość. Więcej informacji można znaleźć w artykule Wyszukaj dokumenty nieruchomości za pomocą Wyszukiwań w Listach Nieruchomości.
Use AdventureWorks2022;
GO
SELECT Document
FROM Production.Document
WHERE CONTAINS(PROPERTY(Document,'Title'), 'Maintenance OR Repair');
GO
Zobacz też
Rozpocznij pracę z usługą Full-Text Search
Create and Manage Full-Text Catalogs (Tworzenie katalogów pełnotekstowych i zarządzanie nimi)
UTWÓRZ KATALOG PEŁNOTEKSTOWY (Transact-SQL)
STWÓRZ PEŁNOTEKSTOWY INDEKS (Transact-SQL)
tworzenie indeksów Full-Text i zarządzanie nimi
Zapytanie z Full-Text Wyszukaj
CONTAINSTABLE (Transact-SQL)
WOLNY TEKST (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
Zapytanie z Full-Text Wyszukaj
Wyszukiwanie pełnotekstowe
Tworzenie Zapytania Wyszukiwania Full-Text (Visual Database Tools)
GDZIE (Transact-SQL)
Wyszukuj właściwości dokumentu za pomocą list właściwości wyszukiwania