2009-08-19 31 views
1

我在SQL Server 2008中使用全文索引。我可以說在全文搜索中,一列比另一列更重要嗎?

我似乎無法找到這個問題的答案。假設我有一個帶有「名稱」和「描述」列的表格上的全文索引。我想讓「名稱」列更重要,然後是「說明」列。

所以,如果你搜索「互聯網」名稱爲「上網本」的結果將總是在最前面無論多少OCCURENCES有在描述互聯網。它一定是可能的吧?

回答

0

你可以使用情況下,你必須分配基於搜索詞中的目標列的發生,並通過該列然後爲了一個值,列計算列添加到您的選擇列表中。因此,例如類似:

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 
+0

希望我的語法是正確的:) – 2009-08-19 08:05:12

+0

這可以明顯地如擴大至逾3箱更好地控制計算值的當它存在於兩者中時,當它存在於其中一箇中而不存在時,... – 2009-08-19 08:06:44

+0

哦。也許我不清楚,但我使用全文索引和東西。你知道「CONTAINS」和「FREETEXT」等。我從那裏得到一個排名和東西,所以我想知道是否有一些內置功能的thos。 – Olaj 2009-08-19 08:08:57

0

據我所知,沒有指定列的速率的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

1

我發現這篇文章剛纔。

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 
相關問題