當前位置:成語大全網 - 成語詞典 - 基於es的商品搜索功能實現(上)

基於es的商品搜索功能實現(上)

公司的電商app需要做搜索功能,分析整理後列出如下需求點:

接下來就是愉悅(tongku)的設計和coding了

商品表已經在業務庫中存在直接用,只需要設計出es索引就可以。es安裝後順帶裝上jk、pinyin插件,因為後續要用到拼音功能,不過在本階段先不管拼音的事兒。

產品表定義:

產品類對應Repository定義:

maven-pom文件增加引用

application.yml文件添加es相關配置

以上定義完成後,啟動項目,成功後可以看到如下提示(debug級別下):

如果沒有伴隨出現報錯信息(es索引配置有誤,不能創建索引時會給出相應提示),此時es中的 product 索引應該已經成功創建了。

使用es GET /demo-product/_mapping 命令可查看索引結構已經完整創建:

索引表的插入,可使用spring-boot的@Schedule定時器,以指定間隔掃描產品表的新增數據,以es對應product表的字段封裝後,插入es索引即可

此時索引表結構和數據已經準備就緒,可以開始寫查詢方法了!

我們先準備壹些測試商品數據:

?此處有壹點需要註意,由於商品品牌名稱大多為互相無關聯意義的字組成,如果使用默認分詞,會被分的很散,不符合要求,所以需要將品牌名中文部分列出來,加入到ik分詞插件的擴展詞典中去,此處不展開。

?分析壹下搜索需求,當用戶傳入搜索關鍵詞後,需要在商品名稱、描述、類目名稱和品牌名稱四個字段中做match操作,暫定互相之間的權重比為0.5:0.1:0.2:1,可使用NativeSearchQuery創建查詢方法:

?打開瀏覽器,輸入 /product/風衣%20毛衣/1/10 ,可以得到如下結果:

至此,第壹步工作算是暫時完成。