ElasticSearch学习笔记(六)索引别名

简介: 前面了解了Elasticsearch索引模板的概念,今天我们学习一下Elasticsearch中的别名(Alias)

前面了解了Elasticsearch索引模板的概念,今天我们学习一下Elasticsearch中的别名(Alias)

前面我们创建模板的时候指定了别名,我们直接使用前面的索引模板创建索引,同时添加一些测试数据

#创建索引
PUT logs-20230614

#准备数据

POST /logs-20230614/_bulk
{
    "index": {
   }}
{
    "user_id": 2,"operate":"登录", "timestamp": "2023-06-14 08:09:50" }
{
    "index": {
   }}
{
    "user_id": 2,"operate":"退出", "timestamp": "2023-06-14 09:09:50" }

我们可以通过单个索引来查询对应的文档数据

GET logs-20230614/_search

#返回结果
{
   
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
   
    "total" : 3,
    "successful" : 3,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
   
    "total" : {
   
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
   
        "_index" : "logs-20230614",
        "_type" : "_doc",
        "_id" : "Et6yuIgBA6ekKo2Ikb-e",
        "_score" : 1.0,
        "_source" : {
   
          "user_id" : 2,
          "operate" : "登录",
          "timestamp" : "2023-06-14 08:09:50"
        }
      },
      {
   
        "_index" : "logs-20230614",
        "_type" : "_doc",
        "_id" : "E96yuIgBA6ekKo2Ikb-e",
        "_score" : 1.0,
        "_source" : {
   
          "user_id" : 2,
          "operate" : "退出",
          "timestamp" : "2023-06-14 09:09:50"
        }
      }
    ]
  }
}

我们也可以通过别名logs来查询多个索引的数据

GET logs/_search

#返回结果
{
   
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
   
    "total" : 9,
    "successful" : 9,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
   
    "total" : {
   
      "value" : 6,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
   
        "_index" : "logs-20230613",
        "_type" : "_doc",
        "_id" : "EN6yuIgBA6ekKo2Ihb-8",
        "_score" : 1.0,
        "_source" : {
   
          "user_id" : 1,
          "operate" : "登录",
          "timestamp" : "2023-06-13 08:09:50"
        }
      },
      {
   
        "_index" : "logs-20230613",
        "_type" : "_doc",
        "_id" : "Ed6yuIgBA6ekKo2Ihb-8",
        "_score" : 1.0,
        "_source" : {
   
          "user_id" : 1,
          "operate" : "退出",
          "timestamp" : "2023-06-13 09:09:50"
        }
      },
      {
   
        "_index" : "logs-20230614",
        "_type" : "_doc",
        "_id" : "Et6yuIgBA6ekKo2Ikb-e",
        "_score" : 1.0,
        "_source" : {
   
          "user_id" : 2,
          "operate" : "登录",
          "timestamp" : "2023-06-14 08:09:50"
        }
      },
      {
   
        "_index" : "logs-20230613",
        "_type" : "_doc",
        "_id" : "Fd7PuIgBA6ekKo2Itb_i",
        "_score" : 1.0,
        "_source" : {
   
          "user_id" : 1,
          "operate" : "修改用户信息",
          "msg" : "成功",
          "timestamp" : "2023-06-13 10:30:50"
        }
      },
      {
   
        "_index" : "logs-20230613",
        "_type" : "_doc",
        "_id" : "FN7PuIgBA6ekKo2Itb_i",
        "_score" : 1.0,
        "_source" : {
   
          "user_id" : 1,
          "operate" : "登录",
          "msg" : "成功",
          "timestamp" : "2023-06-13 10:09:50"
        }
      },
      {
   
        "_index" : "logs-20230614",
        "_type" : "_doc",
        "_id" : "E96yuIgBA6ekKo2Ikb-e",
        "_score" : 1.0,
        "_source" : {
   
          "user_id" : 2,
          "operate" : "退出",
          "timestamp" : "2023-06-14 09:09:50"
        }
      }
    ]
  }
}

通过上面的例子,我们可以看到:查询别名logs的数据的时候同时返回了索引logs-20230613logs-20230614的数据。别名实际上就是一个指向一个或多个索引的指针,它可以用于简化查询,为索引进行重命名,便于管理和版本控制等。

以下是一些常见的别名操作:

  1. 添加别名:使用 _aliases API 可以将一个或多个索引添加到新的别名中,例如:
POST /_aliases
{
   
  "actions": [
    {
    "add": {
    "index": "my_index", "alias": "my_alias" } }
  ]
}

在上面的例子中,我们将 "my_index" 添加到新别名 "my_alias" 中,如果该别名不存在,则会自动创建它。

  1. 删除别名:要删除别名,请使用 _aliases API 并指定要移除的别名和索引名称,例如:
