Elasticsearch 6.2.2 项目应用及操作 (项目实战)————整体概述

1 需求

       商品搜索,通过关键词进行商品搜索,关键词指定商品主标题,副标题,商品类目,商品品牌关键词从es搜索出商品。如果是默认词,热词,如果有跳转连接直接跳转对应连接,如果没有从es中查询。

2 es 搜索,后台默认词,热词暂且不说

从es搜索商品首先要从数据库 把商品同步到es 里,然后才能在es中搜索

2 同步方案:

概述:主要把数据库里商品数据同步到es 里,查询的时候商品有默认顺序,就是所谓的综合排序,es 里用评分在做这个东西,根据商品的销量,商品的销售额,pv ,uv 等一些规则来给商品算出一个分,然后根据这个分数进行排序

1,可通过调度,读取mysql 数据,然后插入到es里,先全量同步,然后根据时间戳增量同步。(有点low)

2,通过binlog 进行同步,但是mysql binlog 只能单表同步,也就是说binlog 只能同步商品表,但是商品的品类,品牌变化了,不能同步,解决方案:1,在商品表增加冗余字段,然后通过binlog 单表同步数据到es,2,不想商品表冗余字段太多,单表同步,然后通过sql 查询对应的品类,品牌插入到es

3,通过官方推荐的logstash-input-jdbc插件实现mysql 同步 (项目上线会学习下)

目前公司采用的是binlog同步+调度(每天凌晨根据 销售额,pv,uv等参数算出商品分数,同步到数据库里,再同步到es )

 

3 es 查询

查询的话 主要是商品列表,再有右上角的筛选列表

分词查询(ik 分词器)

对输入的关键字进行商品列表查询

查询语法

MatchQuery (关键词跟单个索引字段进行匹配)

multiMatchQuery(关键词跟多个索引字段进行匹配)

把关键词进行分词,然后进行逐个分词结果进行匹配,分词结果跟多个字段匹配。

4 es 排序

一般商品列表都有排序功能,默认综合排序,价格排序,销量排序等

价格排序跟销量排序都好理解,但是综合排序按照什么规则呢?

es 本身有搜索评分排序(按照关键词匹配度),但是当关键词完全匹配,怎么办呢,通过业务权重来进行排序,比如商品销量,商品订单金额,pv,uv等综合算一个评分,再加上关键词匹配度进行,总评分进行排序,当然业务权重业务占比相对来说下一些,可根据业务自己算,毕竟用户搜到的关键字匹配度才是用户想要的。

商品列表综合排序规则:es 本身的关键字匹配度评分 + 业务评分

5 聚合查询:右侧筛选 列表。

比如:搜索“苹果”关键词,列表会出现苹果手机,苹果电脑,红富士苹果等商品,这时候你想再细分搜索

当分词查询完,在进行类目查询,传入类目名称,关键词 and 类目 进行查询(类目不进行分词 查询用termQuery 精确查询)

(聚合查询不进行分词),所以如果某个字段即搜索,又聚合,创建mapping 一定要注意增加如下

 

java 查询语法

客户端操作

{
  "size": 0,
  "aggs": {
    "_result": {
      "terms": {
        "field": "categoryname.keyword"
      }
    }
  }
}

这篇记录下整体概括,下一篇记录 一些具体的语法,细节(es mapping创建,es 基本查询,默认排序,es 评分,聚合)

 

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值