ES
es学习和实践思维导图
使用场景
搜索引擎
elk
站内搜索
特点
1. 默认配置
2. 分布式,可扩展,对等架构p2p
3. 无模式
4. 准实时
3. 故障检测
-
- master node
4. 故障恢复
-
- rebalance
-
- 选主
集群架构
高可用
-
故障恢复转移
-
选主
-
节点数
- 节点数=分片数*(副本数+1)
- 过半
-
节点类型
-
data
-
候选
-
master
-
协调节点
- 非以上几种就可以
-
-
子主题 3
- https://zhuanlan.zhihu.com/p/35291900
-
-
分片
-
路由
- routing参数
-
复制
集群管理
-
文件系统
-
别名
-
扩容
- 多索引
- 索引别名
- 朱分片扩容
-
故障处理
- jvm
- swap
- io限速
- 预热器
- 热点线程
一致性
-
translog
- flush
-
段合并refresh
-
合并调度器
-
- 并发
-
- 顺序
-
-
增加io量
-
- 段合并减少段的数量,删除被标记删除的段
-
-
commit
高性能
-
缓存
-
子主题 2
- term 查询比一个短语查询大约快 10 倍,比邻近查询(有 slop 的短语 查询)大约快 20 倍
扩展性
- rebalance
- 节点发现
数据建模
嵌套对象
- 是在一个文档内
- 嵌套多时性能差
父子文档
- 是独立的文档
- 构成一对多的关系:一个父文档可以对应多个子文档
- 层级多时性能差
基本操作
1. crud
-
查询
-
term查询
-
超时
-
phrase查询
-
range
-
bool
-
fuzzy
-
wilcard
-
geo
-
区间查询
-
过程
- query and fetch两阶段查询
-
-
updte
-
更新并发冲突
- retry_on_conflict
- 内外部版本号
-
内外部id
-
一致性
-
写多少个分片成功才返回
-
同步异步
-
在内存buffer中的能看到版本号?
-
方案
- 读主分片
- 强制refresh
-
官网
- Elasticsearch 使用这个 _version 号来确保变更以正确顺序得到执行。如果旧版本的文档在新版本之后到达,它可以被简单的忽略。
-
-
局部更新
- 文档不可变性
-
-
性能
- shingles
- 短语查询很慢
组合查询
2. 分页
3. 排序
4. 过滤
5. 切面
- 聚合
6. 高亮
7. 建议
8. 计数
9. 滚动
10. 批量
11. precolator
-
1. 逆查询
-
2. 某个文档相关的所有已进行过的查询
12. expalin
13. analyze
相关性优化
lucene
-
- 文档
-
- doc
-
- 字段
-
- filed,字段名称和内容
-
- 词项
-
- term
-
- 词条
-
- token ,词项在字段中的一次出现包括词项和位移和类型
-
- 段:多个段组成一个索引
-
- 分析器,用于分析文档,创建索引
-
- 分词器
-
1. 将文本,切成token包含term和位移信息,输出词条流
-
- 过滤器
-
1. 同义词
-
2. 词干还原
-
3. 大小写
-
1. 处理词条流的词条,修改或者删除
-
- 字符映射器
-
1. 用于文本预处理
-
ik
- 扩展词库
- 停用词
-
词向量
-
- 保存字段的所有词条
-
dsl进阶
-
评分公式
-
算法
-
tfidf
- 7个因素
-
bm25
-
。。。
-
-
特点
-
- 罕见词项匹配到得分高
-
- 字段越短得分高
-
- 权重高德妃高
-
-
-
查询改写
- ElasticSearch(实际上是Lucene执行该操作)使用查询改写是出于对性能的考虑。从Lucene的角度来看,所谓的查询改写操作,就是把费时的原始查询类型实例改写成一个性能更高的查询类型实例。
-
二次评分
- 在返回结果子集上做排序,性能佳
-
- rescore:{}
-
filter
-
精度控制
-
bool
- minimum_should_match 参数控制需要匹配的 should 语句的数量
- must
- should
- 查询term权重
-
搜索体验
-
拼写纠错
-
相关性
-
- 使用_all 匹配_ _source所有json内容
-
- multi match 字段加权重
- 字段权重field^100
-
- 引入短语查询和bool查询,叠加bool
-
- 引入slop 短语距离,短语中单词的差异数
-
- filter过滤垃圾信息
-
- 调整查询字段的短语查询的权重
- 子查询权重
- boost factor
-
插件开发
XMind - Trial Version