一句话介绍
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的使用,实际场景可能用不到这么多。
原文始发于微信公众号(0error):死磕ES-第一章
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/21858.html