POST /_aliases
{
   
  "actions": [
    {
    "remove": {
    "index": "my_index", "alias": "my_alias" } }
  ]
}

以上命令将从别名 "my_alias" 中移除 "my_index",如果别名不再映射到任何索引,则该别名将被删除。

  1. 更新别名:要将现有别名更新为新的索引,请使用 _aliases API 并指定要添加和删除的索引,例如:
POST /_aliases
{
   
  "actions": [
    {
    "add": {
    "index": "new_index", "alias": "my_alias" } },
    {
    "remove": {
    "index": "old_index", "alias": "my_alias" } }
  ]
}

在上面的例子中,我们将 "new_index" 添加到 "my_alias" 中,并将 "old_index" 从别名中移除。

  1. 灰度发布:别名还可以用于实现平滑的索引版本升级。具体来说,我们可以使用别名分配新版本的索引,并逐步移除旧版本的索引,例如:
POST /_aliases
{
   
  "actions": [
    {
    "add": {
    "index": "new_index", "alias": "my_alias" } },
    {
    "remove": {
    "index": "old_index", "alias": "my_alias" } }
  ]
}

在上面的例子中,我们添加了新索引 "new_index" 到别名 "my_alias" 中,并逐步将旧索引 "old_index" 从别名中移除。

以下是使用别名的常见用途:

  1. 灰度发布:当我们需要对当前正在使用的索引进行升级或更改时,可以使用别名来实现平滑过渡。具体做法是,将新版本的索引添加到别名中,并逐步从别名中移除旧版本。这样,我们可以平滑地切换到新的索引版本,同时避免数据重复或丢失。
  2. 搜索路由:别名可以将多个相关联的索引捆绑在一起,并在查询时自动路由到它们中的正确索引。例如,如果我们有一个分布式索引集群,其中包含多个具有相同数据结构的索引,可以通过一个别名进行搜索并向各个节点发送查询请求。
  3. 数据备份:使用别名的另一个常见用途是实现数据备份和恢复。具体来说,我们可以建立一个别名,将需要备份的索引添加到其中,并将别名导出为独立的文件。在需要恢复数据时,只需将备份文件导入并将其作为别名即可。
  4. 提高查询效率:在某些场景下,需要对多个索引进行查询或分组。通过使用别名,可以将多个索引组合成一个虚拟索引,从而简化查询操作,提高查询效率。
  5. 实现索引的分组和组合:别名的灵活性还表现在可以对索引进行分组和组合。例如,可以将一个时间段内的所有索引组合成一个虚拟索引,从而方便地查询这个时间段内的所有数据。
相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
自然语言处理 大数据 应用服务中间件
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
268 5
|
存储 分布式计算 大数据
大数据-169 Elasticsearch 索引使用 与 架构概念 增删改查
大数据-169 Elasticsearch 索引使用 与 架构概念 增删改查
213 3
|
存储 API 数据库
检索服务elasticsearch索引(Index)
【8月更文挑战第23天】
666 6
|
存储 缓存 监控
优化Elasticsearch 索引设计
优化Elasticsearch 索引设计
256 5
|
存储 JSON 关系型数据库
Elasticsearch 索引
【11月更文挑战第3天】
290 4
|
测试技术 API 开发工具
ElasticSearch7.6.x 模板及滚动索引创建及注意事项
ElasticSearch7.6.x 模板及滚动索引创建及注意事项
199 8
|
JSON 自然语言处理 数据库
ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入
概念、ik分词器、倒排索引、索引和文档的增删改查、RestClient对索引和文档的增删改查
ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入
|
存储 搜索推荐 数据建模
Elasticsearch 的数据建模与索引设计
【9月更文第3天】Elasticsearch 是一个基于 Lucene 的搜索引擎,广泛应用于全文检索、数据分析等领域。为了确保 Elasticsearch 的高效运行,合理的数据建模和索引设计至关重要。本文将探讨如何为不同的应用场景设计高效的索引结构,并分享一些数据建模的最佳实践。
555 2
|
JSON 自然语言处理 数据库
Elasticsearch从入门到项目部署 安装 分词器 索引库操作
这篇文章详细介绍了Elasticsearch的基本概念、倒排索引原理、安装部署、IK分词器的使用,以及如何在Elasticsearch中进行索引库的CRUD操作,旨在帮助读者从入门到项目部署全面掌握Elasticsearch的使用。
|
自然语言处理 Java 索引
ElasticSearch 实现分词全文检索 - Java SpringBoot ES 索引操作
ElasticSearch 实现分词全文检索 - Java SpringBoot ES 索引操作
210 0

热门文章

最新文章