Elasticsearch常用的DSL脚本

Posted by Qiuyu Zhang on 2019-10-22

Elasticsearch常用的DSL脚本

  • 以下所有脚本执行都是使用Elasticsearch可视化工具Elasticsearch-head执行的,如果没有安装可以查看
    搭建Elasticsearch

新建索引

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
put http://localhost:9200/my_index_v1
{
"settings": {
"index": {
"refresh_interval": "60s",
"number_of_shards": "10",
"number_of_replicas": "1"
}
},
"mappings": {
"my_index": {
"dynamic": "strict",
"properties": {
"name": {
"type": "keyword"
},
"gender": {
"type": "keyword"
}
}
}
}
}

如图所示添加成功

索引增加别名

1
put http://localhost:9200/my_index_v1/_alias/my_index

查询索引别名

1
get http://localhost:9200/my_index_v1/_alias/

查询结果如图所示

查看别名指向了哪些索引

1
get http://localhost:9200/_alias/my_index

##Elasticsearch添加索引别名的好处以及操作

  • 索引别名就像一个快捷方式或软连接,可以指向一个或多个索引,也可以给任何一个需要索引名的API来使用,而且别名不能与索引同名。
  • 别名带给我们极大的灵活性,允许我们做下面这些:
    1. 在运行的集群中可以无缝的从一个索引切换到另一个索引。
    2. 给多个索引分组。
    3. 给索引的一个子集创建视图。
  • 修改别名指向新的索引,(当数据已经迁移到新的索引时候可以让别名执行新的索引,下面例子是从my_index_v1升级到my_index_v2的操作)
    *. Elasticsearch索引别名管理支持单个索引操作也支持多个索引操作
    1. 单个索引操作: _alias
    2. 多个索引操作: _aliases
    • 下面命令使用的是多个索引操作,删除my_index_v1的别名,在my_index_v2上面新建这个别名
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      post http://localhost/_aliases/
      {
      "actions": [
      {
      "remove": {
      "index": "my_index_v1",
      "alias": "my_index"
      }
      },
      {
      "add": {
      "index": "my_index_v2",
      "alias": "my_index"
      }
      }
      ]
      }
      Es的查询是基于索引别名来查询的,所以我们在完成数据迁移之后,只需要把原始的索引别名指向新的索引就可以实现零停机升级索引了

原始mapping里面增加字段

1
2
3
4
5
6
7
8
put http://localhost:9200/my_index_v1/_mapping/my_index
{
"properties": {
"age": {
"type": "integer"
}
}
}

如果所示增加成功

mapping新增时间字段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
put http://localhost:9200/my_index_v1/_mapping/my_index
{
"dynamic_date_formats": [
"yyyy-MM-dd",
"yyyy-MM-ddHH: mm: ss",
"yy-MM-ddHH: mm: ss",
"date_optional_time"
],
"properties": {
"createTime": {
"type": "long"
},
"updateTime": {
"type": "long"
}
}
}


添加数据

1
2
3
4
5
6
post http://localhost:9200/my_index_v1/my_index
{
"name": "zhangsan",
"gender": "male",
"age": 20
}

如图所示添加数据成功

查询全部数据

1
2
3
4
5
6
7
8
9
10
post http://localhost:9200/my_index_v1/_search
{
"query": {
"bool": {
"must": {
"match_all": {}
}
}
}
}

  1. took:表示查询执行时长(单位是毫秒)
  2. time_out:查询是否超时:如果是true证明查询超时,【注】超时不代表此次查询操作就会直接终止,es其实后台还在继续执行
  3. _shards:分片的详情
  4. hits:查询的数据详情
  5. total:查询到的总数

分页查询

  • 分页查询正常情况下我们使用的是如下DSL脚本,但是这种脚本有一个坑,Elasticsearch本身有一个限制,当from大于等于10000的时候就会报错
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    {
    "query": {
    "bool": {
    "must": {
    "match_all": {}
    }
    }
    },
    "from": 0,
    "size": 1
    }

删除符合条件下的所有数据

1
2
3
4
5
6
7
8
9
10
11
12
post http://localhost:9200/my_index_v1/_delete_by_query
{
"query": {
"bool": {
"must": {
"match": {
"name": "zhangsan"
}
}
}
}
}