当前位置: 首页 > news >正文

尚品汇-创建ES索引库(二十七)

目录:

(1)商品检索功能介绍

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

(3)nested 介绍

(4)搭建service-list服务

(5)构建实体与es mapping建立映射关系

(6)初始化mapping结构到es中

(1)商品检索功能介绍

根据用户输入的检索条件,查询出对应的商品

检索两个入口

首页的分类:

搜索栏:

检索列表展示页面

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

建立mapping!

这时我们要思考三个问题:

  1. 哪些字段需要分词
    1.  例如:商品名称
  2. 我们用哪些字段进行过滤
    1. 平台属性值
    2. 分类Id
  3. 哪些字段我们需要通过搜索查询出来。
    1. 商品名称,价格,图片等。

以上分析的所有显示,以及分词,过滤的字段都应该在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"}}

          ]

        }

      }

    }

  }

}

此查询得不到匹配,是因为AliceSmith不在同一个嵌套对象中。

尽管查询的对象是一个,但是是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>

说明:

  1. 引入service-product-client模块
  2. 引入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索引库(二十七)

目录&#xff1a; &#xff08;1&#xff09;商品检索功能介绍 &#xff08;2&#xff09;根据业务搭建数据结构 &#xff08;3&#xff09;nested 介绍 &#xff08;4&#xff09;搭建service-list服务 &#xff08;5&#xff09;构建实体与es mapping建立映射关系 &…...

设计模式-六大原则

概述 设计模式的六大原则是设计模式的基础&#xff0c;了解设计模式的原则&#xff0c;有利于设计模式实际应用的理解&#xff0c;在真实使用的时候&#xff0c;一般不太可能一个程序满足所有的设计模式六大原则&#xff0c;或多或少都会有违背设计模的地方&#xff0c;所以不…...

MyBatis搭建和增删改查

MyBatis是一个开源的持久层框架&#xff0c;用于处理数据库的增删改查操作。它能够将Java对象与数据库中的数据进行映射关系的配置&#xff0c;并自动生成对应的SQL语句&#xff0c;从而简化了数据库操作的编码工作。 MyBatis的核心思想是将SQL语句与Java代码分离&#xff0c;…...

【一图学技术】6.反向代理 vs API网关 vs 负载均衡的原理和使用场景

反向代理 vs API网关 vs 负载均衡 一、概念 ​ &#x1f30f;反向代理&#xff08;Reverse Proxy&#xff09;是一种位于服务器和客户端之间的代理服务器。 ​ 它接收来自客户端的请求&#xff0c;并将其转发给后端服务器&#xff0c;然后将后端服务器的响应返回给客户端。客…...

python爬虫番外篇 | Reuqests库高级用法(1)

文章目录 1.会话对象&#xff08;Session Objects&#xff09;2.请求和响应对象&#xff08;Request and Response Objects&#xff09;3.准备好的请求&#xff08;Prepared Requests&#xff09;4.SSL证书验证5.客户端证书6.CA 证书7.正文内容工作流程&#xff08;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 源码包安装软件 三大步&#xff1a; 预备步骤&#xff1a;安装依赖的编译库 一、./configure --prefix/usr/local/nginx 二、make 三、make install 软件包安装 配置…...

论文阅读《Geometric deep learning of RNA structure》

引入了机器学习方法&#xff0c;通过少量的数据学习。只使用原子坐标作为输入。 预测RNA三维结构比预测蛋白质结构更困难。 设计了一个原子旋转等变评分器ARES&#xff0c;由每个原子的三维坐标和化学元素类型&#xff08;输入&#xff09;指定&#xff0c;ARES预测模型与未知真…...

宏集方案 | 传统建筑智能化改造,迈向物联新时代

前言 智能建筑涉及多个系统的集成&#xff0c;如照明、空调、安防等&#xff0c;这些系统的兼容性和协调运作是一大挑战。然而&#xff0c;传统的工业建筑和商业楼宇受早期设计的局限&#xff0c;多个控制系统间互不兼容&#xff0c;并且难以重新部署通信线缆。 针对传统建筑…...

