日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 數據庫 > Sqlserver > 搜索結果按匹配字段進行排序

搜索結果按匹配字段進行排序

來源:程序員人生   發布時間:2014-02-05 03:27:48 閱讀次數:3957次
談到搜索,一般就想起了SQL Server的FullTextSearch(全文搜索)功能,它確實強大,但使用起來也要做一些較為繁瑣的準備工作,一般小型的項目或者對搜索要求(包括性能需求)不是很高的情況下實用它還是有點太重型了。簡單的搜索用SQL查詢即可,但一般面臨的一個問題就是如何對搜索結果按匹配字段進行優先級排序

    例如有個產品表(Products),它的字段包:括產品ID產品名稱產品類別產品品牌產品簡介產品詳細介紹

字段 類型
ProdID int
ProdName nvarchar
CategoryName nvarchar
ProdBrand nvarchar
ProdIntro nvarchar
ProdDescription nvarchar

  現在我們要求通過某個關鍵字從Products表中搜索包含該關鍵字的記錄,凡是以下任何一個字段包含該關鍵字的記錄都列出來:ProdName, CategoryName , ProdBrand, ProdIntro, ProdDescription。 并且搜索結果按照前述字段的匹配優先級進行排序:

  1)先列出字段ProdName匹配關鍵字的記錄,然后列出字段CategoryName匹配關鍵字的記錄,依此類推,最后列出字段ProdDescription匹配關鍵字的記錄;

  2)在字段ProdName匹配關鍵字的所有記錄中,先列出字段CategoryName也匹配關鍵字的記錄,然后列出字段ProdBrand也匹配關鍵字的記錄,依次類推…

  3)按照規則2遞歸排序每個記錄分組……

  搜索匹配該關鍵字的所有記錄的SQL語句倒很簡單:

SELECT * from Products WHERE ProdName like ‘%KeyWord%' or CategoryName like ‘%KeyWord%' or ProdBrand like ‘%KeyWord%' or ProdIntro like ‘%KeyWord%' or ProdDescription like ‘%KeyWord%'

  但對搜索出的結果進行匹配優先級排序稍微有點困難。在用簡單的SQL進行搜索時有兩種方式來達到這個排序的目的:加權法多字段排序法(我瞎取的名字^-^)。

一、加權法

 對搜索的每條記錄計算出一個排序權值來,然后將所有搜索結果按照這個排序權值進行降序排列即可。每條被搜索出的記錄的排序權值為該記錄所有字段的權值之和。某個字段的權值取決于該字段是否匹配關鍵字,如果不匹配則為,如果匹配則為改字段的匹配權值。字段的匹配權值計算方式為:

   fieldPriority = 2的i次冥i為該字段在所有被搜索的字段優先級排序中倒排的位置

 例如,在我們示例中各字段的匹配權值為:

字段

倒排位置

匹配權值

ProdName

16

CategoryName

8

ProdBrand

4

ProdIntro

2

ProdDescription

1

    之所以采用這種算法,是為了確保某個字段匹配的記錄的排序權值不會低于另外一條不匹配該字段后續字段都匹配的記錄的排序權值。例如記錄A中僅僅ProdName匹配關鍵字,所以它的排序權值為16,而記錄B中除了字段ProdName外其他字段都匹配,則其排序權值為15(8+4+2+1=15)。但記錄A仍然會排在記錄B前面。

   相應的SQL大致如下:

SELECT *, (
                     (case when charIndex(ProdName,KeyWord)>-1 then 16 else 0 end) +
                     (case when charIndex(CategoryName,KeyWord)>-1 then 8 else 0 end) +
                     (case when charIndex(ProdBrand,KeyWord)>-1 then 4 else 0 end) +
                     (case when charIndex(ProdIntro,KeyWord)>-1 then 2 else 0 end) +
                     (case when charIndex(ProdDescription,KeyWord)>-1 then 1 else 0 end)
                  )  as OrderPriority

from Products
WHERE ProdName like ‘%KeyWord%' or
            CategoryName like ‘%KeyWord%' or
            ProdBrand like ‘%KeyWord%' or
            ProdIntro like ‘%KeyWord%' or
            ProdDescription like ‘%KeyWord%'
Order by OrderPriority desc

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 成人福利在线观看 | 中文字幕av日韩 | 亚洲人成网站b2k3cm | 91资源在线播放 | a级黄色免费看 | 国产高潮在线观看 | 日本在线观看一区 | 久久国产精品毛片 | a毛片免费视频 | 一级片免费视频 | 国产欧美一区二区精品久导航 | 亚洲专区久久 | 色综合www | 欧美激情在线精品一区二区三区 | a级片毛片 | 黄色片在线 | 欧美一级在线视频 | 精品伊人 | 欧美性猛交xxxx | 国产在线精品一区二区在线播放 | 国产特级毛片 | 天天综合网网欲色 | 五月婷婷精品 | 成人一区二区在线 | 看a网站 | 欧洲一区二区在线 | 日韩电影免费在线观看中文字幕 | 粉嫩蜜桃麻豆免费大片 | 欧美激情xxxxx | 精品久| 中文字幕超碰在线 | 五月天久久久久久九一站片 | 久草手机在线观看 | 91豆麻精品91久久久久久 | 国产伦精品一区二区 | 免费黄色小片 | 日韩亚洲视频 | 欧美在线视频播放 | 一区二区中文字幕 | 18成人在线观看 | 范冰冰一级做a爰片久久毛片 |