本文主要介绍在Elasticsearch中实现商品搜索功能
- Elasticsearch有默认的分词器,默认分词器只是将中文逐词分隔,并不符合我们的需求。
- 需要安装与Elasticsearch版本相同的ik分词器,ik分词器将小米手机分为小米和手机,符合我们的要求。
在商品信息实体类中用@Document、@Field等注解。对于需要中文分词的字段,我们直接使用@Field注解属性设置为ik_max_word。
先实现一个最简单的商品搜索功能,搜索包括商品名称,商品简介,商品标签中包含指定的关键字的商品和一个直接根据商品分类进行查询商品的功能
- 在SpringBoot中实现,使用Elasticsearch Repositories的衍生查询来搜索;
- 衍生查询其实原理很简单,就是将一定规则方法名称的方法转化为Elasticsearch的Query DSL语句,看完下面这张表你就懂了。
接下来我们来实现一个复杂的商品搜索,涉及到过滤、不同字段匹配权重不同以及可以进行排序。
- 首先来说下我们的需求,按输入的关键字搜索商品名称、商品简介和 商品标签,默认按相关度进行排序;
- 这里我们有一点特殊的需求,比如商品名称匹配关键字的的商品我们认为与搜索条件更匹配,其次是商品简介和商品标签,这时就需要用到查询了;
- 在Elasticsearch中搜索到文档的相关性由字段来表示的,文档的字段值越高,表示与搜索条件越匹配,而查询可以通过设置权重来影响字段值,使用它我们就可以实现上面的需求了;
- 在SpringBoot中实现,使用Elasticsearch Repositories的search方法来实现,但需要自定义查询条件QueryBuilder;
当我们查看相关商品的时候,一般底部会有一些商品推荐,这里使用Elasticsearch来简单实现下。
- 首先来说下我们的需求,可以根据指定商品的ID来查找相关商品;
- 这里我们的实现原理是这样的:首先根据ID获取指定商品信息,然后以指定商品的名称、商品简介、商品标签和分类来搜索商品,并且要过滤掉当前商品,调整搜索条件中的权重以获取最好的匹配度;
- 在SpringBoot中实现,使用Elasticsearch Repositories的search方法来实现,但需要自定义查询条件QueryBuilder;
Github
Swagger UI 文档
知识只有分享出来才有价值。如果有问题的话,可以在关于我的页面,通过我的邮箱联系我进行探讨。