ES

一、创建映射字段的语法格式

需要先构建索引库,在构建索引库中的映射关系

PUT /索引库名/_mapping
{"properties": {"字段名": {"type": "类型","index": true,"store": false,"analyzer": "分词器"}}
}

#新增数据  id自增
POST /hl/_doc
{"title":"小米手机","images":"http://image.lano.com/12479122.jpg","price":2699.00
}#自己指定id信息
POST /hl/_doc/2
{"title":"OPPO手机","images":"http://image.lano.com/12479122.jpg","price":2999.00
}#修改数据
POST /hl/_doc/2
{"title":"VIVO手机","images":"http://image.lano.com/12479122.jpg","price":2999.00
}#智能判断 根据数据自动添加到映射,判断并指定数据类型
POST /hl/_doc/3
{"title":"超米手机","images":"http://image.lanou.com/12479122.jpg","price":2899.00,"stock": 200,"saleable":true
}put /hl/_doc/4
{"title":"小米电视AAA","images":"http://image.lano.com/12479122.jpg","price":2999.00
}#查询数据
GET hl/_search
{"query": {"match_all": {}}
}#or查询数据  小米or电视
GET hl/_search
{"query": {"match": {"title": "小米电视"}}
}
# and查询
GET hl/_search
{"query": {"match": {"title": {"query": "小米电视","operator": "and"}}}
}PUT /hl/_doc/5
{"title":"乐视电视","images":"http://image.lanou.com/12479122.jpg","price":2899.00,"subTitle":"小米电视手机"
}#多字段查询
GET hl/_search
{"query": {"multi_match": {"query": "小米","fields": [ "title", "subTitle" ]}}
}
#单词条精准查询
GET /hl/_search
{"query":{"term":{"price":2699.00}}
}
#多词条精准查询
GET /hl/_search
{"query":{"terms":{"price":[2699.00,2899.00]}}
}
#只查询特定字段
GET /hl/_search
{"_source": ["title","price"],"query": {"term": {"price": 2699}}
}
#只查询特定字段  指定includes和excludes
GET hl/_search
{
"_source": {
"excludes": "images",
"includes": ["title","price"]
},
"query": {
"term": {
"price": 2899.00
}
}
}PUT /hl/_doc/6
{"title":"apple手机","images":"http://image.lanou.com/12479122.jpg","price":6899.00
}
#模糊半径为1查询
GET hl/_search
{"query": {"fuzzy": {"title": "app"}}
}#模糊半径为2查询
GET hl/_search
{"query": {"fuzzy": {"title": {"value": "app22","fuzziness": 2}}}
}
  • 类型名称:映射的名称,字段名:任意填写。Elasticsearch7.0之后不支持类名名称写法所以需要添加include_type_name=true参数进行支持设置。

  • type:类型,可以是text、long、short、date、integer、object等

  • index:是否可以使用索引查询,默认为true

  • store:是否额外存储,默认为false

  • analyzer:分词器,这里的ik_max_word即使用ik分词器

二、了解数据类型

1、字符串

text: 可分词 不可聚合

keyword:不可分词 可聚合

2、数值

整数和浮点(float、double、half_float、scaled_float)

3、日期

date

三、使用springboot创建es项目

1、jar包

spring-boot-starter-data-elasticsearch

2、配置文件

spring:
  elasticsearch:
   uris: http://1.94.230.82:9200

3、使用esTemplate模版工具类

