2011-08-08 68 views
1

我對你所有的SQL主控者有一個非常有趣的問題。根據字段的聯合權重排序結果

大家都知道,任何基於電子商務的購物車的主要要求之一是一個很好的搜索。

幾天後,我瞭解了MySQL全文搜索,我必須說它很安靜有趣。

我想在搜索查詢中領先一步,並且需要爲字段提供權重。這些權重將允許對搜索結果進行排序。

例如:在產品表

productid 
name 
description 
price 

「名」和「說明」字段我有以下字段是全文索引。

對於任何搜索關鍵字,查詢都應該查看兩個字段:名稱,說明。但名稱字段應該比描述字段有更多的權重。如果你還沒有很好地理解我的問題,那麼下面的例子應該有所幫助。

productid    name     description    price 
1     nice keyboard  this is a nice nice keyboard  10     
2     nice nice keyboard this is a nice nice keyboard  10     
3     keyboard   this is a nice keyboard  10     

當檢索關鍵詞是 '好',並且 '名稱' 字段具有權重:10,和 '描述' 字段已權重:1

爲產品編號:1,漂亮的被發現1(一次)在名稱中,2(兩次)的描述。所以組合權重爲(1 * 10 + 2 * 1 = 10 + 2 = 12)

對於productid:2,在名稱中找到2(兩次),在描述中找到2(兩次)。所以結合權重爲(2 * 10 + 2 * 1 = 20 + 2 = 22)

對於productid:3,在名稱中發現0(無),在描述中發現1(一次)。所以結合權重爲(0 * 10 + 1 * 1 = 0 + 1 = 1)

2個問題

(1)如何可以提供權重到特定場?我是否需要再次創建全文索引以提供權重?

(2)我需要查詢,它可以在desc中輸出結果。聯合權重的順序。

回答

1

全文搜索可以讓您搜索的相對相關:

SELECT * FROM 
(
    SELECT id, 
    (MATCH(name) AGAINST ('nice')*10) + MATCH(description) AGAINST('nice') AS relevance 
    FROM products 
    WHERE MATCH(name) AGAINST ('nice') OR 
    MATCH(description) AGAINST ('nice') 
) ORDER BY revelence DESC 

通過由10名相關相乘我已經扭曲的相關性對名稱

的得分
相關問題