CONTAINS (Transact-SQL)
Tek sözcük ve tümcecikleri, sözcüklerin içindeki belirli bir uzaklığa bir başka yakınlık kesin veya bulanık (daha az kesin) eşleşmeler için karakter tabanlı veri türleri içeren sütunlar aramak için bir where yan tümce içinde kullanılan veya ağırlıklı yüklemi eşleşir durumda.
De SQL Server, dört içerir adlarında kullanın veya freetext karşı sorguları yürütmek için tam metin yüklemler bağlantılı sunucuları.
CONTAINS arayabilirsiniz:
Bir sözcük veya tümcecik.
Bir sözcük veya tümcecik önek.
Başka bir sözcük yakınında bir sözcük.
İnflectionally diğerinden oluşturulan bir sözcük (örneğin, sözcük sürücülerinin, gidiş, drove deyimlerin gövdesi sürücüdür ve yönlendirilen).
Yani bir eş anlamlılar sözlüğünü kullanarak başka bir sözcüğün bir eşanlamlısını a word (örneğin, word metal, alüminyum ve çelik gibi eşanlamlıları olabilir).
Sözdizimi
CONTAINS
( { column_name | ( column_list ) | * }
, '<contains_search_condition>'
[ , LANGUAGE language_term ]
)
<contains_search_condition> ::=
{ <simple_term>
| <prefix_term>
| <generation_term>
| <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 ] )
<proximity_term> ::=
{ <simple_term> | <prefix_term> }
{ { NEAR | ~ }
{ <simple_term> | <prefix_term> }
} [ ...n ]
<weighted_term> ::=
ISABOUT
( { {
<simple_term>
| <prefix_term>
| <generation_term>
| <proximity_term>
}
[ WEIGHT ( weight_value ) ]
} [ ,...n ]
)
<AND> ::=
{ AND | & }
<AND NOT> ::=
{ AND NOT | &! }
<OR> ::=
{ OR | | }
Bağımsız değişkenler
column_name
Tam metin adını from yan tümcetümcesinde belirtilen tablo sütun dizini olur.The columns can be of type char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary, or varbinary(max).column_list
Virgülle ayrılmış iki veya daha fazla sütun belirtir.column_listayraç içine alınmalıdır.Sürece language_term belirtilirse, tüm sütunları dilinin column_list aynı olmalıdır.*
Sorgu tüm tam metin dizini oluşturulmuş sütunlar için verilen arama koşulufrom yan tümce belirtilen tablo arayacak belirtir.Tam metin dizini içeren tek bir tablo içerir yan tümce sütunlarda gelmelidir.Sürece language_term belirtilmişse, tüm sütunlar tablo dilinin aynı olması gerekir.DİLlanguage_term
Sözcük bölme, dallanma, eş anlamlılar genişletme ve değiştirmeler ve etkisiz sözcük için kullanılacak dili olan (veya stopword) kaldırma sorgu bir parçası olarak.Bu parametre isteğe bağlıdır.Farklı dillerde belgeler birlikte ikili büyük nesneleri (BLOB) tek bir sütunolarak depolanır, verilen belgenin yerel ayar tanıtıcısını (LCID) içerik dizini oluşturmak için kullanmak için hangi dili belirler.Böyle bir sütunsorgularken dil belirleme language_term olasılığını artırmakiyi bir eşleşme.
language_termbir dize, tamsayı veya bir dil LCID için karşılık gelen onaltılık değeri olarak belirtilebilir.language_term Belirtilmişse, temsil ettiği dil arama koşulutüm öğeler için uygulanır.Herhangi bir değer belirtilmezse, sütun tam metin dili kullanılır.
Bir dizebelirtildiğinde language_term karşılık gelen diğer ad hesütun değeri sys.syslanguages (Transact-SQL) Uyumluluk Görünümü. dize gibi tek tırnak işareti içine alınmalıdır 'language_term'.Tamsayı belirtildiğinde language_term gerçek LCID tanıtan dili.Onaltılı değer olarak belirtildiğinde language_term 0 x onaltılık değerini ardında iseLCID.Onaltılık değeri, sekiz basamak, öndeki sıfırı dahil aşmamalıdır.
Değer (DBCS) çift baytlık karakter kümesi biçiminde ise SQL Server tarafından kendisine dönüştürülürUnicode.
Belirtilen dil geçerli veya orada değilse, hiçbir kaynak bu dile karşılık gelen yüklü olan SQL Server işlevi bir hata.Nötr Dil kaynakları kullanmak için 0x0 olarak belirtmeniz language_term.
<contains_search_condition>
İçinde aranacak metni belirtir column_name ve koşullar için eşleşir.<contains_search_condition>is nvarchar.Başka bir karakter veri türü girdi olarak kullanılan bir örtük dönüştürme gerçekleşir.Aşağıdaki örnekte, @SearchWord olarak tanımlanır, değişken varchar(30), neden bir örtük dönüştürme CONTAINS yüklemi.
USE AdventureWorks2008R2; GO DECLARE @SearchWord varchar(30) SET @SearchWord ='performance' SELECT Description FROM Production.ProductDescription WHERE CONTAINS(Description, @SearchWord);
Çünkü "parametresi algılaması" dönüştürme kullan çalışmıyor nvarchar daha iyi performans.Örnekte, bildirmek @SearchWord olarak nvarchar(30).
USE AdventureWorks2008R2; GO DECLARE @SearchWord nvarchar(30) SET @SearchWord = N'performance' SELECT Description FROM Production.ProductDescription WHERE CONTAINS(Description, @SearchWord);
En iyi duruma GETİRMEK için sorgu ipucu olmayan iyi bir plan oluşturulan durumlar için de kullanabilirsiniz.
word
Boşluk veya noktalama işareti olmadan karakter dize olan.phrase
Bir veya daha fazla sözcük arasına boşluk olur.Not
Asya, bazı bölümlerini yazılmış olanlar gibi bazı diller, aralarında boşluk içermeyen bir veya birkaç sözcük oluşan tümceleri olabilir.
<simple_term>
Tam bir sözcük veya deyim için bir eþleþmedir belirtir.Geçerli basitçe örnekler "mavi Kiraz", Yaban Mersini, ve "Microsoft SQL Server".Tümcecikleri çift tırnak içine alınmalıdır ("").Bir sözcük gerekir görünür belirtildiği gibi aynı sırada <contains_search_condition> veritabanı sütungöründükleri gibi.durum-duyarlı.Gürültü sözcükleri (veya stopwords) (gibi bir ve, veya) tam metin dizini oluşturulmuş sütun tam metin dizininde saklanmıyor.etkisiz sözcük bir tek sözcük aramasını kullanılıyorsa, SQL Server verir belirten bir hata iletisi sorgu içerir yalnızca gürültü sözcükleri.SQL Serverher örnek , dizin \Mssql\Binn\FTERef standart etkisiz sözcükler listesini içerir SQL Server.Noktalama işaretleri dikkate alınmaz.Bu nedenle, CONTAINS(testing, "computer failure") değer satırla eşleşir "Bilgisayarım nerede?Hata bulmak için pahalı olurdu." Sözcük ayırıcı davranışı üzerinde daha fazla bilgi için bkz: Word ayırıcılarını ve sözcük köklerini.
<prefix_term>
Bir eşleşme sözcüklerin belirtir veya belirtilen metni ile başlayan phrases.Bir önek terimi çift tırnak işareti içine alın ("") ve böylece tüm metin yıldız önce belirtilen basit terimi ile başlayan eşleşen Bitiş tırnağı önce yıldız işareti (*) ekleyin.Bu şekilde yan tümce belirtilmelidir: CONTAINS (column, '"text*"').Yıldız, sıfır, bir ya da daha fazla karakter (kök sözcük veya sözcükleri sözcüğün veya tümceciğin) eşleşir.Metin ve yıldız çift tırnak işaretleri arasına sınırlı değildir, bu nedenle yüklemi okur CONTAINS (column, 'text*') tam metin araması bulduğu yıldız karakteri ve tam eşleşmeleri arar, text*.Sözcük ayırıcılarını genellikle böyle karakterlerini Yoksay çünkü tam-metin arama motoru yıldız (*) karakteri içeren sözcükleri bulamaz.Zaman <prefix_term> bir terimdir ifadeye yer alan sözcüklerin ayrı bir önek. kabul edilirBu nedenle, bir önek terimi, "yerel Şarap *" belirtme sorgu "yerel Şarapçılık", "yerel olarak wined and dined", metin tüm satırlarla eşleşir ve benzeri.
<generation_term>
Bir eşleşme sözcüklerin dahil basit terimler aranacak özgün word türevlerini içerir belirtir.DEYİMLERİN
Belirtilen basit koşulu ile kullanılacak sözcük kökü ayırıcı dile bağlı olduğunu belirtir.Sözcük kökü ayırıcı davranışı dallanma belirli her dilin kurallarına göre tanımlanır.Nötr dil ilişkili bir sözcük kökü ayırıcıyok.Sorgulanan sütunları sütun dil için sözcük kökü ayırıcıistenen başvurmak için kullanılır.language_term Dil kullanılır karşılık gelen sözcük kökü ayırıcı belirtilir.Verilen a <simple_term> içinde bir <generation_term> aynı değil hem isimleri ve fiiller.
EŞ ANLAMLILAR
Karşılık gelen sütun tam metin dili veya sorguda belirtilen dilde sözlük kullanılıp kullanılmayacağını belirtir.En uzun desen veya desenlerden <simple_term> karşı Eşanlamlılar eşleştirilir ve ek koşulları genişletin veya özgün desen. değiştirmek için üretilenTümü veya bir bölümü için bir eşleşme bulunamazsa, <simple_term>, eşleşmeyen bölümü değerlendirilir bir simple_term.tam metin araması eşanlamlılar hakkında daha fazla bilgi için bkz: Eş Anlamlılar yapılandırma.<proximity_term>
Sözcük veya tümcecikleri Aranmakta belgede olması gereken bir eþleþme belirtir.and işleçgibi <proximity_term> Aranan belgede bulunması her iki arama terimleri gerektirir.YAKIN | ~
Belirten sözcük veya tümceciği near her tarafında veya ~ işleç dönecek eşleşme için belgede bulunması.Birkaç yakınlık koşulları, olarak, zincirleme a NEAR b NEAR c veya a ~ b ~ c.Zincirleme yakınlık şartları tüm belge dönecek eşleşme için olması gerekir.CONTAINSTABLE işlevkullanıldığında, yakınlık arama terimlerinin her belge sıralamasını etkiler.Karşısındaki eşleşen arama koşulları olan bir belgede belge yüksek sıralaması.Eşleşen arama terimleri olup >50 koşullarına büyüklüğü, belge üzerinde dönen rank 0'dır.
Örneğin, içerir (sütun_adı, 'fox tavuk') ve CONTAINSTABLE (table_name, sütun_adı, ' tilki ~ tavuk ') hem de tüm belgelerin hem "tilki" içeren içinde belirtilen sütun döndürür ve "tavuk".Buna ek olarak, CONTAINSTABLE "tilki" yakınlık alarak her belge için bir mertebesini verir ve "tavuk".Bir belgenin cümle varsa, örneğin, "tilki tavuk mek" kendi sıralamasını yüksek olacaktır.
YAKIN koşulları yerine, aralarındaki mutlak uzaklığı arasındaki mantıksal uzaklığı gösterir.Örneğin, koşulları farklı ifadeler içinde ya da paragraf içindeki cümleler olarak birbirinden şartları aynı tümceciğin veya gerçek yakınlıkları ne olursa olsun bir cümle daha kabul edilir, daha az oldukları varsayımı üzerinde ilgili.Benzer şekilde, farklı paragraflar koşullarında bile daha geniş olacak şekilde değerlendirilir.
<weighted_term>
(Sorgu tarafından döndürülen) eşleşen satır, sözcük ve tümcecikleri, listesini eşleşen her isteğe bağlı olarak verilen Ağırlıklandırma değeri belirtir.ISABOUT
Belirtir <weighted_term> anahtar sözcüğü.Ağırlık (weight_value)
0.0 İle 1.0 arasında bir sayı bir ağırlık değeri belirtir.Her bileşenin <weighted_term> içerebilen bir weight_value.weight_valuebir sorguyu etkiler nasıl çeşitli kısımlarını değiştirmek için bir yol sorgusuyla eşleşen her satıra atanan rütbe değerdir.Ağırlık sonuçlar sorgular içerir, ancak AĞIRLIĞI etkileri rütbe etkilemez CONTAINSTABLE sorgular.Not
Ondalık ayırıcının her zaman, işletim sistemi yerel ayarne olursa olsun noktadır.
{VE | & } | {VE DEĞİL | &! } | { OR | | }
İki ayrı saat arasındaki mantıksal bir işlemi arama koşulları içeren belirtir.VE |&
İki arama eşleştirme koşulların karşılanması gerekir içerdiğini gösterir.Ampersan simgesi (&) ve anahtar sözcük yerine, ve işleçtemsil etmek için kullanılan.VE DEĞİL | &!
İkinci arama koşulu ile eşleştirme var olmaması gerektiğini gösterir.Ve işareti ve ardından ünlem işareti simgesi (&!) ve not anahtar sözcüğünü yerine ve not işleçtemsil etmek için kullanılabilir.VEYA ||
İki ya da içerdiğini arama eşleştirme koşulların karşılanması gerekir gösterir.Çubuğu simgesi (|) kullanılabilir veya anahtar sözcük yerine veya işleçtemsil edecek.Zaman <contains_search_condition> parenthesized grupları, gruplar öncelikle değerlendirilir bu parenthesized içerir.Bu mantıksal işleçlerle kullanarak arama koşullarını içerdiğinde parenthesized gruplar değerlendirme sonrasında, bu kurallar uygulanır:
Önce uygulanmaz Between
Yalnızca sonra ve gibi ve değil ortaya.VEYA not işleç izin verilmez.İlk terim önce tarif edilemez değil.Örneğin, CONTAINS (mycolumn, 'NOT "phrase_to_search_for" ' ) geçerli değil.
VE önce uygulanan veya.
Boole işleçleri (ve, veya) aynı türden ilişkilendirilebilir ve bu nedenle herhangi bir sırada uygulanabilir.
- n
Yer tutucu birden çok arama koşulu CONTAINS ve içerdikleri şartları belirtilebilir gösteren.
Açıklamalar
Tam metin yüklemleri ve Kimden yüklemi örtülü bir tek tabloiş görür.Birden çok tabloyu aramak için birleştirilmiş bir tablo from yan tümce tümcesinde iki veya daha fazla tablo ürünü olan bir sonuç kümesi arama yapın.
Uyumluluk düzey 70'den az ise içerir bir anahtar sözcük olarak tanınmıyor.Daha fazla bilgi için, bkz. sp_dbcmptlevel (Transact-SQL).
Tam metin yüklemler içinde verilmez output yan tümce veritabanı Uyumluluk düzey olduğunda 100 küme .
Tam metin araması LIKE karşılaştırması
tam metin araması, aksine için gibi Transact-SQL yüklemi çalışır yalnızca karakter kalıplarını. Ayrıca, LIKE biçimlendirilmiş ikili veri sorgulamak için kullanamazsınız.Ayrıca, yapılandırılmamış metin veri büyük miktarda karşı benzer bir sorgu aynı verileri bir eşdeğer tam metin sorgusu daha yavaştır.Metin veri satırları milyonlarca karşı benzer bir sorgu dönmek için dakika sürebilir; tam metin sorgusu yalnızca saniye sürebilir ama daha az karşı aynı veri türüne bağlı olarak döndürülen satır sayısı.
Örnekler
A.İle CONTAINS kullanma <simple_term>
Aşağıdaki örnek, tüm ürünlerde fiyatı bulur $80.99 sözcüğü içeren "Mountain".
USE AdventureWorks2008R2;
GO
SELECT Name, ListPrice
FROM Production.Product
WHERE ListPrice = 80.99
AND CONTAINS(Name, 'Mountain');
GO
B.İÇERİR ve ifadeye kullanarak <simple_term>
Aşağıdaki örnek, tümcecik ya da içeren tüm ürünleri verir "Mountain" veya "Road".
USE AdventureWorks2008R2;
GO
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, ' "Mountain" OR "Road" ')
GO
C.İle CONTAINS kullanma <prefix_term>
Aşağıdaki örnek, tüm ürün adları önek zincirdeki başlayarak en az bir sözcükle verir Name sütun.
USE AdventureWorks2008R2;
GO
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, ' "Chain*" ');
GO
D.CONTAINS kullanma ve veya ile <prefix_term>
Aşağıdaki örnek verir, ya da öneklerle dizeler içeren tüm kategori açıklamaları "chain" veya "full".
USE AdventureWorks2008R2;
GO
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, '"chain*" OR "full*"');
GO
E.İle CONTAINS kullanma <proximity_term>
Word'ün tüm ürün adları aşağıdaki örnek verir bike yakınında sözcük performance.
USE AdventureWorks2008R2;
GO
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, 'bike NEAR performance');
GO
F.İle CONTAINS kullanma <generation_term>
Aşağıdaki örnekte arama formunun sözcükleri içeren tüm ürünler için ride: riding ridden ve böyle devam eder.
USE AdventureWorks2008R2;
GO
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, ' FORMSOF (INFLECTIONAL, ride) ');
GO
G.İle CONTAINS kullanma <weighted_term>
Aşağıdaki örnekte arama sözcüklerini içeren tüm ürün adları için performance, comfortable, veya smooth, ve farklı weightings gören her sözcük için
USE AdventureWorks2008R2;
GO
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, 'ISABOUT (performance weight (.8),
comfortable weight (.4), smooth weight (.2) )' );
GO
H.CONTAINS ile değişkenlerini kullanma
Aşağıdaki örnek bir değişken yerine belirli arama terimini kullanır.
USE AdventureWorks2008R2;
GO
DECLARE @SearchWord nvarchar(30)
SET @SearchWord = N'Performance'
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, @SearchWord);
GO
Ö.Bir mantıksal işleç (ve) CONTAINS kullanma
Aşağıdaki örnek ProductDescription tablo AdventureWorks2008R2 veritabanı.Sorgu CONTAINS tanımı kimliği 5'e eşit değil ve her iki sözcüğü "Alüminyum" açıklamasını içeren açıklamaları için arama yapmak için kullanır. "mil" sözcüğü ile arama koşulu ve Booleişleçkullanır.
USE AdventureWorks2008R2;
GO
SELECT Description
FROM Production.ProductDescription
WHERE ProductDescriptionID <> 5 AND
CONTAINS(Description, ' Aluminum AND spindle');
GO
J.Satır ekleme doğrulamak için CONTAINS kullanma
Aşağıdaki örnek, bir alt sorguselect içinde CONTAINS kullanır.Kullanarak AdventureWorks2008R2 veritabanı sorgu alır tüm yorumlar yorum değeri ProductReview tablo için belirli bir döngü.arama koşulu ve Booleişleçkullanır.
USE AdventureWorks2008R2;
GO
INSERT INTO Production.ProductReview
(ProductID, ReviewerName, EmailAddress, Rating, Comments)
VALUES
(780, 'John Smith', 'john@fourthcoffee.com', 5,
'The Mountain-200 Silver from Adventure Works 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 r
JOIN Production.Product p
ON
r.ProductID = p.ProductID
AND r.ProductID = (SELECT ProductID
FROM Production.ProductReview
WHERE CONTAINS (Comments,
' Adventure Works AND
Redmond AND
"Mountain-200 Silver" '))
GO
Ayrıca bkz.