項目中的搜索模塊

項目結束也很久了,還未總結過項目中用到的技術、思想及原理,今天閒來無事,就把項目中的搜索模塊總結一把,此搜索模塊是從美麗說的搜索模塊總結出來的,而後運用到了項目當中,沒什麼高深的原理,大牛們能夠略過。數據庫

此搜索模塊的原理總結爲一句話就是:把本來應該在查詢時候執行的業務邏輯給提早到插入的時候執行,這樣的話提升了查詢效率但下降了插入效率app

廢話少說,開始…網站

搜索模塊大體有這麼幾個核心表:模糊關鍵字(ShareWord表)、系統關鍵字(ShareKeyWord表)、系統關鍵字與模糊關鍵字的中間表(ShareKeyWordMapping表),這三張表中的數據都是由網站管理員進行插入並配置好表間關係的,那麼這幾個表中有了數據以後就能夠開始咱們的搜索。設計

搜索的基礎:模糊關鍵字表(ShareWord表)中的數據就是不規則的,模糊的,不常常用的,系統關鍵字是規則的,常常用的,好比「呢大衣」就是系統關鍵字,而「尼衣」或「尼」就是模糊關鍵字,最終是要把「呢大衣」與「尼衣」、「尼」匹配起來,相似與全文檢索中的分詞搜索(Lucene.Net+盤古分詞),相似與這樣的數據就插入到了ShareWord表、ShareKeyWord表、ShareKeyWordMapping表,這樣就有了搜索的數據基礎。blog

 

搜索模塊用戶操做流程是這樣的,用戶輸入淘寶商品連接,系統根據連接獲取商品信息,以後要通過這麼四個步驟:it

1.插入該商品到ShareItem表中,獲取該ShareItem的Id,第4步要用到這個Id效率

2.在模糊關鍵字表(ShareWord)中找到該寶貝標題對應的全部模糊關鍵字(用like);基礎

3.根據模糊關鍵字匹配表(ShareKeyWordMapping)找到全部的系統關鍵字(一樣是like),找到全部的系統關鍵字後因爲多是重複的,因此須要Distinct一把;原理

4.把該商品的Id和匹配到的全部的系統關鍵字(Distinct後的)的Id插入到ShareItemKeyWord表;擴展

通過這麼四個步驟商品(ShareItem表)和ShareKeyWord表就有了關係,關係表爲ShareItemKeyWord表。

到此商品插入完畢,接下來是搜索的實現…

搜索就看起來很是簡單了,直接在ShareKeyWord表中like 網站管理員已經配置好的keyword_name ,獲取到全部的keyword_id,連接ShareItemKeyWord表獲取全部的item_id,也就獲取到了全部的ShareItem,搜索模塊完畢。

總結:

把本來應該Like全部ShareItem的title的工做變爲只like網站管理員已經提早配置好的系統關鍵字,而後根據系統關鍵字與ShareItem的匹配表獲取全部的ShareItem的Id,進而得到全部的ShareItem,經過下降插入效率來提升查詢效率這一思想同Lucene.Net的原理大體相同。依據這個原理,咱們還能夠進行擴展,好比能夠加入商品分類、商品專輯等,原理都同樣,在這裏就不一一列舉了,請各位看官見諒。

如下是數據庫簡要設計截圖。

相關文章
相關標籤/搜索