1. 關鍵字搜尋
一.需求分析
- 在首頁或搜尋頁輸入關鍵字,點選搜尋
二.實作思路
- 後端使用比對查詢和布爾查詢
- 前端使用thymeleaf模闆渲染
- 前端向後端傳遞map(因為送出的不僅僅是關鍵字,還有品牌、規格、分類等資訊)
- 後端向前端傳回map(因為傳回的不僅僅是清單,還有商品分類、品牌和規格清單等資料)
三.內建elasticsearch進階用戶端
- qingcheng_service_goods工程pom.xml新增依賴
- qingcheng_service_goods工程新增工廠類
- qingcheng_service_goods工程applicationContext-service.xml新增配置
四.關鍵字搜尋邏輯
- qingcheng_interface工程新增接口 SkuSearchService 服務接口新增方法定義
- qingcheng_service_goods工程新增服務實作類SkuSearchServiceImpl 實作此方法,實作關鍵字查詢
- qingcheng_web_portal工程新增類 WebUtil類是工具類,用于字元集轉碼
五.模闆建構
- qingcheng_web_portal工程新增模闆,将search.htm拷貝到WEB-INF下,并進行以下修改 周遊查詢結果
- 修改index.html的關鍵字搜尋表單
2. 商品分類過濾
一.需求分析
- 以關鍵字作為查詢條件,查詢結果中包含的商品分類,在頁面中顯示出來
- 點選商品分類,按商品分類對結果進行過濾查詢,并且在查詢條件清單中添加已經選擇的商品分類标簽,隐藏搜尋面闆中的商品分類一行。點選條件标簽的“×”,取消該過濾條件
二.實作思路
- 商品分類清單的顯示使用聚合查詢
- 使用過濾查詢
三.商品分類清單
- 修改SkuSearchServiceImpl的search方法,在第一段代碼(封裝查詢請求)的末尾處添加以下代碼: 在第二段代碼中添加以下代碼:
- 修改qingcheng_web_portal的search.html 商品分類清單
四.分類過濾查詢
- 修改SkuSearchServiceImpl類的search方法,在第一段代碼(封裝查詢請求)中添加如下代碼:
- 修改SearchController的search方法,添加以下代碼
- 修改changgou_web_search的search.html 商品分類清單
五.取消分類過濾
- 修改SearchController的search方法,添加以下代碼
- 修改search.html的條件清單部分 為商品分類的div添加條件 ,判斷當查詢條件中不存在category時顯示商品分類
3. 品牌過濾
一.需求分析
- 根據關鍵字搜尋得到的商品分類清單,按照第一個分類查詢該分類下的品牌清單
二.實作思路
- 資料通路層添加方法,根據商品分類名稱得到品牌清單
- 在搜尋商品的方法中,添加按品牌過濾的邏輯。
三.品牌清單
- BrandMapper接口新增方法定義
- 修改 SkuSearchServiceImpl ,注入BrandMapper 修改search方法,新增代碼
- 修改search.html ,展現品牌清單
四.品牌過濾查詢
- 修改SkuSearchServiceImpl類的search方法,添加以下代碼
- 修改模闆
五.取消品牌過濾
- 修改search.html的條件清單部分
- 在品牌清單的div上添加條件 代碼優化:修改SkuSearchServiceImpl類的search方法 ,當查詢條件中包含品牌資訊,則不查詢品牌清單
4. 規格過濾
一.需求分析
- 根據關鍵字搜尋得到的商品分類清單,按照第一個分類查詢該分類下的規格和規格選項清單
如果使用者選擇了商品分類,按照選擇的商品分類查詢該分類下的規格和規格選項清單
點選某規格下的規格選項,按照該規格和規格選項對結果進行過濾。
點選條件标簽的“×”,取消該過濾條件
二.實作思路
- 資料通路層添加方法,根據商品分類名稱得到規格清單
- 在搜尋商品的方法中,添加按規格過濾的邏輯。
三.規格清單
- SpecMapper新增方法定義
- 修改SkuSearchServiceImpl ,引入specMapper 修改search方法,新增代碼
- 修改search.html
四.規格過濾查詢
-
對于對象類型的查詢文法:
前後端約定:所有spec.開頭的參數都是規格
修改SkuSearchServiceImpl類的search方法,添加以下代碼
- 修改模闆
五.取消規格過濾
- 修改search.html 添加條件标簽
- 在規格清單的div上添加條件
5. 價格過濾
一.需求分析
- 點選價格區間表現,按價格區間搜尋 點選條件标簽的“×”,取消該過濾條件
二.實作思路
- 價格區間可以在模闆中寫成固定的。
-
使用範圍查詢。
需求:查詢價格大于等于10000并且小于等于20000的記錄
範圍查詢的文法如下:
rest進階用戶端 : 比較神奇的是,我們可以傳遞字元串 也是可以查詢到結果,它會自動轉換類型。
三.價格條件清單
- 修改search.html
四.價格過濾
- 修改SkuSearchServiceImpl類的buildBasicQuery方法,添加代碼
五.取消價格過濾
- 修改search.html 添加條件标簽
- 在搜尋面闆的價格一行添加條件
6. 品牌與規格清單緩存
一.需求分析
- 現在我們每次查詢時都需要根據商品分類名稱讀取品牌和規格清單,這樣對于資料庫造成比較大的通路壓力,是以我們需要将品牌和規格清單放入緩存。
二.實作思路
-
方式一:定時預熱
寫一個定時任務,每天執行一次,查詢所有的商品分類的品牌和規格清單,放入緩存
以hash形式存儲,以分類名稱作為key,以品牌清單和規格清單作為值。
啟動時檢測緩存中是否存在資料,如果不存在資料則立即執行緩存預熱。
-
方式二:随機過期
擷取品牌和規格清單查詢緩存中是否存在資料,如果緩存中有資料則傳回緩存中的數
據,如果沒有則查詢資料庫并放入緩存并設定過期時間,為了避免緩存雪崩,我們将過
期時間設定為一定範圍内的随機數。