欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

死磕ES-第一章

时间:2023-07-25
一句话介绍

Elasticsearch是实时的分布式搜索分析引擎,内部使用 Lucene 做索引与搜索。

主要功能

分布式搜索引擎

大数据近实时分析引擎

产品特性

高性能易用易扩展 Lucene

是基于Java语言开发的类库具有高性能、易扩展的特点具有局限性

只能基于Java语言开发类库的接口学习曲线陡峭原生并不支持水平扩展 与Lucene关系

ES是基于Lucene开发的,主要扩展点在于

支持分布式可水平扩展降低了全文检索的学习曲线可以被其他编程语言调用 生态圈 与数据库集成

单独使用ES存储与数据库并存,集成

与现有系统的集成需要考虑事务性数据更新频繁 日志分析 本地部署与水平扩展 基本概念 Index索引 介绍

索引是文档的容器,是一类文档的结合

index体现了逻辑空间的概念,每个索引都有自己的mapping定义,由于定义包含的文档的字段名和字段类型shard体现了物理空间的概念,索引中的数据分散在Shard上 索引的Mapping和Settings

Mapping定义文档字段的类型Setting定义不同的数据分布 索引的不同语义 Type 类型

7.0之前一个Index可以设置多个Types

6.0之后Type被废弃,7.0之后索引只可以设置一个Type

document 文档 介绍

ES是面向文档的,文档是所有可搜索数据的最小单位

日志中的文件项一部电影中的具体信息

文档会被序列化成JSON格式保存在ES中

每个文档都有一个Unique ID

可以自己指定也可以由ES生成

JSON文档

一篇文档包含了一系列的字段。类似数据库的一条记录格式灵活不需要预先定义格式

字段的类型可以指定或者通过ES自动推算支持数组、支持嵌套 元数据

用于标注文档的相关信息

_index :文档所属的索引名_type :文档所属的类型名_id :文档唯一id_score :相关性得分_source :文档的原始JSON数据_all :整合所有字段内容到该字段,已被废除_version :文档的版本信息 分片 主分片

用来解决数据水平扩展的问题。通过主分片,可以将数据分布到集群内的所有节点之上

副本

用来解决数据高可用的问题。副本分片是主分片的拷贝

副本分片数可以动态调整增加副本数可以一定程度提高服务可用性 分片的设定 分片数设定过小

后续无法增加节点实现水平扩展单个分片的数据量太大,导致数据重新分配耗时 分片数设定过大

7.0开始默认主分片设置为1,解决了over-sharding的问题

影响搜索结果的相关性打分,影响统计结果的准确性单个节点过多分片,资源浪费,牺牲性能 倒排索引 介绍 正排和倒排的区别 正排 倒排 图书和搜索引擎的类比

图书

正排索引-目录页倒排索引-英文首字母索引页

搜索引擎

正排索引-文档id到文档内容和单词的关联倒排索引-单词到文档id的关系 图片举例 核心组成 单词词典

记录所有文档的单词,记录单词和倒排列表的关联关系。

单词词典一般比较大,通过B+树或哈希拉链法实现,以满足高性能的插入与查询。

倒排列表

记录了单词对应的文档结合,由倒排索引项组成

倒排索引项

文档ID

词频TF

该单词在文档中出现的次数,用于相关性评分

位置

单词在文档中分词的位置。用于语句搜索

偏移

记录单词的开始结束位置,实现高亮显示

图片举例 ES的倒排索引

ES的JSON文档中每个字段都有自己的倒排索引可以指定对某些字段不做索引

优点:节省存储空间缺点:字段无法被搜索 ES和RDBMS的类比 ES分布式特性 ES分布式架构好处

存储的水平扩容提高系统可用性,部分节点停止服务整个集群的服务不受影响 ES的分布式架构

不同集群通过不同名字区分,默认名字elasticsearch通过配置文件修改一个集群多个节点 Master-eligible nodes 和Master Node

每个节点启动后默认是Master eligible节点