如果服务器更改Web端口会减少被攻击的风险吗?

通过更改服务器的Web端口&#xff0c;是否能够显著降低被攻击的风险?首先&#xff0c;理解Web服务默认使用的端口是关键。HTTP协议通常使用80端口&#xff0c;而HTTPS则默认使用443端口。这些端口因其广泛认知而成为黑客攻击的首要目标。理论上&#xff0c;将Web服务迁移到非标…...

vim列编辑模式

在编辑文本时&#xff0c;经常会有这样的需求&#xff0c;对特定列进行进行批量编辑。比如批量注释一段代码&#xff0c;或者删除待定字符&#xff08;如一列空格&#xff09;。幸运的是VIM支持列编辑模式。 假设文本内容&#xff1a; Maximum length of a custom vocabulary…...

如何实现pxe安装部署

此实验环境&#xff1a;rhel7主机 一、kickstart自动化安装脚本 1、安装可视化图形 [rootlocalhost ~]# yum group install "Server with GUI" 2、关闭vmware dhcp功能&#xff08;编辑-虚拟网络编辑器&#xff09; 3、httpd 1、安装httpd服务 [rootlocalhost …...

机器学习常见模型

1、线性模型 线性模型是机器学习最基本的算法类型&#xff0c;它试图学到一个通过多个特征&#xff08;属性&#xff09;计算的线性组合来预测的函数&#xff0c;简单的线性回归形式如yaxb&#xff0c;其中&#xff0c;x代表特征&#xff0c;而y代表结果&#xff0c;一旦a和b的…...

【python案例】基于Python 爬虫的房地产数据可视化分析设计与实现

引言 研究背景与意义 房地产行业在我国属于支柱性产业&#xff0c;在我国社会经济发展中一直扮演着重要角色。房价问题&#xff0c;尤其是大中城市的房价问题&#xff0c;一直是政府、大众和众多研究人员关注的热点。如何科学地预测房价是房价问题的研究方向之一。随着互联网…...

如何在Python中诊断和解决内存溢出问题

python的内存溢出即程序在申请内存后未能正确释放&#xff0c;导致随着时间推移占用的内存越来越多&#xff0c;以下是一些可能导致内存溢出的原因&#xff1a; 1、循环引用&#xff1a;当对象之间形成循环引用&#xff0c;并且这些对象定义了__del__方法时&#xff0c;Python…...

什么是爬虫软件?这两个爬虫神器你必须要试试

爬虫软件概述 爬虫&#xff0c;又称为网络爬虫或网页爬虫&#xff0c;是一种自动浏览互联网的程序&#xff0c;它按照一定的算法顺序访问网页&#xff0c;并从中提取有用信息。爬虫软件通常由以下几部分组成&#xff1a; 用户代理&#xff08;User-Agent&#xff09;&#xf…...

记录|MVS和VM软件使用记录

目录 前言一、常用属性二、触发模式选择三、操作注意点四、录像、抓拍功能五、VM软件六、VM软件界面介绍七、VM软件运行间隔八、VM软件图像源九、VM软件相机管理十、获取图像十一、方案存储十一、相机拍摄彩图转换颜色转换快速匹配特征模板&#xff1a;运行参数 十二、位置修正…...

算法通关: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# 中&#xff0c;Random 类的实例通常用于生成随机数。在方法内部或外部创建 Random 实例主要影响的是实例的生命周期和性能。 在方法外部创建 Random 实例 生命周期&#xff1a;如果在类的成员变量中创建 Random 实例&#xff0c;那么这个实例的生命周期将与类的实例相同…...

MongoDB简介及其在Java中的应用

什么是MongoDB&#xff1f; MongoDB是一个基于分布式文件存储的数据库&#xff0c;由C语言编写。它旨在为Web应用提供可扩展的高性能数据存储解决方案。MongoDB结合了关系数据库和非关系数据库&#xff08;NoSQL&#xff09;的特点&#xff0c;是功能最丰富、最像关系数据库的…...

JSON-LD上下文将属性映射到RDF IRIs示例

