公司的电商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 ,可以得到如下结果:
至此,第一步工作算是暂时完成。