尚品汇-创建ES索引库(二十七)
目录:
(1)商品检索功能介绍
(2)根据业务搭建数据结构
(3)nested 介绍
(4)搭建service-list服务
(5)构建实体与es mapping建立映射关系
(6)初始化mapping结构到es中
(1)商品检索功能介绍

根据用户输入的检索条件,查询出对应的商品
检索两个入口
首页的分类:

搜索栏:

检索列表展示页面







(2)根据业务搭建数据结构

建立mapping!
这时我们要思考三个问题:
- 哪些字段需要分词
- 例如:商品名称
- 我们用哪些字段进行过滤
- 平台属性值
- 分类Id
- 哪些字段我们需要通过搜索查询出来。
- 商品名称,价格,图片等。
以上分析的所有显示,以及分词,过滤的字段都应该在es中出现。Es中如何保存这些数据呢?
“根据上述的字段描述,应该建立一个mappings对应的存上上述字段描述的信息!”
根据以上制定出如下结构:mappings
Index:goods
type:_doc
document: properties - rows
field: id,price,title…
Es中index默认是true。
注意:ik_max_word 中文词库必须有!
attrs:平台属性值的集合,主要用于平台属性值过滤。
(3)nested 介绍

nested:类型是一种特殊的对象object数据类型(specialised version of the object datatype ),允许对象数组彼此独立地进行索引和查询。
demo: 建立一个普通的index
如果linux 中有这个my_index 先删除!DELETE /my_index


步骤1:建立一个index
PUT my_index/_doc/1
{
"group" : "fans",
"user" : [
{
"first" : "John",
"last" : "Smith"
},
{
"first" : "Alice",
"last" : "White"
}
]
}
步骤2 : 执行查询
GET my_index/_search
{
"query": {
"bool": {
"must": [
{ "match": { "user.first": "Alice" }},
{ "match": { "user.last": "Smith" }}
]
}
}
}
查询结果:

能够查询出数据的原因是因为:建立my_index 的时候,它默认的数据类型是Object

{user.first:”John ,Alice”}
{user.last:”Smith,White”}
实际上:从业务的角度出发应该没有数据: 因为
User1 {John,Smith}
User2 {Alice,White}
是两个对象 而 {Alice,Smith} 在当前的user 中不存在!
步骤3:删除当前索引
DELETE /my_index

步骤4:建立一个nested 类型的
PUT my_index
{
"mappings": {
"properties": {
"user": {
"type": "nested"
}
}
}
}
user字段映射为nested类型,而不是默认的object类型
重新执行步骤1,使用nested 查询
GET /my_index/_search
{
"query": {
"nested": {
"path": "user",
"query": {
"bool": {
"must": [
{"match": {"user.first": "Alice"}},
{"match": {"user.last": "Smith"}}
]
}
}
}
}
}
此查询得不到匹配,是因为Alice和Smith不在同一个嵌套对象中。

尽管查询的对象是一个,但是是nested存储,普通的查询不能查出来
{"match": {"user.last": "White"}} 此时就会有数据:


(4)搭建service-list服务



在service模块下搭建,搭建方式如service-item


修改配置pom.xml
添加依赖:
<dependencies><dependency><groupId>com.atguigu.gmall</groupId><artifactId>service-product-client</artifactId><version>1.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency></dependencies>
说明:
- 引入service-product-client模块
- 引入spring-boot-starter-data-elasticsearch依赖
添加配置文件
bootstrap.properties:
说明:添加es配置
spring.application.name=service-listspring.profiles.active=devspring.cloud.nacos.discovery.server-addr=192.168.200.129:8848spring.cloud.nacos.config.server-addr=192.168.200.129:8848spring.cloud.nacos.config.prefix=${spring.application.name}spring.cloud.nacos.config.file-extension=yamlspring.cloud.nacos.config.shared-configs[0].data-id=common.yaml

添加主启动类
没有用到mysql,这里需要用注解排除数据源
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@ComponentScan({"com.atguigu.gmall"})
@EnableDiscoveryClient
@EnableFeignClients(basePackages= {"com.atguigu.gmall"})
public class ServiceListApplication {public static void main(String[] args) {SpringApplication.run(ServiceListApplication.class,args);}
}
(5)构建实体与es mapping建立映射关系

