天天看點

Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存

1. 關鍵字搜尋

一.需求分析

  1. 在首頁或搜尋頁輸入關鍵字,點選搜尋
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存

二.實作思路

  1. 後端使用比對查詢和布爾查詢
  2. 前端使用thymeleaf模闆渲染
  3. 前端向後端傳遞map(因為送出的不僅僅是關鍵字,還有品牌、規格、分類等資訊)
  4. 後端向前端傳回map(因為傳回的不僅僅是清單,還有商品分類、品牌和規格清單等資料)

三.內建elasticsearch進階用戶端

  1. qingcheng_service_goods工程pom.xml新增依賴
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
  2. qingcheng_service_goods工程新增工廠類
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
  3. qingcheng_service_goods工程applicationContext-service.xml新增配置
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存

四.關鍵字搜尋邏輯

  1. qingcheng_interface工程新增接口 SkuSearchService 服務接口新增方法定義
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
  2. qingcheng_service_goods工程新增服務實作類SkuSearchServiceImpl 實作此方法,實作關鍵字查詢
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
  3. qingcheng_web_portal工程新增類
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
    WebUtil類是工具類,用于字元集轉碼

五.模闆建構

  1. qingcheng_web_portal工程新增模闆,将search.htm拷貝到WEB-INF下,并進行以下修改
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
    周遊查詢結果
  2. 修改index.html的關鍵字搜尋表單
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存

2. 商品分類過濾

一.需求分析

  1. 以關鍵字作為查詢條件,查詢結果中包含的商品分類,在頁面中顯示出來
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
  2. 點選商品分類,按商品分類對結果進行過濾查詢,并且在查詢條件清單中添加已經選擇的商品分類标簽,隐藏搜尋面闆中的商品分類一行。點選條件标簽的“×”,取消該過濾條件

二.實作思路

  1. 商品分類清單的顯示使用聚合查詢
  2. 使用過濾查詢

三.商品分類清單

  1. 修改SkuSearchServiceImpl的search方法,在第一段代碼(封裝查詢請求)的末尾處添加以下代碼:
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
    在第二段代碼中添加以下代碼:
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
  2. 修改qingcheng_web_portal的search.html 商品分類清單
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存

四.分類過濾查詢

  1. 修改SkuSearchServiceImpl類的search方法,在第一段代碼(封裝查詢請求)中添加如下代碼:
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
  2. 修改SearchController的search方法,添加以下代碼
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
  3. 修改changgou_web_search的search.html 商品分類清單
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存

五.取消分類過濾

  1. 修改SearchController的search方法,添加以下代碼
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
  2. 修改search.html的條件清單部分
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
    為商品分類的div添加條件 ,判斷當查詢條件中不存在category時顯示商品分類
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存

3. 品牌過濾

一.需求分析

  1. 根據關鍵字搜尋得到的商品分類清單,按照第一個分類查詢該分類下的品牌清單

二.實作思路

  1. 資料通路層添加方法,根據商品分類名稱得到品牌清單
  2. 在搜尋商品的方法中,添加按品牌過濾的邏輯。

三.品牌清單

  1. BrandMapper接口新增方法定義
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
  2. 修改 SkuSearchServiceImpl ,注入BrandMapper
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
    修改search方法,新增代碼
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
  3. 修改search.html ,展現品牌清單
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存

四.品牌過濾查詢

  1. 修改SkuSearchServiceImpl類的search方法,添加以下代碼
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
  2. 修改模闆
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存

五.取消品牌過濾

  1. 修改search.html的條件清單部分
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
  2. 在品牌清單的div上添加條件
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
    代碼優化:修改SkuSearchServiceImpl類的search方法 ,當查詢條件中包含品牌資訊,則不查詢品牌清單
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存

4. 規格過濾

一.需求分析

  1. 根據關鍵字搜尋得到的商品分類清單,按照第一個分類查詢該分類下的規格和規格選項清單
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存

    如果使用者選擇了商品分類,按照選擇的商品分類查詢該分類下的規格和規格選項清單

    點選某規格下的規格選項,按照該規格和規格選項對結果進行過濾。

    點選條件标簽的“×”,取消該過濾條件

二.實作思路

  1. 資料通路層添加方法,根據商品分類名稱得到規格清單
  2. 在搜尋商品的方法中,添加按規格過濾的邏輯。

三.規格清單

  1. SpecMapper新增方法定義
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
  2. 修改SkuSearchServiceImpl ,引入specMapper
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
    修改search方法,新增代碼
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
  3. 修改search.html
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存

四.規格過濾查詢

  1. 對于對象類型的查詢文法:

    前後端約定:所有spec.開頭的參數都是規格

    修改SkuSearchServiceImpl類的search方法,添加以下代碼

    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
  2. 修改模闆
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存

五.取消規格過濾

  1. 修改search.html 添加條件标簽
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
  2. 在規格清單的div上添加條件
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存

5. 價格過濾

一.需求分析

  1. 點選價格區間表現,按價格區間搜尋
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
    點選條件标簽的“×”,取消該過濾條件

二.實作思路

  1. 價格區間可以在模闆中寫成固定的。
  2. 使用範圍查詢。

    需求:查詢價格大于等于10000并且小于等于20000的記錄

    範圍查詢的文法如下:

    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
    rest進階用戶端 :
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
    比較神奇的是,我們可以傳遞字元串
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
    也是可以查詢到結果,它會自動轉換類型。

三.價格條件清單

  1. 修改search.html
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存

四.價格過濾

  1. 修改SkuSearchServiceImpl類的buildBasicQuery方法,添加代碼
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存

五.取消價格過濾

  1. 修改search.html 添加條件标簽
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存
  2. 在搜尋面闆的價格一行添加條件
    Day102 Java項目 (SSM+Dubbo)商城(十一) 搜尋解決方案-2 過濾查詢1. 關鍵字搜尋2. 商品分類過濾3. 品牌過濾4. 規格過濾5. 價格過濾6. 品牌與規格清單緩存

6. 品牌與規格清單緩存

一.需求分析

  1. 現在我們每次查詢時都需要根據商品分類名稱讀取品牌和規格清單,這樣對于資料庫造成比較大的通路壓力,是以我們需要将品牌和規格清單放入緩存。

二.實作思路

  1. 方式一:定時預熱

    寫一個定時任務,每天執行一次,查詢所有的商品分類的品牌和規格清單,放入緩存

    以hash形式存儲,以分類名稱作為key,以品牌清單和規格清單作為值。

    啟動時檢測緩存中是否存在資料,如果不存在資料則立即執行緩存預熱。

  2. 方式二:随機過期

    擷取品牌和規格清單查詢緩存中是否存在資料,如果緩存中有資料則傳回緩存中的數

    據,如果沒有則查詢資料庫并放入緩存并設定過期時間,為了避免緩存雪崩,我們将過

    期時間設定為一定範圍内的随機數。

繼續閱讀