ElasticSearch 学习笔记总结(三)

一、ES 相关名词 专业介绍

Elasticsearch 索引(index):一切设计都是为了提高搜索的性能。

Elasticsearch 类型(type):7.X版本以上的都已经不再支持索引类型了(默认类型为:_doc)。

Elasticsearch 文档(Document):
在这里插入图片描述
Elasticsearch 文档(Field):相当于数据表的字段,对文档数据根据不同属性进行的分类标识。

Elasticsearch 映射(Mapping):
在这里插入图片描述
Elasticsearch 分片(Shards):可以理解为分表效果,将不同的分片放到不同的集群节点上。
在这里插入图片描述
在这里插入图片描述

Elasticsearch 副本(Replicas):备份的效果。
在这里插入图片描述

Elasticsearch 分配(Allocation):就是如何分配的效果。
在这里插入图片描述

二、ES 系统架构

在这里插入图片描述

三、ES 创建分片副本 和 elasticsearch-head插件

启动三台es节点服务器。

创建索引users 分配 3个主分片和一份副本(每个主分片拥有一个副本分片)。

// put方法:http://127.0.0.1:1001/users
{
    "settings" : {
        "number_of_shards" : 3,
        "number_of_replicas" : 1
    }
}
// get方法:http://127.0.0.1:1001/users 
// 进行查看

elasticsearch-head是一个浏览器插件,专门来监控es集群的相关内容信息。

在这里插入图片描述

正常启动后的效果:
在这里插入图片描述

四、ES 故障转移

单点集群故障问题:其实单点了就不算是集群了,自身宕机后三个主分片的数据和副本就没了。

多个节点集群时,就避免了上面的问题出现:

  • 粗框的就是主分片,其他的就是副本。
    在这里插入图片描述

水平扩容:当添加第三个节点的时候,就会重新分配,更加均衡提高吞吐量。

在这里插入图片描述
注意:如何分配的 以及 最大扩容多少。
在这里插入图片描述
如果超过预期的扩容节点怎么办?
在这里插入图片描述
扩容实现:

// put方法:http://127.0.0.1:1001/users/_settings
{
    "number_of_replicas" : 2    
}

五、ES 应对故障

在这里插入图片描述

六、ES 路由计算 和 分片控制

路由计算:就是数据放到哪里,应该从哪里取数据。
在这里插入图片描述
分片控制:

  • 虽说,每一个节点都有备份,有数据,但是并不是访问哪个节点就会直接获取该节点数据。
  • 每个节点都可以是协调节点,协调节点的效果,如下。
    在这里插入图片描述

七、ES集群 数据写流程

1. 客户端请求集群节点(任意节点)。
2. 协调节点将请求转换到指定的节点。
3. 主分片将数据保存。
4. 主分片将数据发送给副本。
5. 副本保存后,反馈给主分片。
6. 主分片收到反馈后,再反馈给客户端。
7. 客户端接收到反馈。
在这里插入图片描述

consistency 一致性参数:
在这里插入图片描述
在这里插入图片描述
timeout 超时参数:
在这里插入图片描述

八、ES集群 数据读流程

1. 客户端发送查询请求到协调节点。
2. 协调节点计算数据所在的分片以及全部的副本位置。
3. 为了能够负载均衡,可以轮询所有节点。
4. 将请求转发给具体的节点。
5. 节点返回查询结果,将结果反馈给客户端。
在这里插入图片描述

九、ES集群 更新流程 和 批量操作

更新流程:与新增相同,更新主片,更新副本。

批量操作:其实批量操作也可以分批到每个节点,进行单节点相关操作。

在这里插入图片描述

十、ES 相关重要 概念 和 名词

分片原理:就是倒排索引。
分片是Elasticsearch最小的工作单元。

Elasticsearch 使用一种称为倒排索引的结构,它适用于快速的全文搜索。

倒排索引就是 反向索引(inverted index)。与之对应的是正派索引(forward index)。

其实就是分词的效果:
在这里插入图片描述

