es系列: 索引

ES的数据结构

 

我们常用的几个类型也就是这几种 text、keyword、byte、short、integer、long、float、double、boolean、date,其中text和keyword都是string类型,选择区分很简单,需要进行分词用text,不需要并且进行排序或聚合的可以用keyword。

创建索引库

PUT /my_index
{
    "settings": { ... any settings ... },
    "mappings": {
        "type_one": { ... any mappings ... },
        "type_two": { ... any mappings ... },
        ...
    }
}
PUT employee_zcy
{
  "settings": {
    "number_of_shards": 6,
    "number_of_replicas": 1,
    "refresh_interval": "1s"
  },
  "mappings": {
    "properties": {
      "uid": {
        "type": "long"
      },
      "phone": {
        "type": "long"
      },
      "message": {
        "type": "keyword"
      },
      "msgcode": {
        "type": "long"
      },
      "saymessage":{
        "type": "text"
      },
      "sendtime": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss"
      }
    }
  }
}

查看索引信息

GET employee_zcy
{
  "employee_zcy" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "message" : {
          "type" : "keyword"
        },
        "msgcode" : {
          "type" : "long"
        },
        "phone" : {
          "type" : "long"
        },
        "saymessage" : {
          "type" : "text"
        },
        "sendtime" : {
          "type" : "date",
          "format" : "yyyy-MM-dd HH:mm:ss"
        },
        "uid" : {
          "type" : "long"
        }
      }
    },
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "refresh_interval" : "1s",
        "number_of_shards" : "6",
        "provided_name" : "employee_zcy",
        "creation_date" : "1644299286987",
        "number_of_replicas" : "1",
        "uuid" : "KGBbvVAPSyerW-BYe9VDdA",
        "version" : {
          "created" : "7170099"
        }
      }
    }
  }
}
  • number_of_shards: 是设置的分片数,设置之后无法更改!
  • refresh_interval: 是设置es缓存的刷新时间,如果写入较为频繁,但是查询对实时性要求不那么高的话,可以设置高一些来提升性能。可以更改
  • number_of_replicas : 是设置该索引库的副本数,建议设置为1以上。

 查询一次查询多个索引

GET project_d*
返回 project_d开头的索引的信息

修改索引副本 增加或减少

都可以的

添加:_settings
PUT /my_temp_index/_settings
{
    "number_of_replicas": 1
}

 修改索引分片 增加或减少

不可以, 索引一旦创建后,不可以修改

如何向已有类型(表)中添加新字段?

PUT projecy_zcy/_mapping
{
  "properties":{
    "projectStatus":{
      "type":"keyword"
    }
  }
}

如何更改现有类型(表)中的字段类型?

不可以修改

可以对该字段增加类型

原来是
projectName":{
      "type":"text"


可以增加"fields":{
        "keyword":{ 
是可以的
PUT projecy_zcy/_mapping
{
  "properties":{
    "projectName":{
      "type":"text",
      "fields":{
        "keyword":{
          "type":"keyword"
        }
      }
    }
  }
}

索引别名

有时候,需要将已有的索引做些调整重建为另外一个索引,但是为了不影响线上的访问,需要无缝切换到新的索引上

这里选择通过 alias 来切换索引,因为 alias 中的多条命令是原子性。

POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "projecy_zcy2",
        "alias": "projecy_zcy"
      }
    },
    {
      "remove_index": {
        "index": "projecy_zcy"
      }
    }
  ]
}

actions 中的多条命令是原子性的,所以可以做到无缝切换,不必担心切换过程中会存在访问不到 projecy_zcy2 时候

actions 中第一条命令:add 命令,给索引 projecy_zcy2 添加了一个别名 projecy_zcy。
actions 中第二条命令:remove_index, 删除原来的 projecy_zcy 索引。
执行之后,原来的 projecy_zcy 索引会被删除,而对于访问方而言,访问的索引依然是 projecy_zcy,不过访问的是一个别名,底层实际访问的索引已经是 projecy_zcy2了

GET projecy_zcy* 

 重建索引

elasticsearch索引一旦建立,就无法动态修改其字段的映射类型,有时候因为人为原因污染了索引的mapping,这个时候就只能通过重建索引来修改索引的mapping设置了。

当初索引中字段类型不正确,需要调整,由于字段无法修改类型, 可以通过2种方式

第一种方案,给这个索引追加一个新的字段,同时给这个字段指定类型。冗余一个字段

第二种方案:使用 elasticsearch 提供的 reindex api 来迁移数据,创建新的索引。

首先创建好目标索引,并设置好mapping,之后,使用 reindex 将原来的索引重建到新的索引上:

POST _reindex
{
  "source": {
    "index": "projecy_zcy"
  },
  "dest": {
    "index": "projecy_zcy2"
  }
}
等待 reindex 完成后, projecy_zcy2  就结构就就是你想要的mapping了。

删除索引

DELETE my_index
删除多个 
delete  my_index*  

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值