Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Tam metin sorgularını, CONTAINS deyimiyle FREETEXT ve CONTAINSTABLE yüklemlerini ve FREETEXTTABLE ile SELECT satır kümesi değerli işlevlerini kullanarak yazın. Bu makale, her koşul ve işleve örnekler sağlar ve kullanılacak en iyi koşulu seçmenize yardımcı olur.
- Kelime ve ifadeleri eşleştirmek için
CONTAINSveCONTAINSTABLEkullanın. - Anlamı eşleştirmek için, ancak tam ifadeyi değil,
FREETEXTveFREETEXTTABLEkullanın.
Her önerme ve fonksiyona örnekler
Bu makaledeki kod örnekleri, Azure Data SQL Samples Repository GitHub deposundan indirebileceğiniz , AdventureWorksDW2025, veya AdventureWorksLT2025 örnek veritabanını kullanırAdventureWorks2025.
Örnek sorguları çalıştırmak için Full-Text Arama'yı da ayarlamanız gerekir. Daha fazla bilgi için Başla Full-Text Arama bölümüne bakınız.
Örnek: CONTAINS
Aşağıdaki örnek, $80.99sözcüğünü içeren Mountain fiyatına sahip tüm ürünleri bulur:
USE AdventureWorks2025;
GO
SELECT Name,
ListPrice
FROM Production.Product
WHERE ListPrice = 80.99
AND CONTAINS ((Name), 'Mountain');
GO
Örnek: FREETEXT
Aşağıdaki örnek, vital safety componentsile ilgili sözcükleri içeren tüm belgeleri arar:
USE AdventureWorks2025;
GO
SELECT Title
FROM Production.Document
WHERE FREETEXT ((Document), 'vital safety components');
GO
Örnek: CONTAINSTABLE
Aşağıdaki örnek, Description sütununda aluminum sözcüğü, light sözcüğünün veya lightweight sözcüğünün yakınında bulunan tüm ürünlerin açıklama kimliğini ve açıklamasını döndürür. Sadece 2'den yüksek sıraya sahip satırlar geri gönderilir.
USE AdventureWorks2025;
GO
SELECT FT_TBL.ProductDescriptionID,
FT_TBL.Description,
KEY_TBL.RANK
FROM Production.ProductDescription AS FT_TBL
INNER JOIN CONTAINSTABLE (Production.ProductDescription, Description, '(light NEAR aluminum) OR
(lightweight NEAR aluminum)') AS KEY_TBL
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK > 2
ORDER BY KEY_TBL.RANK DESC;
GO
Örnek: FREETEXTTABLE
Aşağıdaki örnek, en yüksek dereceli satırları önce döndürecek ve her satırın derecesini select listesine ekleyecek şekilde bir FREETEXTTABLE sorgusunu genişletir. Benzer bir sorgu yazmak için, ProductDescriptionID öğesinin ProductDescription tablosunun benzersiz anahtar sütunu olduğunu bilmeniz gerekir.
USE AdventureWorks2025;
GO
SELECT KEY_TBL.RANK,
FT_TBL.Description
FROM Production.ProductDescription AS FT_TBL
INNER JOIN FREETEXTTABLE (Production.ProductDescription, Description, 'perfect all-around bike') AS KEY_TBL
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]
ORDER BY KEY_TBL.RANK DESC;
GO
Aynı sorgunun yalnızca 10 veya daha yüksek bir dereceye sahip satırları döndüren bir uzantısı aşağıdadır:
USE AdventureWorks2025;
GO
SELECT KEY_TBL.RANK,
FT_TBL.Description
FROM Production.ProductDescription AS FT_TBL
INNER JOIN FREETEXTTABLE (Production.ProductDescription, Description, 'perfect all-around bike') AS KEY_TBL
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK >= 10
ORDER BY KEY_TBL.RANK DESC;
GO
Sözcükleri eşleştir veya anlamı eşleştir
CONTAINS ve CONTAINSTABLE, veya FREETEXT ve FREETEXTTABLE, farklı eşleştirme türleri için faydalıdır. Aşağıdaki bilgiler, sorunuz için en iyi yüklem veya fonksiyonu seçmenize yardımcı olur:
CONTAINS ve CONTAINSTABLE
- Tek sözcükleri ve tümcecikleri kesin veya benzer (daha az hassas) eşleştirme ile eşleştirin.
- Ayrıca aşağıdakileri de yapabilirsiniz:
- Sözcüklerin belirli bir mesafedeki yakınlıklarını belirtin.
- Ağırlıklı eşleşmeleri geri getir.
- Arama koşullarını mantıksal işleçlerle birleştirin. Daha fazla bilgi için, bu makalenin ilerleyen bölümlerinde Boolean operatörlerini (AND, OR ve NOT) kullanın bölümine bakınız.
FREETEXT ve FREETEXTTABLE
- Belirtilen sözcüklerin, ifadelerin veya cümlelerin (serbest metin dizesi) tam ifadesini değil, anlamını eşleştirin.
- Belirtilen sütunun tam metin dizininde herhangi bir terim veya terim biçimi bulunursa eşleşmeler oluşturulur.
Koşul ve işlevleri karşılaştırma
CONTAINS Or FREETEXT predikatları ve CONTAINSTABLE or FREETEXTTABLE sıra-küme değerli fonksiyonların farklı sözdizimi ve seçenekleri vardır. Aşağıdaki bilgiler, sorunuz için en iyi yüklem veya fonksiyonu seçmenize yardımcı olur:
CONTAINS ve FREETEXT Koşulları
Kullanım. Bir CONTAINS ifadesinin FREETEXT veya WHERE yan tümcesinde HAVING ve SELECT tam metin yüklemlerini kullanın.
Sonuçlar.
CONTAINS ve FREETEXT yüklemleri, belirli bir satırın tam metin sorgusuyla eşleşip eşleşmediğini gösteren bir TRUE veya FALSE değeri döndürür. Eşleşen satırlar sonuç dizisinde döndürülür.
Diğer seçenekler. Yüklemleri, LIKE ve BETWEEN gibi diğer Transact-SQL yüklemleriyle birleştirebilirsiniz.
Tek bir sütun, sütun listesi veya aranacak tablodaki tüm sütunları belirtebilirsiniz.
İsteğe bağlı olarak, kaynakları tam metin sorgusu tarafından sözcük kesme ve kök oluşturma, eş anlamlılar sözlüğü aramaları ve sözcük kirliliğini kaldırma için kullanılan dili belirtebilirsiniz.
Bağlı bir sunucuda, hedef tabloların tam metin dizinli sütunlarını sorgulamak için CONTAINS veya FREETEXT yükleminde dört parçalı bir ad kullanabilirsiniz. Bir uzak sunucuyu tam metin sorguları almaya hazırlamak için, uzak sunucudaki hedef tablolarda ve sütunlarda tam metin dizini oluşturun ve ardından uzak sunucuyu bağlı sunucu olarak ekleyin.
Bu yüklemlerin sözdizimi ve argümanları hakkında daha fazla bilgi için bkz. CONTAINS ve FREETEXT.
Satır kümesi değerli fonksiyonlar CONTAINSTABLE ve FREETEXTTABLE
Kullanım.
CONTAINSTABLE deyiminin FREETEXTTABLE yan tümcesinde, tam metin FROM ve SELECT işlevlerini normal bir tablo adı gibi kullanın.
Bu işlevlerden birini kullanırken aranacak temel tabloyu belirtmeniz gerekir. Koşullarda olduğu gibi, tek bir sütun, sütun listesi veya aranacak tablodaki tüm sütunları ve isteğe bağlı olarak, kaynakları verilen tam metin sorgusu tarafından kullanılan dili belirtebilirsiniz.
Genellikle, sonuçları taban tabloyla birleştirmeniz CONTAINSTABLEFREETEXTTABLE gerekir. Tabloları birleştirmek için benzersiz anahtar sütun adını bilmeniz gerekir. Bu sütun, tam metin etkinleştirilmiş her tabloda bulunur ve tablo için benzersiz satırlar ( benzersiz anahtar sütun) zorunlu kılınır. Ana sütun hakkında daha fazla bilgi için bkz. Tam metin indeksleri oluştur ve yönet.
Sonuçlar. Bu işlevler, tam metin sorgusuyla eşleşen sıfır, bir veya daha fazla satırdan oluşan bir tablo döndürür. Döndürülen tablo yalnızca temel tablodan, işlevin tam metin arama koşulunda belirtilen seçim ölçütlerine uyan satırları içerir.
Bu fonksiyonlardan birini kullanan sorgular, döndürülen her satır için bir alaka düzeyi sıralama değeri (RANK) ve tam metin anahtarı (KEY) döner, aşağıdaki gibi:
KEYSütun.KEYsütunu, döndürülen satırların benzersiz değerlerini döndürür. SütunKEY, seçim kriterlerini belirtmek için kullanılabilir.RANKSütun. Sütun,RANKher satır için sıralama değeri döndürür; bu değer satırın seçim kriterleriyle ne kadar uyumlu olduğunu gösterir. Satırdaki metin veya belgenin derecelendirme değeri ne kadar yüksekse, satır verilen tam metin sorgusu için o kadar uygun olur. Farklı satırlar aynı şekilde sıralanabilir. İsteğe bağlı top_n_by_rank parametresini belirterek döndürülecek eşleşme sayısını sınırlayabilirsiniz. Daha fazla bilgi için, arama sonuçlarını sıralama ile sınırla.
Bu fonksiyonların sözdizimi ve argümanları hakkında daha fazla bilgi için bkz. CONTAINSTABLE ve FREETEXTTABLE.
Belirli arama türleri
Belirli bir kelime veya ifadeyi (basit terim) arayın
Belirli bir kelime veya ifadeyi bir tabloda aramak CONTAINSiçin , CONTAINSTABLE, , FREETEXTveya FREETEXTTABLE kullanabilirsiniz. Örneğin, ProductReview veritabanındaki AdventureWorks2025 tabloda bir ürünle ilgili tüm yorumları bulmak için learning curvearama yapmak isterseniz, şu ifadeyi kullanarak bu CONTAINS önlemi kullanabilirsin:
USE AdventureWorks2025;
GO
SELECT Comments
FROM Production.ProductReview
WHERE CONTAINS ((Comments), '"learning curve"');
GO
Arama koşulu, bu durumda learning curve, karmaşık olabilir ve bir veya daha fazla terimden oluşabilir.
Basit terim aramaları hakkında daha fazla bilgi
Tam metin aramasında, sözcük (veya belirteci), sınırları belirtilen dilin dil kurallarına uyarak uygun sözcük ayırıcılar tarafından tanımlanan bir dizedir. Geçerli bir tümceciği, aralarında noktalama işareti olan veya olmayan birden çok sözcüktür.
Örneğin, croissant kelimedir ve café au lait bir ifadedir. Bu tür kelimeler ve ifadeler basit terimler olarak adlandırılır.
CONTAINS ve CONTAINSTABLE, ifadenin tam eşleşmesini arar.
FREETEXT ve FREETEXTTABLE, ifadeyi ayrı kelimelere böler.
Önek içeren bir sözcük arayın (önek terimi)
Belirtilen bir önekle başlayan kelime veya ifadeleri aramak için CONTAINS veya CONTAINSTABLE kullanabilirsiniz. Belirtilen ön ek ile başlayan metin içeren sütundaki tüm girdiler döndürülür. Örneğin, top-, topple ve topping örneklerinde olduğu gibi top ön ekini içeren tüm satırları aramak için sorgu aşağıdaki örnekteki gibi görünür:
USE AdventureWorks2025;
GO
SELECT Description,
ProductDescriptionID
FROM Production.ProductDescription
WHERE CONTAINS ((Description), '"top*"');
GO
Yıldız işareti (*) döndürülmeden önce belirtilen metinle eşleşen tüm metinler. Metin ve yıldız işareti, CONTAINS (DESCRIPTION, 'top*') örneğinde olduğu gibi, çift tırnak içine alınmazsa tam metin araması yıldız işaretini joker karakter olarak değerlendirmez.
Ön ek terimi bir tümcecik olduğunda, tümceciği oluşturan her belirteç ayrı bir ön ek terimi olarak kabul edilir. Ön ek terimleriyle başlayan tüm satırlar geri döner. Örneğin, light bread* ön ek terimi, light breaded, lightly breaded veya light bread metnini içeren satırları bulur, ancak lightly toasted bread döndürmez.
Ön ek aramaları hakkında daha fazla bilgi
ön ek terimi, bir sözcüğün önüne yapıştırılan ve türev bir kelime ya da çekimli bir form oluşturmak için kullanılan bir dizeyi ifade eder.
Tek bir prefik terimi için, belirtilen terimle başlayan herhangi bir kelime sonuç kümesinin bir parçasıdır. Örneğin,
auto*terimiautomatic,automobileve benzeriyle eşleşir.Tümcecik için, tümcecik içindeki her sözcük bir ön ek terimi olarak kabul edilir. Örneğin,
auto tran*terimi,automatic transmissionveautomobile transducerile eşleşir, ancakautomatic motor transmissionile eşleşmez.
Ön ek aramaları, CONTAINS ve CONTAINSTABLE tarafından desteklenir.
Belirli bir kelimenin (nesil terimi) çekimli biçimlerini ara
Bir fiilin tüm farklı zamanlarını ve çekimlerini, bir ismin hem tekil hem çoğul biçimlerini (çekimli arama) ya da belirli bir kelimenin eş anlamlı biçimlerini (eş anlamlılar sözlüğü araması) aramak için CONTAINS, CONTAINSTABLE, FREETEXT veya FREETEXTTABLE kullanabilirsin.
Aşağıdaki örnek, foot veritabanındaki foot tablosunun feet sütununda Comments ifadesinin herhangi bir biçimini (ProductReview, AdventureWorks2025 ve benzeri) arar:
USE AdventureWorks2025;
GO
SELECT Comments,
ReviewerName
FROM Production.ProductReview
WHERE CONTAINS ((Comments), 'FORMSOF(INFLECTIONAL, "foot")');
GO
Tam metin araması, bir fiilin farklı zamanlarını ve eş zamanlılıklarını ya da bir isimdeki tekil ve çoğul formları aramanıza olanak tanıyan kökkullanır. Stemmer'lar hakkında daha fazla bilgi için Sözcük ayırıcıların ve stemmer'ların yapılandırılması ve yönetimi bölümüne bakın.
Nesil terimi aramaları hakkında daha fazla bilgi
"çekim ekleri, bir fiilin farklı zamanları ve çekimleri ya da bir ismin tekil ve çoğul formlarıdır."
Örneğin, drive kelimesinin çekim biçimini arayın. Tablodaki çeşitli satırlarda drive, drives, drove, driving ve driven sözcükleri yer alıyorsa, bunların tümü sonuç kümesinde yer alır; çünkü bunların her biri drive sözcüğünden çekim yoluyla oluşturulabilir.
FREETEXT ve FREETEXTTABLE, varsayılan olarak belirtilen tüm sözcüklerin çekimli biçimlerini arar.
CONTAINS ve CONTAINSTABLE isteğe bağlı INFLECTIONAL bir argümanı destekleyebilir.
Belirli bir sözcüğün eş anlamlılarını arama
eş anlamlılar sözlüğü terimler için kullanıcı tarafından belirtilen eş anlamlıları tanımlar. Thesaurus dosyaları hakkında daha fazla bilgi için, Thesaurus Dosyalarını Yapılandırma ve Yönet Full-Text Search bölümüne bakınız.
Örneğin, bir sözlük sözlüğüne bir giriş, {car, automobile, truck, van}, eklendiğinde, kelimenin cartezaurus formunu arayabilirsiniz. Tabloda sorgulanan ve , , automobiletruck, veya kelimeleri vancariçeren tüm satırlar sonuç kümesinde yer alır çünkü bu kelimelerin her biri kelimeyi cariçeren eşanlamlı genişletme kümesine aittir.
FREETEXT ve FREETEXTTABLE varsayılan olarak tezaurusu kullanın.
CONTAINS ve CONTAINSTABLE isteğe bağlı THESAURUS bir argümanı destekleyebilir.
Başka bir kelimeye yakın bir kelime ara.
yakınlık terimi birbirine yakın sözcükleri veya tümcecikleri gösterir. Ayrıca, ilk ve son arama terimlerini ayıran en fazla arama dışı terim sayısını belirtebilirsiniz. Ayrıca, sözcükleri veya tümcecikleri istediğiniz sırada veya bunları belirttiğiniz sırada arayabilirsiniz.
Örneğin, kelimenin ice kelimeye hockey yakın olduğu veya ifadenin ice skating ifadeye ice hockeyyakın olduğu satırları bulmak istersiniz.
Yakınlık aramaları hakkında daha fazla bilgi için NEAR ile Başka Bir Sözcüğe Yakın Sözcükleri Arama konusuna bakın.
Ağırlıklı değerler (ağırlıklı terim) kullanarak kelime veya ifadeler arayın
Kelime veya ifadeler aramak ve bir ağırlık değeri belirtmek için kullanabilirsin CONTAINSTABLE . 0,0 ile 1,0 arasında bir sayı olarak ölçülen ağırlık, bir dizi sözcük ve tümcecik içindeki her sözcüğün ve tümceciğin önemini gösterir. 0,0 ağırlığı en düşük, 1,0 ise en yüksek ağırlıktır.
Aşağıdaki örnek, ağırlıklar kullanarak tüm müşteri adreslerini arayan ve Bay dizesiyle başlayan herhangi bir metnin Street ya da View içerdiği bir sorguyu gösterir. Sonuçlar, belirtilen kelimelerin daha fazlasını içeren satırlara daha yüksek bir sıralama verir.
USE AdventureWorks2025;
GO
SELECT AddressLine1,
KEY_TBL.RANK
FROM Person.Address AS Address
INNER JOIN CONTAINSTABLE (Person.Address, AddressLine1, 'ISABOUT ("Bay*",
Street WEIGHT(0.9),
View WEIGHT(0.1)
) ') AS KEY_TBL
ON Address.AddressID = KEY_TBL.[KEY]
ORDER BY KEY_TBL.RANK DESC;
GO
Ağırlıklı terim, herhangi bir basit terim, ön ekli terimi, oluşturma terimi veya yakınlık terimiyle birlikte kullanılabilir.
Ağırlıklı terim aramaları hakkında daha fazla bilgi
Ağırlıklı terim aramasında, ağırlık değeri, bir dizi sözcük ve tümcecik içindeki her sözcük ve tümceciğin önem derecesini gösterir. Ağırlık değeri 0,0 en düşük, ağırlık değeri ise 1,0 olan en yüksek değerdir.
Örneğin, birden çok terim arayan bir sorguda, her arama sözcüğüne, arama koşulundaki diğer sözcüklere göre önemini belirten bir ağırlık değeri atayabilirsiniz. Bu tür bir sorgunun sonuçları, arama sözcüklerine atadığınız göreli ağırlığa göre önce en uygun satırları döndürür. Sonuç kümeleri, belirtilen terimlerden (veya aralarındaki içerikten) herhangi birini içeren belgeler veya satırlar içerir; ancak bazı sonuçlar, farklı aranan terimlerle ilişkili ağırlıklı değerlerdeki farklılıklar nedeniyle diğerlerinden daha alakalı kabul edilir.
Ağırlıklı terim aramaları, CONTAINSTABLE tarafından desteklenmektedir.
AND, OR ve NOT kullanma (Boole işleçleri)
CONTAINS yüklemi ve CONTAINSTABLE fonksiyonu aynı arama koşullarını kullanır. Her ikisi de mantıksal işlemleri gerçekleştirmek için Boolean operatörleri (AND, OR, ve NOT) kullanılarak birkaç arama terimini birleştirmeyi destekler. Örneğin, hem AND hem de latte içeren satırları bulmak için New York-style bagel kullanabilirsiniz. Örneğin, AND NOT içeren ancak bagel içermeyen satırları bulmak için cream cheese kullanabilirsiniz.
Buna karşılık FREETEXT , FREETEXTTABLE Boolean terimlerini aranacak kelimeler olarak ele al.
CONTAINS öğesinin AND, OR ve NOT mantıksal işleçlerini kullanan diğer yüklemlerle birleştirilmesi hakkında bilgi için Arama koşulu konusuna bakın.
Örnek
Aşağıdaki örnek, açıklama kimliği 5’e eşit olmayan ve açıklama hem CONTAINS sözcüğünü hem de Aluminum sözcüğünü içeren açıklamaları aramak için spindle predikatını kullanır. Arama koşulu Boolean AND operatörünü kullanır. Bu örnek, veritabanının ProductDescription tablosunu AdventureWorks2025 kullanır.
USE AdventureWorks2025;
GO
SELECT Description
FROM Production.ProductDescription
WHERE ProductDescriptionID <> 5
AND CONTAINS ((Description), 'aluminum AND spindle');
GO
Büyük/küçük harf, durdurma kelimeleri (stopwords), dil ve anlamdaşlar sözlüğü
Tam metin sorguları yazarken aşağıdaki seçenekleri de belirtebilirsiniz:
Büyük/küçük harf duyarlılığı. Tam metin arama sorguları büyük/küçük harfe duyarlı değildir. Ancak Japonca'da, ortografik normalleştirme kavramının büyük/küçük harf duyarsızlığına benzer olduğu birden çok fonetik ortez vardır (örneğin, kana = duyarsızlık). Bu tür ortografik normalizasyon desteklenmemektedir.
stopwords. Tam metin sorgusu tanımladığınızda, Full-Text Engine durak sözcüklerini (gürültü sözcükleri olarak da adlandırılır) arama ölçütlerinden çıkarır. Gereksiz sözcükler,
a,and,isveyathegibi, sıkça görülebilen ancak belirli bir metni ararken genellikle yardımcı olmayan kelimelerdir. Durdurma kelimeleri, bir durdurma listesinde yer alır. Her bir tam metin dizini, sorgudan veya dizin oluşturma sırasında hariç tutulan durdurma kelimelerini belirleyen belirli bir durdurma listesine bağlıdır. Daha fazla bilgi için, Full-Text Search için durak kelimeleri ve durak listelerini yapılandır ve yönet bölümünü inceleyebilirsiniz.Dil,
LANGUAGEseçeneğiyle. Birçok sorgu terimi büyük ölçüde sözcük ayırıcı davranışına bağlıdır. Doğru sözcük ayırıcısını (ve kök bulucuyu) ve thesaurus dosyasını kullandığınızdan emin olmak içinLANGUAGEseçeneğini belirtmelisiniz. Daha fazla bilgi için, tam metin indeks oluştururken bir dil seç sayfasına bakınız.Eş Anlamlılar Sözlüğü .
FREETEXTveFREETEXTTABLEsorgular varsayılan olarak tezaurusu kullanır.CONTAINSveCONTAINSTABLEisteğe bağlıTHESAURUSbir argümanı destekleyebilir. Daha fazla bilgi için bkz. Full-Text Arama için Eş Anlamlılar Sözlüğü Dosyalarını Yapılandırma ve Yönetme.
Belirteç oluşturma sonuçlarını denetleme
Bir sorguda belirli bir kelime ayırıcı, eş anlamlılar sözlüğü ve durdurma listesi birleşimini uyguladıktan sonra, sys.dm_fts_parser dinamik yönetim görünümünü kullanarak Tam Metin Araması'nın sonuçları nasıl belirteçlere ayırdığını görebilirsiniz. Daha fazla bilgi için bkz. sys.dm_fts_parser.