还有一个分词器的概念:因此,有中文、英文等不同情况,所以要用到分词器。

还有能分词,不能分词的: text 和 keyword 。

ik_max_word:最细粒度的拆分。
ik_smart:最粗力度的拆分。


索引名词:

  • 词条:索引中最小的存储和查询单元。
  • 词典:字典,词条的集合,B+,HashMap。
  • 倒排表:存在好多倒排项,效果就是倒排索引解释一样。

倒排索引写入磁盘后是不可变的,好处:
在这里插入图片描述
加粗样式
坏处:不可变!
在这里插入图片描述

如何保留不变性的前提下实现倒排索引的更新?
在这里插入图片描述

十一、ES集群 文档刷新 文档刷写 文档合并

ES是 近实施搜索的,原理如下:
在这里插入图片描述

十二、ES集群 文档分析

分析 原理过程:

  • 将一块文档分成适合于倒排索引的独立的 词条。
  • 将这些词条统一化为标准格式以提高它们的 可搜索性,或者 recall分析器执行上面的工作。

分析器包含三个主要功能:字符过滤器、分词器、Token过滤器。

在这里插入图片描述
在这里插入图片描述

ES有一些内置分析器:标准分析器、简单分析器、空格分析器、语言分析器。


标准分析器 的使用:

// get方法:http://127.0.0.1:1001/_analyze
{
    "analyzer":"standard", // 标准分析器
    "text":"Text to analyze"
}

IK 中文分析器:

将解压后的文件夹放入ES根目录下的plugins目录下,重启ES即可使用。
在这里插入图片描述

有些时候,ik分词器并不知道有些词汇是一个单词,所以还要告诉ik分词器,哪些是一个单词。

在这里插入图片描述
在这里插入图片描述
文件目录如下:
在这里插入图片描述
在这里插入图片描述


自定义分析器:

  • 创建索引的时候,通过参数来自定义分析器。
// put方法:http://127.0.0.1:1001/my_index
{
    "settings": {
        "analysis": {
            "char_filter": {
                "&_to_and": {
                    "type": "mapping", 
                    "mappings": [
                        "&=> and "
                    ]
                }
            }, 
            "filter": {
                "my_stopwords": {
                    "type": "stop", 
                    "stopwords": [
                        "the", 
                        "a"
                    ]
                }
            }, 
            "analyzer": {
                "my_analyzer": {
                    "type": "custom", 
                    "char_filter": [
                        "html_strip", 
                        "&_to_and"
                    ], 
                    "tokenizer": "standard", 
                    "filter": [
                        "lowercase", 
                        "my_stopwords"
                    ]
                }
            }
        }
    }
}

查询验证分析器:

# GET http://127.0.0.1:9200/my_index/_analyze
{
    "text":"The quick & brown fox",
    "analyzer": "my_analyzer"
}

十三、ES集群 文档控制

场景多个人并发进行处理操作文档时,最后一个人操作的肯定覆盖掉了其他人操作的,理论上应该是这样,但实际会出现一个乱序的情况(不确定谁先完成),那么这种情况应该如何避免。

使用悲观锁 和 乐观锁来处理类似问题:
在这里插入图片描述


ES 乐观锁:
在这里插入图片描述

效果如下:
在这里插入图片描述
在这里插入图片描述

// post方法:http://127.0.0.1:1001/shopping/_update/1001?if_seq_no=1&if_primary_term=1
// 通过if_seq_no=1&if_primary_term=1来操作乐观锁
{
    "doc":{
        "title":"华为手机"
    }
}

外部系统版本控制:
在这里插入图片描述

例如:就是想通过version来进行判别操作:

// post方法:http://127.0.0.1:1001/shopping/_doc/1001?version=3&version_type=external
// 通过声明version_type=external参数。
{
    "title": "测试手机"
}

版本必须相同或者大于该版本才能进行修改!

十四、ES Kibana

在这里插入图片描述

kibana配置文件:
在这里插入图片描述
类似如下可视化页面:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xupengboo

你的鼓励将是我创作最大的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值