为了更清晰地说明JSON-LD上下文是如何将属性映射到RDF IRIs&#xff0c;我们可以基于提供的上下文规范&#xff0c;举一个完整的JSON-LD数据实例&#xff0c;并展示它是如何转换为RDF三元组的。 示例上下文 {"context": {"foaf": "http://xmlns.com…...

Spring的监听机制详解

Spring的监听机制详解 讲在前面 对Spring框架&#xff0c;大家都已不陌生&#xff0c;它给我们提供了很多功能&#xff0c;包括IoC、AOP、事务管理等。其中&#xff0c;Spring的事件监听机制是一项非常重要的功能&#xff0c;它允许开发人员定义和处理自定义事件&#xff0c;并…...

Cache结构

Cache cache的一般设计 超标量处理器每周期需要从Cache中同时读取多条指令&#xff0c;同时每周期也可能有多条load/store指令会访问Cache&#xff0c;因此需要多端口的Cache L1 Cache&#xff1a;最靠近处理器&#xff0c;是流水线的一部分&#xff0c;包含两个物理存在 指…...

国产版Sora复现——智谱AI开源CogVideoX-2b 本地部署复现实践教程

目录 一、CogVideoX简介二、CogVideoX部署实践流程2.1、创建丹摩实例2.2、配置环境和依赖2.3、上传模型与配置文件2.4、开始运行 最后 一、CogVideoX简介 智谱AI在8月6日宣布了一个令人兴奋的消息&#xff1a;他们将开源视频生成模型CogVideoX。目前&#xff0c;其提示词上限为…...

怎么读取FRM、MYD、MYI数据文件

一、介绍frm、MYD、MYI文件 在MySQL中&#xff0c;使用MyISAM存储引擎时&#xff0c;数据库表会被分割成几个不同的文件文件描述功能扩展名FRM 文件表结构定义文件存储表的结构信息&#xff0c;字段、索引等.FRMMYD 文件数据文件包含表的实际数据.MYD&#xff08;MYData&#x…...

Leetcode3226. 使两个整数相等的位更改次数

Every day a Leetcode 题目来源&#xff1a;3226. 使两个整数相等的位更改次数 解法1&#xff1a;位运算 从集合的角度理解&#xff0c;k 必须是 n 的子集。如果不是&#xff0c;返回 −1。怎么用位运算判断&#xff0c;见上面的文章链接。 如果 k 是 n 的子集&#xff0c;…...

Linux笔记-3()

目录 一、Linuⅸ实操篇-定时任务调度 二、Linuⅸ实操篇-Linuⅸ磁盘分区、挂载 三、Linux实操篇-网络配置 一、Linuⅸ实操篇-定时任务调度 1 crond任务调度---crontab进行定时任务的设置1.1 概述任务调度&#xff1a;是指系统在某个时间执行的特定的命令或程序。任务调度分类…...

Apache漏洞复现CVE-2021-41773

Apache HTTP Server 路径穿越漏洞 漏洞简介 该漏洞是由于Apache HTTP Server 2.4.49版本存在目录穿越漏洞,在路径穿越目录 <Directory/>Require all granted</Directory>允许被访问的的情况下&#xff08;默认开启&#xff09;&#xff0c;攻击者可利用该路径穿越…...

GIT如何将远程指定分支的指定提交拉回到本地分支

一、当前我的代码在这个提交&#xff0c;但可以看到远程仓库上面还有两次新的提交 二、现在我想让我本次的代码更新到最上面这个最新的提交 三、输入git fetch命令获取远程分支的最新提交信息。 四、输入 git log origin/<remote_branch_name>查看并找到想要更新的指定提…...

鸿蒙图形开发【3D引擎接口示例】

介绍 本实例主要介绍3D引擎提供的接口功能。提供了ohos.graphics.scene中接口的功能演示。 3D引擎渲染的画面会被显示在Component3D这一控件中。点击按钮触发不同的功能&#xff0c;用户可以观察渲染画面的改变。 效果预览 使用说明 在主界面&#xff0c;可以点击按钮进入不…...