es简介
index与shard
- index: 逻辑空间概念,每个索引都有自己的mapping定义,用于定义包含文档的字段名和字段类型
- shard: 体现了物理空间的概念:索引数据分散在shard上.
7.0之前有type,7.0之后只有一个type
_doc
mapping与setting
- mapping定义文档类型
- setting定义存储类型,不同的数据分布
字段
字符串,数值,bool,date,二进制,范围类型
集群
不同集群通过不同命名区分
修改配置文件或者 命令行启动 -E cluster.name=XXXX
一个集群可以有多个节点.
节点
节点就是一个es实例(java进程)
节点命名修改配置文件或者 -E node.name=XXXX
节点启动后会分配一个uid,保存在data目录下
每个节点启动后,默认就是一个master-eligible节点
配置文件 node.master:false
禁止
master与master-eligible
可以参加选主流程,成为master节点
第一个节点启动时,将自己选举为master节点.
每个节点都保存了集群状态,只有master节点能修改集群信息
集群状态
: 维护了集群中必要信息
- 所有节点信息
- 所有索引和其相关的mapping和setting
- 分片的路由信息
任意节点都能修改信息会导致数据不一致性
data与coordinate
保存分片数据
coordinate接收client请求,分发到不同node,然后再汇总返回.
每个节点都起到coordinate节点的作用
其他节点
冷热节点,机器学习节点…
节点配置
- 开发环境一个节点可以承担多个角色
- 生产环境应该设置单一的角色节点
参数: node.master,node.data, node.ingest,node.ml(需 enable-xpack) 默认值都为true
分片
primary shard
replica shard
主分片
主分片: 解决数据水平扩展的问题.通过主分片,将数据分布到集群内的所有节点之上.
主分片数在索引创建时指定,后续不允许修改,触发reindex
一个分片运行的是一个lucene实例
副本
解决数据高可用问题(主分片的拷贝)
副本片数:动态调整
增加副本数,可以在一定程度上提高服务的可用性(读的吞吐)
健康状态
green
yellow 副分片无法分配
red 主分片无法分配
分词
_analyze api
- 直接指定analyzer进行测试
1
2
3
4
5Get /_analyze
{
"analyzer":"standard",
"text":"xxxx"
} - 指定索引的字段进行测试
1
2
3
4
5POST indexName/_analyze
{
"field":"title",
"text":"xxxx"
} - 自定义分词进行测试
1 | POST /_analyze |
standard-analyzer
按照空格/非字母方式
字母转小写
simple-analyzer
按照非字母切分,非字母的被去除
字母小写处理
whitespace-analyzer
stop-analyzer
会把 the a is 等修饰性词汇去除
keyword-analyzer
不分词,将输入作为输出
(对输入不需要做分词时,选择keyword-analyzer)
pattern-analyzer
通过正则表达式分词
默认是\W+
,非字符的符号进行分割
language-analyer
中文分词
icu-analyzer
IK 支持自定义词库,热更新分词词典
thulac 清华大学
搜索
URI search
request body search
脚本字段