首先我覺得你對全文CONTAINSTABLE加入時需要的「ON」的條款。從微軟的網站上看到這個例子:
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
http://msdn.microsoft.com/en-us/library/ms177652.aspx
您需要的產品錶鏈接到正確的搜索結果中加入了加入條款是這樣的:
SELECT
p.Name AS 'ProductName',
m.Name AS 'Manufacturer',
r.Rank AS 'Rank'
FROM
Product p
INNER JOIN Manufacturer m ON p.ManufacturerID=m.ID
INNER JOIN CONTAINSTABLE(Product, Name, @searchQuery) AS r
ON p.ID = r.[KEY]
否則你不」 t知道結果表中的哪些行會連接到源表中的相應行。
其次,除非您使用通配符(例如'"bol*"'
),否則CONTAINS
和CONTAINSTABLE
都會返回精確的字符串匹配。即使使用通配符時,你只能使用後綴通配符,所以'"bol*"'
它會發現,與'bol'
開始的所有單詞。 '"*bol*"'
不會發現在他們'bol'
話。對於一個不準確的,模糊風格的搜索,你應該使用FREETEXT(...)
或FREETEXTTABLE(...)
。
返回零個,一個或多個行含有基於字符的數據類型爲匹配的含義值的那些列的表,但沒有確切的措辭,在指定的freetext_string文本。
http://msdn.microsoft.com/en-us/library/ms177652.aspx
,這種交易是CONTAINS
性能比FREETEXT
好了很多,FREETEXT
提供更自然的效果。
最後,如果你想從語音的SQL Server已經內置在試圖基於拼音拼寫或參數的alphanumerickey功能SOUNDEX匹配。
-- Using SOUNDEX
SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe');
Copy
----- -----
S530 S530
(1 row(s) affected)
http://msdn.microsoft.com/en-us/library/ms187384.aspx
我建議不要使用同音不過,我發現它在過去的限制,因爲探測法真的只有確保單詞發音上開始。 Soundex始終返回起始字母和數字表示的前三個輔音。這裏有更好的算法版本,可以替代soundex,參見Double Metaphone(或者您可以用作標量函數的T-SQL version of Double Metaphone)。
Soundex或DoubleMetaphone沒有內置到SQL Server Fulltext中,因此您需要手動執行搜索。
SELECT * FROM MyTable where SOUNDEX(MyColumn) = SOUNDEX('MySearchQuery')
您是否有INNER JOIN條件,您沒有粘貼? (例如AS r ON p.ID = r。[KEY]) – 2010-05-03 12:55:05