索引操作
PUT 和 POST 的区别:
相对来说PUT
偏向于创建,POST
偏向于更新,其实使用场景不同。在索引(indexing
)数据时,PUT
需要指定 id
,POST
可以自动生成。
CRUD的API使用示例及区别:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36#查看索引
GET _cat/indices
#索引文档,已有id的会删除重建,版本号+1
PUT index_name/_doc/1
{
"user":"elasticsearch",
"comment":"you know,for search"
}
#创建文档,已有id会报错。
PUT index_name/_create/1
{
"user":"elasticsearch",
"comment":"you know,for search"
}
#创建文档,不指定id,自动生成
POST index_name/_doc
{
"user":"elasticsearch",
"comment":"you know,for search"
}
#查询
GET index_name/_doc/1
#更新,不会删除旧文档,真正的更新
POST index_name/_update/1
{
"user":"elasticsearch",
"comment":"document update"
}
#删除
DELETE index_name/_doc/1
节点类型
Master eligible
节点和Master
节点。eligible
标识该节点是否参与选举。通过设置node.master=false
禁止。第一个节点在启动时,会将自己设置为master
。每个节点都保存了集群的状态(state
),但只有master
可以进行更改(确保数据的一致性)。DataNode
,存放数据的节点,负责保存分片数据。Coordinating
节点,负责接收client
的请求,将请求分发给合适的节点。最终汇聚结果,每个节点默认都起到了Coordinating Node
的职责。Hot&Warm
节点,不同硬件的DataNode
。Hot&Warm
架构用于降低部署成本MachineLearning
节点,机器学习节点。TribeNode
,5.3后开始加入的,用于连接到不同集群,且支持当做新的集群来处理。
节点类型 | 配置参数 | 默认值 |
---|---|---|
Master eligible | node.master | true |
Data | node.data | true |
Ingest | node.ingest | true |
Coordinating | 无 | 每个节点都是coordinating。设置其他类型全为false |
MachineLearning | node.ml | true(需enable-xpack) |
经常提到的 reIndex 和 alias 到底是什么?
reIndex
也称为索引重建。很多时候会遇到诸如:分片数设置错误、mapping
设置错误等。此时就只能选择 reindex
,因为这些属性在创建后就不能进行修改。只能进行索引重建
集群颜色体现了什么
查看集群状态1
GET _cluster/health
Green
代表所有主副分片均正常,Yellow
代表主分片正常,有副本未能正常分配,Red
代表有主分片为正常分配,如磁盘不足时,新建了一个索引
分片和副本
分片是将一份数据分成多个,水平扩展存储到不同机器,提高存储量。
副本是将一份数据复制为两份或更多,避免数据丢失。
搜索类型
match、term、terms、constant score等.....
match_phrase
match_phrase_prefix
query_string
,相对来说更智能,可以识别and
和or
simple_query_string
,更笨重一些,无法识别and
和or
,但可以通过default_oparator
进行控制。
1 | // 假设数据有三条,elasticsearch函数、kibana函数、logstash函数。 |
数据类型
text/keyword
Date
,建立mapping
时,需要指定format
Integer/Floating
boolean
IPv4/IPv6
- 复杂类型,对象和嵌套对象。
- 特殊类型,
geo_point,geo_shape,percolator
mapping 和 DynamicMapping
mapping
指的是字段的映射信息,即每个字段的数据类型,分词配置等等。mapping
创建后,可以新加字段,但不能修改已有字段的 mapping
,要修改已有字段只能进行 reindex
操作。
1 | PUT search_jw_words |
在写入文档时,如果索引不存在,es
会自动创建索引。此时,使用到的 mapping
映射就叫做 DynamicMapping
。但默认的 DynamicMaapping
会出现识别错误的情况。例如地理位置类型推断错误,分词器选择错误等等。所以就需要人为定义好DynamicMapping
,减少识别错误的问题,实际使用中,其实用的不多,还是人工定义 mapping
更适合。
1 | //查看某索引的mapping |
null_value
对于插入的字段值为 “NULL” 且需要对其进行检索时,可以使用 null_value
(只有 keyword
类型支持设定 null_value
)
1 | PUT movies |
copy_to
拷贝字段到额外的新字段上,用于满足特性的搜索需求,由于老版本的 “_all” 已经去掉,copy_to
可以用于实现类型的功能:
1 | PUT users |
数组类型
es
不提供专门的数组类型,任何类型都可以存储多个值,即每种类型都可以存储数组。
1 | PUT users/_doc/1 |
多字段类型
基于不同需求情况下,可能会遇到同样的内容需要被中文检索到,也要被英文检索到。那次此时就可以使用到多字段类型:
1 | PUT products |
自定义分词器
自定义分词器分为以下三个部分:
charfilter
,增加、替换或删除字符串tokenizer
,分词filter
,过滤- 组合成
analyzer
1 | 自定义分析器标准格式是: |
indexTemplate和DynamicTemplate
当一个索引被创建时,会按照以下步骤顺序进行:
- 应用
es
默认的settings
和mappings
- 应用
order
数值更低的indexTemplate
的设定 - 应用
order
更高的indexTemplate
的设定,会覆盖之前相同的属性 - 应用创建索引时,用户手动指定的
settings
和mappings
,覆盖之前相同的属性
1 | PUT _template/template_default |
DynamicTemplate
用于对新字段进行模板映射,当 dynamicTemplates
匹配到该字段时,就会应用已经设置好的 mapping
。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68PUT my_index
{
"mappings":{
"dynamic_templates":[
{
"string_as_boolean":{
"match_mapping_type":"string",
"match":"is*",
"mapping":{
"type":"boolean"
}
}
},
{
"string_as_keywords":{
"match_mapping_type":"string",
"mapping":{
"type":"keyword"
}
}
}
]
}
}
//测试
PUT my_index/_doc/1
{
"firstName":"zhang"
"isMan":"true"
}
GET my_index/_mapping
DELETE my_index
PUT my_index
{
"mappings":{
"dynamic_templates":[
{
"full_name":{
"path_match":"name.*",
"path_unmatch":"*.middle",
"mapping":{
"type":"text",
"copy_to":"full_name"
}
}
}
]
}
}
PUT my_index/_doc/1
{
"name":{
"first":"张",
"middle":"尼古拉斯",
"last":"三"
}
}
//测试
GET my_index/_search
{
"query": {
"match": {
"full_name": "张三"
}
}
}
聚合
聚合总体可以分为一下几个大类别:
bucket aggregation
,满足特定条件的某些聚合metric aggregation
,一些数学运算,可以对文档字段进行统计分析pipeline aggregation
,对其它的聚合结果进行二次聚合Matrix aggregation
,支持对多个字段的操作,并提供一个结果矩阵。
bucket
可以简单理解为 sql
语句的 group by
操作,metric
可以理解为 sql
的 count
函数。