標籤:ppi derby map 運營 desc inno 顯示 ice 資料查詢
Java開源生鮮電商平台-搜尋模組的設計與架構(源碼可下載)
說明:搜尋模組針對的是買家使用者,在找菜品找的很費勁下的一種查詢方面。目前也是快速的檢索商品。
對於移動端的APP買家使用者而言,要求的速度在3秒內完成。支援模糊查詢,由於業務實戰表面,整個搜尋頻率不到18%-25%之間
同時業務也不算很大,所以並沒採用java全文檢索索引技術.(lucene等)。這裡採用的就是基本的模糊查詢。
1. 搜尋維度是思考。
1.1 買家搜尋的內容很有可能是針對菜品的本身屬性而言,所以涉及到的內容有商品名稱,商品別名,商品標籤,商品描述,規格的名稱,加工方式等。
1.2 我們知道模糊搜尋會導致索引失效,同時整個查詢效能也是有影響的。
1.3 業務形態顯示有些熱點的詞語與內容可以做JVM緩衝以提高整個單品的購買率。比如馬鈴薯現在分析出很多人要,如果我們可以跟某個商家談好,一天
需要10w斤馬鈴薯的量進行供應,那麼整個頁面會出現這個關鍵字的預設顯示。這個是後端靈活配置的。
2. 對於買家搜尋的關鍵字,我們需要資料庫進行記錄,這樣可以從系統層級算出買家會需要什麼,可以進行針對性的營銷.
相關資料庫表的設計如下:
CREATE TABLE `buyer_search` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘自動增加ID‘, `buyer_id` bigint(20) DEFAULT NULL COMMENT ‘買家ID‘, `words` bigint(20) DEFAULT NULL COMMENT ‘賣家ID‘, `create_time` datetime DEFAULT NULL COMMENT ‘建立時間‘, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘買家搜尋記錄表‘;
補充說明:目的其實是很明確的,就是記錄買家搜尋的關鍵字以便分析與研究用。為了更好的體驗使用者。
相關業務代碼如下:
/** * APP全文檢索搜尋 新 * @param request * @param response * @param keyword * @return */ @RequestMapping(value = "/search/new", method = { RequestMethod.GET, RequestMethod.POST }) public JsonResult newSearchGoods(HttpServletRequest request, HttpServletResponse response,Long userId,Long regionId,String keyword){ try{ logger.info("SearchController.search.keyword:搜尋內容:" + keyword); //搜尋結果按商家顯示 //List<SellerVo> list = sellerService.searchSeller(regionId,keyword); //搜尋結果按商品顯示 List<NewSearchVo> list = goodsService.newSearchGoods(userId,regionId,keyword); return new JsonResult(JsonResultCode.SUCCESS, "查詢資訊成功", list); }catch(Exception ex){ logger.error("[SearchController][newSearchGoods] exception :",ex); return new JsonResult(JsonResultCode.FAILURE, "系統錯誤,請稍後重試",""); } }
VO對象如下:
/** * 搜尋顯示類(APP全域搜尋) */public class NewSearchVo implements Serializable{ private static final long serialVersionUID = 1L; /** * 來源於users的ID */ private Long sellerId; /** * 店鋪名稱 */ private String sellerName; /** * 店鋪別名,可以理解為簡稱 */ private String sellerAlias; /** * 店鋪logo */ private String sellerLogo; /** * 店鋪評級,預設為0 */ private int sellerRank; /** * 店鋪評分 */ private Double sellerGrade; /** * 搜尋後商品列表 */ private List<GoodsVo> searchItemList; public Long getSellerId() { return sellerId; } public void setSellerId(Long sellerId) { this.sellerId = sellerId; } public String getSellerName() { return sellerName; } public void setSellerName(String sellerName) { this.sellerName = sellerName; } public String getSellerAlias() { return sellerAlias; } public void setSellerAlias(String sellerAlias) { this.sellerAlias = sellerAlias; } public String getSellerLogo() { return sellerLogo; } public void setSellerLogo(String sellerLogo) { this.sellerLogo = sellerLogo; } public int getSellerRank() { return sellerRank; } public void setSellerRank(int sellerRank) { this.sellerRank = sellerRank; } public Double getSellerGrade() { return sellerGrade; } public void setSellerGrade(Double sellerGrade) { this.sellerGrade = sellerGrade; } public List<GoodsVo> getSearchItemList() { return searchItemList; } public void setSearchItemList(List<GoodsVo> searchItemList) { this.searchItemList = searchItemList; }}
3, 資料查詢效能暫時的基本滿足要求,也貼出來給大家一起參考,目的是共同學習與思考.
<!-- 全域搜尋商品 新--> <select id="newSearchGoods" resultMap="newSearchResult"> <include refid="newSearchSelect" /> <include refid="newSearchFrom" /> <include refid="searchWhere" /> <if test=" keyword != null"> and (g.goods_name like concat(‘%‘,#{keyword},‘%‘) or g.goods_as like concat(‘%‘,#{keyword},‘%‘) or g.goods_label like concat(‘%‘,#{keyword},‘%‘) or g.goods_brand like concat(‘%‘,#{keyword},‘%‘) or g.goods_desc like concat(‘%‘,#{keyword},‘%‘) or gf.format_name like concat(‘%‘,#{keyword},‘%‘) or pm.method_name like concat(‘%‘,#{keyword},‘%‘) or s.seller_name like concat(‘%‘,#{keyword},‘%‘) or exists(select 1 from category where category_id = g.category_id and category_name like concat(‘%‘,#{keyword},‘%‘) ) ) </if> <include refid="searchOrderBy" /> </select>
總結,由於搜尋這塊所涉及的業務相對而言比較少,功能也比較單一,含金量不是很高,所以互相學習。
對於擴充方案,如果這塊的業務發現很大,可以採用中文分詞記錄,進行資料的挖掘,已經冷熱點資料的一個分離等等,這個後期大家有需要的話,我們再研究。
相關業務運營如下:
Java開源生鮮電商平台-搜尋模組的設計與架構(源碼可下載),如果需要下載的話,可以在我的github下面進行下載。
Java開源生鮮電商平台-搜尋模組的設計與架構(源碼可下載)