package com.atguigu.gmall.model.list;@Document(indexName = "goods", shards = 3, replicas = 1)
@Data
public class Goods {@Idprivate Long id;@Field(type = FieldType.Keyword, index = false)private String defaultImg;@Field(type = FieldType.Text, analyzer = "ik_max_word")private String title;@Field(type = FieldType.Double)private Double price;@Field(type = FieldType.Date,format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss")private Date createTime; // 新品@Field(type = FieldType.Long)private Long tmId;@Field(type = FieldType.Keyword)private String tmName;@Field(type = FieldType.Keyword)private String tmLogoUrl;@Field(type = FieldType.Long)private Long category1Id;@Field(type = FieldType.Keyword)private String category1Name;@Field(type = FieldType.Long)private Long category2Id;@Field(type = FieldType.Keyword)private String category2Name;@Field(type = FieldType.Long)private Long category3Id;@Field(type = FieldType.Keyword)private String category3Name;@Field(type = FieldType.Long)private Long hotScore = 0L;@Field(type = FieldType.Nested)private List<SearchAttr> attrs;}
平台属性-平台属性值
@Data
public class SearchAttr {@Field(type = FieldType.Long)private Long attrId;@Field(type = FieldType.Keyword)private String attrName;@Field(type = FieldType.Keyword)private String attrValue;
}
(6)初始化mapping结构到es中
package com.atguigu.gmall.list.controller;
@RestController
@RequestMapping("api/list")
public class ListApiController {@Autowiredprivate ElasticsearchRestTemplate restTemplate;/*** @return*/@GetMapping("inner/createIndex")public Result createIndex() {//创建索引库restTemplate.createIndex(Goods.class);//建立mappingrestTemplate.putMapping(Goods.class);return Result.ok();}
}
在浏览器运行:

http://localhost:8203/api/list/inner/createIndex
通过kibana查看mapping


相关文章:
尚品汇-创建ES索引库(二十七)
目录: (1)商品检索功能介绍 (2)根据业务搭建数据结构 (3)nested 介绍 (4)搭建service-list服务 (5)构建实体与es mapping建立映射关系 &…...
设计模式-六大原则
概述 设计模式的六大原则是设计模式的基础,了解设计模式的原则,有利于设计模式实际应用的理解,在真实使用的时候,一般不太可能一个程序满足所有的设计模式六大原则,或多或少都会有违背设计模的地方,所以不…...
MyBatis搭建和增删改查
MyBatis是一个开源的持久层框架,用于处理数据库的增删改查操作。它能够将Java对象与数据库中的数据进行映射关系的配置,并自动生成对应的SQL语句,从而简化了数据库操作的编码工作。 MyBatis的核心思想是将SQL语句与Java代码分离,…...
【一图学技术】6.反向代理 vs API网关 vs 负载均衡的原理和使用场景
反向代理 vs API网关 vs 负载均衡 一、概念 🌏反向代理(Reverse Proxy)是一种位于服务器和客户端之间的代理服务器。 它接收来自客户端的请求,并将其转发给后端服务器,然后将后端服务器的响应返回给客户端。客…...
python爬虫番外篇 | Reuqests库高级用法(1)
文章目录 1.会话对象(Session Objects)2.请求和响应对象(Request and Response Objects)3.准备好的请求(Prepared Requests)4.SSL证书验证5.客户端证书6.CA 证书7.正文内容工作流程(Body Conten…...
【链表OJ】常见面试题 3
文章目录 1.[环形链表II](https://leetcode.cn/problems/linked-list-cycle-ii/description/)1.1 题目要求1.2 快慢指针1.3 哈希法 2.[随机链表的复制](https://leetcode.cn/problems/copy-list-with-random-pointer/description/)2.1 题目要求2.2 迭代法 1.环形链表II 1.1 题目…...
Linux学习笔记9(Linux包管理)
目录 归档包管理 归档 查看归档包 解归档包 压缩包管理 Zip/unzip gzip/gunzip bzip2/bunzip2 源码包安装软件 三大步: 预备步骤:安装依赖的编译库 一、./configure --prefix/usr/local/nginx 二、make 三、make install 软件包安装 配置…...
论文阅读《Geometric deep learning of RNA structure》
引入了机器学习方法,通过少量的数据学习。只使用原子坐标作为输入。 预测RNA三维结构比预测蛋白质结构更困难。 设计了一个原子旋转等变评分器ARES,由每个原子的三维坐标和化学元素类型(输入)指定,ARES预测模型与未知真…...
宏集方案 | 传统建筑智能化改造,迈向物联新时代
前言 智能建筑涉及多个系统的集成,如照明、空调、安防等,这些系统的兼容性和协调运作是一大挑战。然而,传统的工业建筑和商业楼宇受早期设计的局限,多个控制系统间互不兼容,并且难以重新部署通信线缆。 针对传统建筑…...
如果服务器更改Web端口会减少被攻击的风险吗?
通过更改服务器的Web端口,是否能够显著降低被攻击的风险?首先,理解Web服务默认使用的端口是关键。HTTP协议通常使用80端口,而HTTPS则默认使用443端口。这些端口因其广泛认知而成为黑客攻击的首要目标。理论上,将Web服务迁移到非标…...
vim列编辑模式
在编辑文本时,经常会有这样的需求,对特定列进行进行批量编辑。比如批量注释一段代码,或者删除待定字符(如一列空格)。幸运的是VIM支持列编辑模式。 假设文本内容: Maximum length of a custom vocabulary…...
如何实现pxe安装部署
此实验环境:rhel7主机 一、kickstart自动化安装脚本 1、安装可视化图形 [rootlocalhost ~]# yum group install "Server with GUI" 2、关闭vmware dhcp功能(编辑-虚拟网络编辑器) 3、httpd 1、安装httpd服务 [rootlocalhost …...
机器学习常见模型
1、线性模型 线性模型是机器学习最基本的算法类型,它试图学到一个通过多个特征(属性)计算的线性组合来预测的函数,简单的线性回归形式如yaxb,其中,x代表特征,而y代表结果,一旦a和b的…...
【python案例】基于Python 爬虫的房地产数据可视化分析设计与实现
引言 研究背景与意义 房地产行业在我国属于支柱性产业,在我国社会经济发展中一直扮演着重要角色。房价问题,尤其是大中城市的房价问题,一直是政府、大众和众多研究人员关注的热点。如何科学地预测房价是房价问题的研究方向之一。随着互联网…...
如何在Python中诊断和解决内存溢出问题
python的内存溢出即程序在申请内存后未能正确释放,导致随着时间推移占用的内存越来越多,以下是一些可能导致内存溢出的原因: 1、循环引用:当对象之间形成循环引用,并且这些对象定义了__del__方法时,Python…...
什么是爬虫软件?这两个爬虫神器你必须要试试
爬虫软件概述 爬虫,又称为网络爬虫或网页爬虫,是一种自动浏览互联网的程序,它按照一定的算法顺序访问网页,并从中提取有用信息。爬虫软件通常由以下几部分组成: 用户代理(User-Agent)…...
记录|MVS和VM软件使用记录
目录 前言一、常用属性二、触发模式选择三、操作注意点四、录像、抓拍功能五、VM软件六、VM软件界面介绍七、VM软件运行间隔八、VM软件图像源九、VM软件相机管理十、获取图像十一、方案存储十一、相机拍摄彩图转换颜色转换快速匹配特征模板:运行参数 十二、位置修正…...
算法通关:014_1:用栈实现队列
文章目录 题目总结代码运行结果 题目 用栈实现队列 leetcode :232 总结 时间复杂度 平均下来每个方式是O(1) 代码 class MyQueue {public Stack<Integer> in;public Stack<Integer> out;//初始化public MyQueue() {in new Stack<>();out new Stack<…...
【C#】Random
在 C# 中,Random 类的实例通常用于生成随机数。在方法内部或外部创建 Random 实例主要影响的是实例的生命周期和性能。 在方法外部创建 Random 实例 生命周期:如果在类的成员变量中创建 Random 实例,那么这个实例的生命周期将与类的实例相同…...
MongoDB简介及其在Java中的应用
什么是MongoDB? MongoDB是一个基于分布式文件存储的数据库,由C语言编写。它旨在为Web应用提供可扩展的高性能数据存储解决方案。MongoDB结合了关系数据库和非关系数据库(NoSQL)的特点,是功能最丰富、最像关系数据库的…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
