2010-08-07 24 views
7

Tam Metin Arama özelliğini kullanarak sonuçları bir tablodan döndürmek için aşağıdaki sorguyu kullanıyorum. SQL2000'de yalnızca bir tablodaki bir veya tüm sütunları aramak mümkündü. SQL 2008'de mümkün mü?SQL Server Tam Metin Arama FREETEXTTABLE birden çok sütun arama

İki tablo, (endeksli ve aynı tabloda İkisi) Sorununu ve Çözüm aramak istiyorum: Ben FREETEXTTABLE bir sütun daha kabul etmez Görebildiğimiz kadarıyla

DECLARE @topRank int set @topRank=(SELECT MAX(RANK) 
FROM FREETEXTTABLE([Support_Calls], Problem, 'test', 1)) 
SELECT [ID] AS [Call No],Company_Name, Problem, Solution, CONVERT(VARCHAR(20),CAST((CAST(ftt.RANK as DECIMAL)/@topRank * 100) AS DECIMAL(13,0))) + '%' as Match 
FROM [Support_Calls] INNER JOIN FREETEXTTABLE([Support_Calls], Problem, 'test') as ftt ON ftt.[KEY]=[ID] ORDER BY ftt.RANK DESC; 

?

cevap

12

Bunları parantez içinde belirtirsiniz; FREETEXTTABLE(tablename, (col1,col2,col3), 'expr') veya dizindeki tüm sütunları bulmak için yıldız işareti kullanın.

+1

Yıldız işareti, takdir yetkisiz kullanılırsa da, performansa zarar vermez mi? – Tobiasopdenbrouw

+1

Evet, endekste umurumda değil bir sütun varsa. –

0

From MSDN,

belirtilen metnin, bir sıfır masa, birini ya da anlamını eşleşen değerler için karakter tabanlı veri türlerini içeren bu sütunlara ilişkin daha fazla satır değil, bire bir aynısını döndürür freetext_string. FREETEXTTABLE sadece bir SELECT deyiminin FROM yan tümcesinde normal bir tablo adı gibi başvurulan olabilir. FREETEXTTABLE kullanarak yapılan sorgular, her satır için bir alaka düzeyi sıralama değeri (RANK) ve tam metin anahtarı (KEY) döndüren tam metin türü tam metin sorguları belirtir.

FREETEXTTABLE (table , { column_name | (column_list) | * } ,'freetext_string' [ , LANGUAGE language_term ] [ ,top_n_by_rank ]) 

Yani evet, Alex K. yanı söylediklerini:

Bunlar aşağıdaki sözdizimini verir.

0

Farklı sütunlarda bir FULLTEXT INDEX oluşturduysanız, bunlardan birine, hepsine veya bunlardan birine bakmak için CONTAINS veya FREETEXT öğelerini kullanabilirsiniz. Bunun gibi:

Aramak istediğiniz sütunları belirtmek isterseniz. Sonuçların bir sütunda olması gerekiyorsa, bir UNION yapmak ve aranacak her sütun için bir arama yapmak zorunda kalacaksınız.

SELECT * 
FROM YourTable 
WHERE CONTAINS(ProductName, @SearchTerm) 
UNION 
SELECT * 
FROM YourTable 
WHERE CONTAINS(ProductNumber, @SearchTerm) 
UNION 
SELECT * 
FROM YourTable 
WHERE CONTAINS(Color, @SearchTerm) 
+1

Kelimenin sadece bir kısmına ihtiyacım varsa, ancak yine de tam sözcüğü gösterirsem nasıl yaparım? Arama değeri "Curt" ise, arama sonucu "Curtain, Curtis, Curtman ..." olurdu. – Rich

İlgili konular