但是無論前台頁面樣式如何改變,系統內部的搜尋邏輯其實都是同一套,今天我們就來看看電商平台的搜尋原理以及常見的搜尋功能要點。
如果按照內部邏輯劃分,電商系統中的查詢通常有兩類:特定維度查詢和關鍵字查詢。
特定維度僅可查詢由系統指定的部分可屬性,如品類、品牌、**、性別、材質等,並且使用者無法輸入查詢值,僅能選擇查詢值。
由於這些資料在系統內部都維護有基礎資料,並且儲存在指定的字段中,所以對它們的查詢相對比較簡單。
使用者在選中對應選項時,可以獲得對應的唯一id,之後根據id查詢相應字段獲得結果,查詢相對比較準確。
整個搜尋功能最重要的入口,允許使用者隨意輸入要查詢的關鍵字,通常僅有乙個查詢關鍵字長度限制。
相對於特定維度查詢,關鍵字查詢相對比較複雜,下圖是搜尋的原理圖,下面來一一進行分析。
由於關鍵字查詢功能是對使用者開放的,所以使用者輸入什麼內容我們是不可控的。
我們在專案排查時經常會發現一些五花八門的關鍵字,其中有不少關鍵字比較敏感,比如涉黃、涉賭等等,這些關鍵字我們通常都會遮蔽,不進行資料搜尋。
要遮蔽對應的關鍵字,後台就需要維護一套非法詞庫,當使用者輸入的關鍵字在非法詞庫中就不再做搜尋,以減輕伺服器壓力。
網上一般有現成的詞庫可以直接匯入系統,不滿足的後台再進行維護擴充。
這是因為邏輯中有一套糾錯詞處理,當系統對比有錯誤時,會進行糾正處理。
同樣後台也需要維護了一套糾錯詞庫,當使用者輸入的關鍵字如果在糾錯詞庫中,系統會自動將錯誤關鍵字替換為設定好的關鍵字;如:阿迪斯->阿迪達斯;阿達斯->阿迪達斯,之後查詢實際採用的是轉換後的關鍵字。
有時我們在電商平台上輸入查詢關鍵字,會發現部分關鍵字結果不會跳轉到結果列表頁,而是跳轉到乙個商家店鋪主頁或者活動頁;如輸入關鍵字「阿迪達斯」,可能直接就進入到了阿迪達斯***頁面,也有可能進入阿迪達斯活動專場頁面。
要實現這個功能,後台同樣需要維護一套跳轉規則對映庫;當使用者的搜尋關鍵字與規則庫中的關鍵字匹配時,則返回規則所指定的跳轉路徑,前端頁面直接跳轉過去——通常這個跳轉規則是有時間限定的。
搜尋伺服器首先會對關鍵字進行分詞處理,然後再根據分詞進行商品查詢,並根據權重規則獲得商品權重值,之後再進行權重值排序,最後返回查詢結果。
在商品搜尋中有三個非常重要的功能:分詞、權重、以及搜尋維度。
分詞:分詞是將乙個比較長的關鍵字拆分成多個合理的比較短的關鍵字(如:阿迪達斯板鞋->阿迪達斯、板鞋、鞋);說起來只是簡單的一句話,但是能做出乙個好的分詞專案並非易事,有興趣的同學可以自己搜尋中分分詞原理,這裡就不多說。專案中我們通常會引用第三方的分詞軟體獲得分詞,之後再去商品伺服器中去查詢資料並將結果展示出來。
需要注意的是上面提到的搜尋伺服器不是常見的關係型資料庫(如mysql),而是全文檢索伺服器(如solr),一般的全文檢索伺服器也自帶有分詞功能,滿足中小型電商的分析和搜尋是沒有問題的。
搜尋維度:也就是使用者可以通過哪些屬性對商品進行搜尋; 其中基礎屬性中的品牌、品類、**都會參與搜尋,還有特殊屬性中後台明確規定參與搜尋的屬性(如果忘記了可以檢視《屬性管理》篇)。
商品搜尋伺服器會根據需要參與搜尋的屬性,對查詢出的商品資訊按各屬性進行分組統計,然後由**邏輯層進行資料整理,再由前端進行展示,最終就形成了搜尋列表的樣式。
如輸入查詢關鍵字【牛】,和牛相關的商品品類有牛肉、牛仔褲、牛油果等等,實際結果只有肉類產品。
這個主要就是不同品類的商品屬性不同,無法做到公用的效果,業務上需要作出一些取捨;所以大家平時設計產品時,需要多和技術聊聊,能達到的效果盡量實現,不能話就需要作出一些妥協。
以上就是乙個搜尋功能的核心要點,乙個看似簡單的搜尋框,其實內部是需要多個功能進行協同完成的;下次給技術要工作週期時,可不能直說我只想要個框,你就要幾周時間,以免被人笑話。
上面這幾個核心要點每個也是乙個功能要點,都需要單獨維護;除此之外還有一些功能,具體是否使用大家需要根據自己的業務來決定。
做為平台重要的資料入口,對使用者搜尋詞的統計功能有多重要就不在多說了。
通過對搜尋詞資料的統計,可以讓運營人員直觀的了解到使用者對品類、品牌、**的青睞趨勢,為後期的活動運營、市場**做好資料指導。
常見的統計維度有以下幾個:
每日、每週、以及每月的搜尋訪問量統計;
搜尋關鍵字的排名統計(組織方式:每日、最近一周、最近乙個月、每月);
各品類、各品牌的搜尋排名統計(組織方式:每日、最近一周、最近乙個月、每月);
各品類、各品牌排名佔比(組織方式:每日、最近一周、最近乙個月、每月);
各**區間的的搜尋排名統計(組織方式:每日、最近一周、最近乙個月、每月)。
在上面講解的【特定跳轉】功能上增加乙個首頁推薦詞欄位加以區分就能實現這個功能。
當使用者選中搜尋框時,下拉列表裡面會出現之前的搜尋詞,方便使用者快捷選擇。
這個只需要在使用者提交搜尋詞時,將搜尋詞儲存起來,之後再調取出來即可,功能比較簡單。
這個功能是通過呼叫【商品搜尋】功能的統計介面,實時獲得的資料並顯示前幾位的資料。
其實內部邏輯一點都沒有變,只是在原始的文字輸入之上有加了一層識別元件,通過識別元件先將內容或者語音內容轉為文字,再由文字進行搜尋查詢。
題圖來自unsplash,基於cc0協議。
搜尋框,輸入關鍵字過濾物件陣列
陣列過濾的方法最常用的就是filter,那首先先說一下filter 語法 arr.filter item,index,arr 作用 遍歷陣列arr,返回滿足條件的所有制,放到乙個新的陣列中 引數 item 陣列的每一項,index 索引下標,arr陣列自身 基本不用 返回值 滿足條件後的乙個新的陣列...
MVC過濾整個專案輸入關鍵字
第1步驟.新建過濾關鍵字實現類 processrequest using system using system.collections.generic using system.linq using system.text using system.threading using system.w...
字串練習 輸入關鍵字找歌曲
include include 要用strstr 函式來查詢字串 程式段中tracks陣列一共佔了多少字元?答 80 5 400字元。為什麼要把tracks陣列定義在函式外面?答 我們把tracks放在全域性域,全域性變數可以在所有函式中使用。為什麼要把find track 放在main 之前?答 ...