自学ES-02之索引CRUD

[toc]

注:下面的操作都是在 kibana 中进行的。

索引(index)

索引的创建

1
2
3
4
5
6
7
8
9
10
11
PUT /{index_name}
{
settings: {
...
}
mappings: {
properties: {
...
}
}
}

索引查看

1
GET /{index_name}

索引删除

1
DELETE /{index_name}

索引打开和关闭

ES 支持对索引进行关闭操作,关闭后也可以重新打开。索引一旦关闭:

  • 不能写入数据
  • 不能搜索数据

kibana

1
POST /{index_name}/_close

索引关闭后,再对索引进行数据写入或搜索,将返回如下报错信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"error" : {
"root_cause" : [
{
"type" : "index_closed_exception",
"reason" : "closed",
"index_uuid" : "wnmGfLi-TPCanl-YuBNojg",
"index" : "sjl"
}
],
"type" : "index_closed_exception",
"reason" : "closed",
"index_uuid" : "wnmGfLi-TPCanl-YuBNojg",
"index" : "sjl"
},
"status" : 400
}

打开索引

1
POST /{index_name}/_open

索引别名

可以对多个索引设置相同的别名,从而将这些索引通过别名进行聚合,然后再对设置别名的索引进行操作,就相当于是在同时操作这些别名匹配的索引。

映射(mappings)

创建映射

映射是在创建索引时一并指定。映射可以理解为关系型数据库中的表定义。一张表有哪些字段,每个字段什么类型。

查看映射

1
2
3
4
5
6
7
8
9
10
11
12
13
GET /{index_name}/_mapping
#返回数据
{
"sjl" : { #索引名称
"mappings" : { #映射相关信息
"properties" : {
"title" : {
"type" : "keyword"
}
}
}
}
}

修改映射

映射不能修改,只能扩展。,如果需要修改映射的字段类型的时候应该怎么办?

1
2
3
4
5
6
7
8
9
# 扩展映射 
POST /sjl/_mapping
{
"properties": {
"name": {
"type": "text"
}
}
}

数据类型

keyword

keyword 类型是不能再切分的字符串类型。在搜索的时候,不对 keyword 类型的字符串进行切分后的部分匹配。使用 term 查询数据。

text

text 精英是可切分的字符串类型。在搜索的时候,会按照分词算法对 text 类型的字符串进行切分后匹配。使用 match 查询数据。

数值类型

  • long(长整型):8字节,64位, $-2^{63}$ —— $2^{63}$-1

  • integer(整型):4字节,32位,$-2^{31}$ —— $2^{31}$-1

  • short(短整型):2字节,16位,$-2^{15}$ —— $2^{15}$-1

  • byte(字节):1字符,8位,$-2^{7}$ —— $2^{7}$,即 -128——127

  • double(双精度):8字节,64位。

  • float(单精度):4字节,32位

  • half_float(半精度):2字符,16位。

  • scaled_float(缩放浮点型)

  • unsigned_long(无符号长整形):6字节,64位。$2^{64}-1$

布尔(boolean)

  • true 或 “true”
  • false 或 “false”

日期类型(date)

日期类型为两种:

  • strict_date_optional_time:严格的日期类型,yyyy-MM-dd、yyyyMMdd、yyyyMMddHHmmss、yyyy-MM-ddTHH:mm:ss、yyyy-MM-ddTHH:mm:ss.SSS和yyyy-MM-ddTHH:mm:ss.SSSZ
  • epoch_millis:时间戳类型

数组

ES 定义的格式,自动支持数组。在定义时,使用数组的内容项的类型定义 mapping 即可。写入数据时,使用 [] 的形式。

1
2
3
4
POST /{index_name}/001
{
"tag": ["tag1", "tag2"]
}

tag 定义的是 keyword 的类型。

对象

与普通的对象操作一致。

示例:

1