可以设置node.maser:false 来禁止 Master-eligible节点可以参加选主流程,成为Master节点当第一个节点启动时候,它会将自己选举为Master节点每个节点上都保存了集群的状态,只有Master节点才能修改集群状态信息

集群状态,维护了一个集群中必要的信息

所有节点信息所有索引和相关的Mapping和Setting信息分片的路由信息 任意节点都能修改信息会导致数据的不一致性 Data Node & Coordinating Node Data Node

可以保存数据的节点,叫做 DataNode。

负责保存分片的数据。

数据扩展中它是很重要的角色

Coordinating Node

负责接收Client的请求,将请求分发到合适的节点,最终把结果汇集到一起。

集群的健康情况 Green

主分片和副本都能正常分配

Yellow

主分片全部正常分配

有副本分片未能正常分配

Red

有主分片未能正常分配

文档的基本CRUD与批量操作 Create Get Index Update Bulk API

每行需要指定index信息,也可以在URI中指定

mget

批量读取,可以减少网络连接产生的开销

msearch

批量查询

常见错误返回 Analyzer Analysis与Analyzer

Analysis的意思是文本分析。把全文本转换为一系列单词的过程,也叫分词。

Analysis是通过Analyzer实现的,Analyzer叫分词器。

可以使用ES内置的分词器,也可以按照需求自制分词器。

除了在写入数据的时候转换词条,匹配Query语句时候也需要用相同的分析器对查询语句进行分析。

组成

分词器是专门处理分词的软件,Analyzer有三部分组成

Character Filters

针对原始文本进行处理,例如去除HTML

Tokenizer

按照规则切分单词

Token Filter

将切分的单词进行加工,小写,删除stopwords,增加同义词

步骤举例 ES内置的分词器 Standard Analyzer

默认分词器按词切分小写处理 Simple Analyzer

按照非字母切分,非字母的都去除小写处理 While Space

按照空格切分

Stop Analyzer

相比于Simple Analyzer多了Stop Filter 会把 the ,a,is 等修饰语去除

Keyword Analyzer

不分词直接将整个当一个term输出

Pattern Analyzer

通过正则分词默认是 W+ 非字符的符号进行分隔 Language Analyzer

按照语言

中文分词的难点

中文句子切分成一个一个词而不是一个一个字英文中有天然的空格作为间隔一句中文,在不同的上下文中可能有不同的意思

中文分词器:ICU Analyzer

Search API URI Search 在URL中使用查询参数 通过URI Query实现搜索 Query String Syntax(语法) Request Body Search

ES提供的基于JSON格式的 Query Domain Specific Language(DSL)

分页 排序 _source filtering 脚本字段 使用查询表达式 短语搜索 指定查询的索引 搜索Response Query String & Simple Query String Query String Query Simple Query String Query 搜索的相关性 Relevance Web搜索 电商搜索 衡量相关性 Precision & Recall Dynamic Mapping 和常见字段类型 Mapping 字段的数据类型 什么是Dynamic Mapping 类型的自动识别 能否更改Mapping的字段类型 控制Dynamic Mappings 显示Mapping设置与常见参数介绍 如何显示地定义一个Mapping 自定义Mapping的建议 控制当前字段是否被索引 Index Options Null Value Copy_to设置 数组类型 多字段特性及配置自定义分词器 多字段类型 Exact Values VS Full Text 自定义分词 Index Template 和 Dynamic Template 管理很多的索引 Index Template 工作方式 Dynamic Template 匹配规则参数
写在最后

学习资料:极客时间课程->《ElasticSearch核心技术与实战》

课程课件地址:https://gitee.com/geektime-geekbang/geektime-ELK

学习感受:目前学了30%,感觉视频如果想连贯学习下来还是会容易分心的,必须学完几节课,然后看着课件自己整理笔记,像我这样,不然就容易忘记看过的视频都主要讲了什么。
还有就是ES的学习资源不多,这也是为数不多的课程了,ES我觉得还是先知道怎么用再来看这些吧,不然感觉底层的东西太多了,而且这个很大一部分都在介绍API的使用,实际场景可能用不到这么多。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。