ES全景知识点
2021-11-23 17:25:20 0 举报
AI智能生成
为你推荐
查看更多
ES全景知识点汇总
作者其他创作
大纲/内容
什么是搜索
如果用数据库来做搜索会怎么样
什么是全文检索
什么是 Lucene
分布式高性能高可用可伸缩
什么是 Elasticsearch
es 的分布式本质,可以帮助我们快速扩容承载大量数据
数据量大
如果使用传统数据库承载这些数据,或者进行复杂查询,传统数据库支持度不好
数据结构灵活多变,数据结构之间关系复杂
对数据的相关操作比较简单
适用于什么系统
ES 的介绍
分布式
全文检索
结构化检索
数据分析
部分匹配自动完成搜索纠错搜索推荐
其他
搜索
对海量数据近实时处理
ES 的功能
全文检索,高亮,搜索推荐
维基百科、百度百科
用户行为日志,然后进行数据分析
新闻网站
全文检索,搜索问题
Stacl Overflow
搜索行代码
github
电商网站
适用场景
可以作为一个大型分布式集群Eslasticsearch不是新技术,主要结合了全文检索(lucene),数据分析以及分布式技术对用户来说开箱即用针对于传统数据库的补充
特点
从写入数据到可以被搜索有一个小延迟(大概一秒)
NTR(近实时)
由一个或者多个 node 节点组成每个集群都有一个 cluster_name 作为标识
Cluster 集群
一个 ES 实例就是一个 node 节点一台机器上可以有多个实例
Node 节点
es 中最小的数据单元
此文档属于哪个索引尽量 fields 大量相同的放入到同一个索引中
_index
此文档属于哪个 type索引中会有少部分 fiedld 差异的数据,可以放入不同的 type 中
_type
此索引的唯一标识,可以根据_index+_type+_id 定位一个 document
自己生成-PUT 后面跟上自己生成的 id 号系统生成-POST 系统会自动生成
生成规则
_id
_source
核心元数据
操作
Document 文档
一个 index 是一堆相似结构的文档数据一个 index 包含多个 document 文档
Index 索引
Type 类型
一个 index 被拆分为多个 shard每个 shard 会存放这个 index 部分数据这些 shard 会被散落到多台服务器shard 其实叫 primary shard,一般简称为 shard
Shard 分片
其实叫 replica shard 一般简称为 replica
replica 副本
Es VS 数据库Document VS 行Type VS 表Index VS 库
Es 概念和数据库概念对比
核心概念
green每个索引的 primary shard 和 replica shard 都是 active 状态yellow每个索引的 primary shard 都是 active 状态 但是部分 replica shard 不是 active 状态red不是所有索引的 primary shard 都是 active 状态 部分索引有数据丢失
健康状态
节点对等,每个节点都能接收所有的请求自动请求路由响应收集
节点平等的分布式架构
横向扩容
自动负载均衡
由候选节点选出,负责管理 ES 集群管理索引的相关操作管理分片的相关操作
Master Node
存储数据,负责数据的增删改查
Data Node
提取节点,和logstash 的功能类似、
Ingest Node
既能当 master 又能存储数据node.master:true node.data:true
只能当 master 不能存储数据node.master:truenode.data:false
不能当 master 只能存储数据node.master:falsenode.data:true
不能当 master 不能存储数据 当作路由node.master:falsenode.data:false
四种组合
Node 角色
document 的路由算法
只要有一个 primar shard 是可用的就可以写成功
one
要求所有的 primar shard 是活跃的。才可以执行写操作
all
要求所有的 shard 中,必须是所有的 shard 是可用的才可以写成功大多数的计算规则:((primary shard + num_of_replicas)/2)+1当 num_of+replicas>1 quorum 机制才会生效
quorum(默认参数)
增删改的操作中可以带一个 consistency 的参数(5.x 版本已经废弃掉)
如何保证写一致性
集群相关
query string search
query DSL
query filter
full-text search
关键词如果匹配上需要的步数
slot
phrase search
highlight search
六种搜索方式
相当于 mysql 中的单个 where 条件
对搜索不分词,直接去倒排索引中匹配,输入什么就匹配什么
term filter/query
对搜索条件设置权重
boost
term、match、range
mustmust_notshouldfilter
组合查询
best fields策略 某一个 field 匹配到了尽可能多的关键字被排在前面,而不是尽可能多的 field 匹配到了少数关键词,排在了前面
除了取 best fields 的最高分以外,还考虑其他 query 的因素
tie_breaker
子主题
dis_max
举例地址可能分布式在省、市、区的字段中
使用 copy_to 语法,将多个字段合为一个字段
使用 multi_match中 type 类型为 cross_fields operater是 and
跨多个 field 搜索
性能差
prefix
前缀搜索(不推荐使用)
扫描整个倒排索引
通配符搜索
搜索推荐
搜索层级关系
举例:地址可能分布式在省、市、区的字段中
正则搜索
hhehelhellhello
举例hello
什么是 ngram
hhehel
max_gram
可以指定最多分多少
\"search_analyzer\": \"standard\"
在指定查询索引必须是 standard
在建立索引的时候就需要指定字段是 ngram 分词
然后在查询的时候就可以直接使用了
怎么使用
ngram
纠错匹配
fuzzy
地址
自定义分词
配置文件
中文分词
聚合分析
搜索语法
日均5亿查询量的京东到家订单中心,为什么舍MySQL用ES?
ElasticSearch集群故障案例分析: 警惕通配符查询
有赞搜索系统的技术内幕
文章相关
避免深分页
在 es 中插入数据 ,es 会自动建立索引,同时建立 type 以及对应的 mapping
mapping 中就自动定义了每个 field 的数据类型
exact value 分词时将整个值作为一个关键词建立倒排索引
分词
时态转换
同义词转换
大小写转换
normaliztion
full text 会经历各种各样的处理
不同的数据类型(比如 text 和 data),可能有的是 exact value 和 full text
不同的数据类型在进行搜索的时候也会按照建立倒排索引的规则一样,去进行处理关键词,然后进行搜索
true or false -> boolean
123 -> long
123.45 - > double
2017-01-01 -> date
\"hello world\" -> string
GET /index/_mapping/type
查看 mapping
可以用 es 的 dynamic mapping 让其自动建立 mapping,自动设置数据类型
也可以提前手动创建 index 和 tyoe 的 mapping,自己对各个 field 进行设置
mapping的过程
只能新增一个 field 的 mapping,对于已有field 的 mapping 不能修改
mapping 的注意点
Mapping
只是按照搜索条件过滤出需要的数据,不计算相关度分数,对相关度没有影响
filter 性能高,不需要计算相关度分数,并且内置自动的 cache 最常使用的 filter 的数据
filter
会去计算每个 document 相对于搜索条件的相关度,并按相关度进行排序
query 性能差,要计算相关度分数,按照分数进行排序,而且无法返回 cache 结果
query
需要将最匹配搜索条件的数据先返回,那么用 query
如果只是根据一些条件筛选出一部分数据,不关注其排序,那么使用 filter
使用场景
利用了 bitset 与 caching 的机制
为什么 filter 效率高
filter 和 query 对比
在搜索的后面加上 explain 参数
explain 参数也可以查看其计算匹配的算法
如何定位不合法的搜索以及其原因
在参数中加上 sort 参数即可
如何定制排序规则
为了搜索
倒排索引
为了排序
正排索引
索引
每次 scroll 搜索都会返回一个 scroll ID
然后下次搜索带上这个 scroll ID 就能搜索下一批的数据
利用 scroll 滚动搜索
分词器
利用es 的索引别名机制可以使应用不停机的切换索引
不需要锁,提升并发能力
数据不变,一直保存在 os cache 中
filter cache 一直驻留在内存,因为数据不变
可以压缩,节省 cpu 和 io 的开销
好处
每次都需要重新构建整个索引
坏处
倒排索引不可变
发生一个document 的写入和修改操作时
每隔一定时间都会刷新一次 buffer 到 index segment 中
内存 buffer 缓冲
index segment
os cache
os disk
document 的写入流程
尽量让数据都在 file system cache 中
es 中只放搜索的数据字段,其他字段从 hbase 中查询
file system cache
数据预热
搞两个索引
一个索引放冷数据,一个索引放热数据
冷热分离
避免复杂的关联查询,复杂的查询语法
document 的数据模型设计
分页性能优化
大数据量的 es 数据如何提升查询效率
实际应用
ES相关
0 条评论
回复 删除
下一页