电商(8)

电商第八天:
回顾昨天:
分布式锁: set(key,value,nx,px,timeout)
redisson
es 安装
中文词库
java 操作es !
开启项目的时候:
service elasticsearch start
nohup ./kibana &

全文检索:
	
	1.	商品的上架 将商品的数据从mysql ---->es 中!
		1.1	用户在前台页面进行检索的时候,数据应该直接来自于es!
		1.2	因为es 中没有相应商品数据,所以我们需要将商品数据写入es!
		1.3	如何写入数据?
				ES 的dsl 语句
				PUT /INDEX/TYPE/ID
				{
					
				}
				
				Index : 如何定义? gmall
				Type :如何定义? SkuInfo  {Document Field}
						制作 mapping
						mapping 中对应的数据可以从用户检索之后展示的数据!
							skuInfo 中的默认图片,price,skuName,skuId
							
							商品名称,需要分词,并高亮
							平台属性值,三级分类Id,进行过滤
							显示:skuInfo 中的默认图片,price,skuName,skuId
							
							需要做一个聚合功能{平台属性值Id}
						
						PUT gmall
							{
							  "mappings": {
								"SkuInfo":{
								  "properties": {
									"id":{
									  "type": "keyword"
									  , "index": false
									},
									"price":{
									  "type": "double"
									},
									"skuName":{
									  "type": "text",
									  "analyzer": "ik_max_word"
									},
									"catalog3Id":{
									  "type": "keyword"
									},
									"skuDefaultImg":{
									  "type": "keyword",
									  "index": false
									},
									"skuAttrValueList":{
										"properties": {
										  "valueId":{
											"type":"keyword"
										  }
										}
									  }
								  }
								}
							  }
							}
				ID :又是谁?
					skuId
					PUT /gmall/SkuInfo/33
					{
						
					}
					PUT /gmall/SkuInfo/34
					{
						
					}
				应该适应JestClient 将数据保存到es 中!
				功能开发流程:
					mysql ----> es 上架
					
					设计到的表 skuInfo ,skuAttrValue
					bean ;不需要
					mapper:间接需要
					service,service.impl,controller
					
					SkuLsInfo 从数据库查询出来的数据封装到当前实体类中,该实体类正好对应的是 /gmall/SkuInfo es中
					
					控制器写在哪? gmall-manage-web
					
					
	2.	手动拼写 dsl 语句,并从es 中将数据进行查询出来
			查询两个入口
			京东:三级分类Id https://list.jd.com/list.html?cat=9987,653,655
				:全文检索 https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&suggest=1.his.0.0&wq=&pvid=5f56532a756f438dbc5096c7f826fca4
			
			我们项目分析:
				@ReuqestMapping("list.html")
				public String search01(String catalog3Id){
					
					// catalog3Id 查询对应的商品 保存到作用域,前台渲染!
					
					return "search";
				}
				@ReuqestMapping("list.html")
				public String search02(String keyword){
					
					// keyword 查询对应的商品 保存到作用域,前台渲染!
					
					return "search";
				}
				@ReuqestMapping("list.html")
				public String search03(String... valueId){
					
					// valueId 查询对应的商品 保存到作用域,前台渲染!
					
					return "search";
				}
				
				
				@ReuqestMapping("list.html")
				public String search01(Param param){
					
					// param 查询对应的商品 保存到作用域,前台渲染!
					
					return "search";
				}
				
				// 输入参数的实体类封装
				class Param{
					String catalog3Id,
					String keyword,
					List<String> valueId
				}
				
				
			一个是三级分类Id:
				catalog3Id , valueId
			另一个全文检索入口:
				keyword=skuName, valueId
			
			dsl 语句重点包含哪些内容:
				1.	先过滤在查询
						skuName
						catalog3Id , valueId
				2.	分页
						"from": 1 从第几条数据开始查询
						"size": 2 表示每页显示的条数
				3.	高亮显示
						"highlight": {
						"pre_tags": ["<span color='green'>"],
						"post_tags": ["</span>"], 
						"fields": {
						  "skuName": {}
						}
				4.	排序
						"sort": [
							{ 
							  "price": {
								"order": "asc"
							  }
							}
						  ]
				5.	聚合
						"aggs": {
							"groupby_attr": {
							 "terms": {
							   "field": "skuAttrValueList.valueId"
							 }
							}
						  }		
						
					完整的dsl 语句
					GET /gmall/SkuInfo/_search
						{
						  "query": {
							"bool": {
							  "filter": [{"term": {"catalog3Id": "61"}},
								 {"term": {"skuAttrValueList.valueId": "81"}}
							  ],
							  "must": [
								{"match": {
								  "skuName": "一代米"
								}}
							  ]
							}
						  },
						  "from": 0
						  , "size": 3
						  , "highlight": {
							"pre_tags": ["<span color='green'>"],
							"post_tags": ["</span>"], 
							"fields": {
							  "skuName": {}
							}
						  }
						  , "sort": [
							{ 
							  "hotScore": {
								"order": "asc"
							  }
							}
						  ]
						  , "aggs": {
							"groupby_attr": {
							 "terms": {
							   "field": "skuAttrValueList.valueId"
							 }
							}
						  }
						}
				-------------------------------------------------
						制作入力参数实体类
						输入对象:SkuLsParams
						输出对象:SkuLsResult
					
					
				-------------------从新制作一个商品,将前面的所有业务梳理一下-----------------------------
				黑色  6+64
				金色  8+128
				黑色  64+1
						
			6.	使用java 语言动态生成dsl 语句!
				bean,mapper,service,service.impl,controller
				用户输入的参数:SkuLsParams
								JestClient
				service:
				
			7.	新建一个项目gmall-list-web
				
				
				
			8.	修改虚拟域名
				upstream manage.gmall.com {
            server 192.168.67.1:8082;
    }
server {
            listen       80;
            server_name  manage.gmall.com;
            location /{
                    proxy_pass http://manage.gmall.com;
            }
    }

	upstream list.gmall.com{
            server 192.168.67.1:8086;
    }
    server {
            listen       80;
            server_name  list.gmall.com;
            location /{
                    proxy_pass http://list.gmall.com;
            }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值