Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强
总时长 104:45:00 共408P
此文章包含第102p-第p124的内容
简介
es的索引(Index)相当于mysql的database 数据库 也可以当成insert
es的类型(Type)相当于mysql的table 表
es的文档(Document)相当于mysql的table里的数据内容
倒排索引
安装 p103
es7.4.2 相当于mysql
kibana 相当于navicat sqlyog等
下载
看内存
正式上线的话 内存一般会分32G左右
这里测试 使用 初始64M 最大占用128M
挂载虚拟机的yml文件到外部
外部暴露地址:内部地址
挂载出错要添加到白名单chcon -Rt svirt_sandbox_file_t(需要挂载的文件目录)或者chmod -R 777 /mydata/elasticsearch/ 保证权限
修改权限 为777
安装成功可以看到如下信息
ctrl + s
需要等待1分钟左右才能启动,太快会有下面的提示
保存 p106
返回 的元数据
再次发送的时候 返回的元数据会发生变化 如 created变成了updated 版本号也加了1
put方法必须带id 不带报405错误
查询 get p107
乐观锁查询时用到的两个参数
_seq_no 数据改动时会上升
_primary_term 集群时使用
_seq_no(Sequence Number):
seq_no 是文档的序列号,用于跟踪文档在分片中的顺序。
每次对文档进行更新时,seq_no 会自增,这有助于确定文档的最新版本。
在分布式环境下,seq_no 可以帮助协调来自不同节点的写入操作,确保数据的一致性。
_version:
version 是文档的版本号,用于标识文档的更新次数。
每次对文档进行更新时,version 会递增,允许应用程序检测到文档是否已经被修改。
通过版本号,可以实现乐观并发控制,避免数据冲突和丢失更新。
_primary_term:
primary_term 是主分片的代号,用于在主分片切换时维护一致性。
当主分片发生切换时,primary_term 会增加,确保正确地处理分片的变更。
这些字段在 Elasticsearch 中扮演着重要的角色,帮助确保数据的一致性、可靠性和并发控制。通过结合使用这些字段,Elasticsearch 能够有效地处理分布式环境下的数据操作,并提供强大的文档控制功能。
老版本用_version做锁 新版一般用_seq_no 做锁
put和post详细 p108
post 带_update
post 不带_update
删除 delete p109
删除完 再查询会提示未找到
删除索引后 整个索引下的数据都没有了 没有删除type的方法 而且新版本已经取消了type
批量操作
地址打不开的话,把地址里的master替换成7.4,就可以打开了。
查询的两种方法 p110
1.使用参数
用时
是否超时
集群分片做了什么
命中记录
hits 命中记录的一些参数
total --> value总记录数
total --> relation"eq" 类型 等于
max_score 最大得分
2.使用请求体
query 查询条件
sort 排序条件
from 0 代表从第一条数据开始拿
size 20 代表拿20条
跟分页一样
_source 查询哪几个字段
match 匹配查询
模糊查询 使用倒排索引进行快速全文检索
多字段匹配
多个字段里有一个匹配也能查出来 如:标题和详情里有 就拿出来
复合查询 bool
must必须满足才行
must_not 必须不匹配 如 不能有年龄38岁的
should 应该匹配 可以匹配 可以不匹配 匹配最好 可以加分 不匹配也没事 相当于加分项
must should 相关性得分都可以加分
查询年龄范围
结果过滤 filter 不提供相关性得分
term
检索精确字段 非文本字段使用term
term无法检索到文本字段 因为分词原因term很难检索到
query match xxx.keyword 和query match_phrase xxx
query match xxx.keyword 和query match_phrase xxx 都是将后面的数据作为一整个词进行查询
query match xxx.keyword 这只能查到一模一样的数据 相当于 sql里的等于
query match_phrase xxx 可以查到带后面 整个的词的 数据 相当于sql里的 like
keyword 不将里面的内容进行分词,text会分词
keword是精确匹配,match_phrase是模糊匹配,都不分词
aggregations执行聚合
各种聚合类型 如 avg(平均值),term(值集合) 相当于sql里的聚合函数
size等于0的时候只看聚合结果 数据hits不展示
子聚合
先按年龄进行分布 然后再在这些年龄里进行聚合查询
三层聚合
这个操作类似于Stream流,习惯了用着还可以
ES7移除了type,因为同一个索引下 不同type里同名的时候会影响查询效率
映射
创建字段
text和keyword的区别
keyword 不会进行全文检索 进行精确匹配
text会进行分词从而进行全文检索
这里创建了一个索引,并且去掉了type 直接是索引下面就是字段
新增字段
直接加不行 会报错
index是false的时候 是不会被索引到的 相当于查询的时候不去查它
更新映射
如果一个映射已经添加了 就不能更新这个映射,如修改类型等
如果想修改映射,就需要 重新建立一个新的索引,并将之前的数据进行迁移
数据迁移
把之前的进行复制,并且修改后进行操作
迁移并且去掉type
type全部变成_doc
分词
使用standard分词器进行分词
由于默认的standard分词器拆分中文有歧义 所以需要安装中文分词器,这里使用开源的ik分词器
之前映射过
进入docker 容器
docker ps #查看
docker exec -it xxxxx /bin/bash #进入
查看已经安装好的插件
重启es
网络配置
设置网关和dns 以及备用dns
自定义分词器
删除之前的容器并重新生成一个新的
删除 由于之前的数据源映射到了外部 所以新生成的es容器的数据不会丢失
重新创建
修改ik分词器的配置文件
改完之后记得重启
设置自动启动