我在SQL Server 2008中使用全文索引。我可以說在全文搜索中,一列比另一列更重要嗎?
我似乎無法找到這個問題的答案。假設我有一個帶有「名稱」和「描述」列的表格上的全文索引。我想讓「名稱」列更重要,然後是「說明」列。
所以,如果你搜索「互聯網」名稱爲「上網本」的結果將總是在最前面無論多少OCCURENCES有在描述互聯網。它一定是可能的吧?
我在SQL Server 2008中使用全文索引。我可以說在全文搜索中,一列比另一列更重要嗎?
我似乎無法找到這個問題的答案。假設我有一個帶有「名稱」和「描述」列的表格上的全文索引。我想讓「名稱」列更重要,然後是「說明」列。
所以,如果你搜索「互聯網」名稱爲「上網本」的結果將總是在最前面無論多少OCCURENCES有在描述互聯網。它一定是可能的吧?
你可以使用情況下,你必須分配基於搜索詞中的目標列的發生,並通過該列然後爲了一個值,列計算列添加到您的選擇列表中。因此,例如類似:
SELECT (CASE WHEN Name LIKE "%searchTerm%" THEN 10
WHEN Description LIKE "%searchTerm%" THEN 5
ELSE 0 END CASE) AS computedValue
FROM myTable
ORDER BY computedValue DESC
據我所知,沒有指定列的速率的T-SQL語法。 但你可以通過選擇技巧來獲得這個。 (假設使用FREETEXTTABLE,但你可以與其他FTS結構重寫)
SELECT CASE
WHEN ISNULL(hi_prior.RANK) low_prior.KEY
ELSE hi_prior.RANK END --hi prior is selected whenever is possible
FROM
FREETEXTTABLE (Table1, (HiPriorColumn), @query) hi_prior
FULL OUTER JOIN
FREETEXTTABLE (Table1, (LowPriorColumn), @query) low_prior
ON (hi_prior.KEY = low_prior_KEY)
如果你需要兩個結果 - 使用UNION,但乘最低的一定比率:low_prior.RANK * 0.7
我發現這篇文章剛纔。
http://www.goodercode.com/wp/?p=10
在我的代碼變成這個樣子。正如我想要的那樣工作:)感謝您的幫助!
SELECT dbo.Item.Name, dbo.Item.[Description],NAME_SRCH.RANK AS rank1, DESC_SRCH.RANK AS rank2
FROM dbo.Item LEFT OUTER JOIN
FREETEXTTABLE(dbo.Item, name, 'Firefox') NAME_SRCH ON
dbo.Item.ItemId = NAME_SRCH.[KEY] LEFT OUTER JOIN
FREETEXTTABLE(dbo.Item, *, 'Firefox') DESC_SRCH ON
dbo.Item.ItemId = DESC_SRCH.[KEY]
ORDER BY rank1 DESC, rank2 DESC
希望我的語法是正確的:) – 2009-08-19 08:05:12
這可以明顯地如擴大至逾3箱更好地控制計算值的當它存在於兩者中時,當它存在於其中一箇中而不存在時,... – 2009-08-19 08:06:44
哦。也許我不清楚,但我使用全文索引和東西。你知道「CONTAINS」和「FREETEXT」等。我從那裏得到一個排名和東西,所以我想知道是否有一些內置功能的thos。 – Olaj 2009-08-19 08:08:57