@RestController
@RequestMapping("/es")
public class EsController {@Autowiredprivate ElasticsearchRestTemplate restTemplate;

四、Es实现的功能

1、创建索引库

restTemplate.indexOps(User.class).create();

/*
@Document(indexName = "索引库名",shards = 分片数,replicas = 副本数)*/
@Document(indexName = "user",shards = 1,replicas = 0)
public class User {
}
​
package com.hl.es.web;
​
import com.hl.es.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
​
@RestController
@RequestMapping("/es")
public class EsController {@Autowiredprivate ElasticsearchRestTemplate restTemplate;
​@RequestMapping("/test")public void getEsTemplate(){boolean flag = restTemplate.indexOps(User.class).exists();System.out.println("索引库是否存在:"+flag);if(!flag){//创建索引库boolean flag2 = restTemplate.indexOps(User.class).create();System.out.println("索引库创建结果:"+flag2);}}
}

2、创建映射

@Document(indexName = "user",shards = 1,replicas = 0)
@Data
public class User {@Idprivate Integer id;@Field(type = FieldType.Text,analyzer = "ik_max_word")private String username;@Field(type = FieldType.Text,analyzer = "ik_max_word")private String desc;@Field(type = FieldType.Keyword,index = false)private String password;@Field(type = FieldType.Text,analyzer = "ik_max_word")private String address;@Field(type = FieldType.Double)private Double money;@Field(type = FieldType.Date,format = DateFormat.custom,pattern = "YYYY-MM-dd")private Date createTime;
}
@RequestMapping("/createMapping")
public Object createMapping(){Document document = restTemplate.indexOps(User.class).createMapping();boolean flag = restTemplate.indexOps(User.class).putMapping(document);System.out.println("创建映射:"+flag);return flag;
}

3、新增数据

@RequestMapping("/save")
public Object save(User user){User user2 = restTemplate.save(user);return user2;
}

4、查询数据

自定义查询
package com.hl.es.dao;
​
import com.hl.es.pojo.User;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
​
import java.util.List;
​
public interface UserDaoextends ElasticsearchRepository<User, Integer> {//根据用户名查询集合//单字段public List<User> findByUsername(String username);public List<User> findByAddress(String address);//多字段public List<User> findByDescAndAddress(String desc, String address);public List<User> findByDescOrAddress(String desc, String address);//范围查询public List<User> findAllByIdGreaterThanEqual(Integer minId);public List<User> findByMoneyBetween(Double minPrice, Double maxPrice);//先根据范围查询,再降序排序public List<User> findByMoneyBetweenOrderByMoneyDesc(Double minPrice, Double maxPrice);
​
}
高级查询

1、分页查询

2、聚合查询

3、高亮查询

//高亮处理
@Highlight(fields = {@HighlightField(name = "desc"),@HighlightField(name = "address"),@HighlightField(name = "username")},parameters = @HighlightParameters(preTags = {"<span style='color:red'>"},postTags = {"</span>"})
)
public List<SearchHit<User>> findByDescOrAddressOrUsername(String desc, String address, String username);

五、es专业名词

节点

分片

副本

索引

六、mysq+es的数据同步

  • 使用Logstash实现Mysql与ElasticSearch实时同步。

  • 使用go-mysql-elasticsearch实现Mysql与ElasticSearch实时同步。

  • 使用RabbitMQ实现Mysql与ElasticSearch实时同步。

  • 使用阿里巴巴Canal实现Mysql与ElasticSearch实时同步。

当前项目

主数据库: mysql 事务机制

辅助数据库:redis (小数据量的频繁访问 内存 首页商品分类 推荐商品)

es(大量数据的检索 模糊查询 | 数据来自于多个字段 百度搜索 商城的搜索)

mysql:商品表

redis:查询mysql中的数据,新增到redis

mysql------------------》es

方法(saveToMysql -->mq--> saveToEs )(updateToMysql -->mq--->updateToEs ) (deleteToMysql deleteToEs)

项目上线:首次同步,批量同步

项目运行:增量同步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/90389.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/90389.shtml
英文地址,请注明出处:http://en.pswp.cn/web/90389.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring boot h2数据库无法链接问题

spring boot h2数据库无法链接问题datasource:# 数据库连接地址&#xff1a;H2在2.x后&#xff0c;不再支持创建数据库&#xff0c;需要手工创建&#xff0c;如&#xff1a;touch test.mv.db&#xff0c;# 否则会报“Database file not found”错误url: jdbc:h2:file:~/testdri…

pycharm配conda环境

最近在做表情包&#xff0c;画出来的表情包大小不一&#xff0c;但是vx表情包平台要求统一都是240*240的&#xff0c;所以用Pillow统一处理的一下。 如果你本地装的python并且添加到path了&#xff0c;pycharm可以自动获取到&#xff0c;但是我装得miniconda&#xff0c;pychar…

【Elasticsearch】Elasticsearch 跨机房部署

《Elasticsearch 集群》系列&#xff0c;共包含以下文章&#xff1a; 1️⃣ 冷热集群架构2️⃣ 合适的锅炒合适的菜&#xff1a;性能与成本平衡原理公式解析3️⃣ ILM&#xff08;Index Lifecycle Management&#xff09;策略详解4️⃣ Elasticsearch 跨机房部署5️⃣ 快照与恢…

立式数控深孔钻的工艺及光学检测方法 —— 激光频率梳 3D 轮廓检测

引言立式数控深孔钻作为深孔加工的关键设备&#xff0c;其工艺水平直接影响零件加工质量。深孔加工面临排屑、散热等挑战&#xff0c;而光学检测技术的发展为深孔加工精度控制提供了新途径。激光频率梳 3D 轮廓检测技术与立式数控深孔钻工艺的结合&#xff0c;实现了深孔加工与…

【YOLO系列】YOLOv4详解:模型结构、损失函数、训练方法及代码实现

YOLOv4详解&#xff1a;模型结构、损失函数、训练方法及代码实现 motivation YOLO系列作者Joseph Redmon与Alexey Bochkovskiy致力于解决目标检测领域的核心矛盾&#xff1a;精度与速度的平衡。YOLOv4的诞生源于两大需求&#xff1a; 工业落地&#xff1a;在移动端/边缘设备…

chromedriver下载与安装方法

chromedriver下载地址&#xff1a; 版本在&#xff1a;http://chromedriver.storage.googleapis.com/index.html 这是下载后&#xff1a; 把exe文件复制到浏览器的安装目录下 把exe文件复制到python的安装目录下 配置环境变量:此电脑→右击属性→高级系统设置→环境变量→用户…

基于QT(C++)实现(图形界面)选课管理系统

选课管理系统1 概述1.1 课程设计目的和意义根据课程大纲设定&#xff0c;面向对象课程设计的目的是&#xff1a;&#xff08;1&#xff09;理解面向对象的基本思想和三大机制&#xff0c;掌握基于 C 语法的面向对象的基 本概念和开发模式&#xff0c;熟练运用面向对象思维模式…

【阿里云-ACP-1】疑难题解析

1.弹性伸缩 AS 在企业中有广泛的应用场景,不仅适合业务量不断波动的应用程序,同时也适合业务量稳定的应用程序。以下关于弹性伸缩的使用说法正确的是( ) 选项内容 A 弹性伸缩可以用于云数据库 RDS 的自动扩容 B 弹性伸缩支持自动将 ECS 实例或 ECI 实例添加到 Memcache 实…

NLP:seqtoseq英译法案例

本文目录&#xff1a;一、案例概述二、数据集三、案例步骤&#xff08;一&#xff09;导入工具包和工具函数&#xff08;二&#xff09;数据预处理&#xff08;三&#xff09;构建数据源对象&#xff08;四&#xff09;构建数据迭代器&#xff08;五&#xff09;构建基于GRU的编…

docker的准备与部署

docker的重复使用bilibli 黑马视频 方便查看docker容器。设置格式通过官网dock查看格式命令 命令别名&#xff0c;简化输入

Java 大视界 -- Java 大数据在智能教育自适应学习路径规划与学习效果强化中的应用(362)

Java 大视界 -- Java 大数据在智能教育自适应学习路径规划与学习效果强化中的应用(362) 引言: 正文: 一、Java 构建的智能教育数据架构 1.1 多维度学习数据实时采集 1.2 知识图谱构建与知识点关联 二、Java 驱动的自适应学习路径规划 2.1 多模型融合的路径生成 2.2 学习效果…

2.1 为什么定义tensor数据结构?

PyTorch选择定义Tensors而非直接使用NumPy进行运算和数据处理&#xff0c;主要是因为Tensors在功能、性能和场景适配性上更贴合深度学习的需求。以下是关键原因分析&#xff1a; 1. 自动求导与计算图支持 核心差异&#xff1a;PyTorch的Tensors在运算时会自动构建计算图&#x…

Qt Quick 3D渲染

Qt Quick 3D是Qt框架中用于创建3D图形界面的强大模块&#xff0c;它提供了声明式的QML API&#xff0c;使得开发者无需深入底层图形API就能构建复杂的3D场景。本文将全面介绍Qt Quick 3D的核心概念和技术细节&#xff0c;包括3D场景坐标系统、场景环境设置、光照与材质系统、相…

笔试——Day17

文章目录第一题题目思路代码第二题题目&#xff1a;思路代码第三题题目&#xff1a;思路代码第一题 题目 小乐乐改数字 思路 模拟 当前位置为偶数时&#xff0c;改为0&#xff1b;否则改为1记得取出前导0&#xff1b;stoi()函数可以直接自动去除前导0 代码 第二题 题目&a…

【c#】完美解决部署IIS 报错 0x8007000d

1、错误页面&#xff1a;2、解决思路&#xff1a; 1、点击IIS站点&#xff0c;右键点击浏览到文件夹下&#xff0c;路径打开cmd&#xff0c;找到对应的站点的dll&#xff0c;运行失败会提示错误原因。需要安装某些dll2、选中站点&#xff0c;点击模块&#xff0c;检查模块AspNe…

Visual Studio 2010-.Net Framework 4.0项目-NPOI安装

在管理Nuget程序包中搜索NPOI&#xff0c;下载最新版会报错&#xff1a;使用程序包控制台输入&#xff1a;Install-Package NPOI -Version 2.5.1

Redis原理之分布式锁

上篇文章&#xff1a; Redis原理之缓存https://blog.csdn.net/sniper_fandc/article/details/149141968?fromshareblogdetail&sharetypeblogdetail&sharerId149141968&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link​​​​​​​ 目录 1 …

网络基础19:OSPF单区域原理实验

一、实验拓扑二、设备配置AR1 配置<AR1> system-view [AR1] interface GigabitEthernet0/0/0 [AR1-GigabitEthernet0/0/0] ip address 192.168.1.1 24 [AR1-GigabitEthernet0/0/0] quit[AR1] ospf 1 router-id 0.0.0.1 [AR1-ospf-1] area 0 [AR1-ospf-1-area-0.0.0.0] ne…

【实战推荐】小白也能上手的多端陪玩系统平台项目源码

在当今的游戏市场中&#xff0c;游戏陪玩服务已经成为了一个热门领域。无论是寻找高手带自己升级、学习游戏技巧&#xff0c;还是仅仅想找人一起玩耍&#xff0c;越来越多的玩家倾向于通过专业的陪玩平台找到合适的伙伴。对于想要进入这个市场的创业者和开发者来说&#xff0c;…

[hot 100 ]最长连续序列-Python3

需要时间复杂度为O(n)&#xff0c;如果采用暴力求解则为O(n^2)1.在遍历hash表的时候检查是否当前值为连续序列的最小值,如果是&#xff0c;则跳过此次循环,这样使得原本需要对每个值进行一次遍历变成了对每个值只访问一次:2.使用set()和普通for num in nums的区别&#xff1a;