Java開源生鮮電商平台-搜尋模組的設計與架構(源碼可下載)

來源:互聯網
上載者:User

標籤: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開源生鮮電商平台-搜尋模組的設計與架構(源碼可下載)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.