Elasticsearch基础操作

本文介绍了Elasticsearch的基础操作,包括创建、查看、删除和管理索引,以及索引别名的设置。同时,详细讲解了映射操作,如新建、查看和扩展映射。此外,还涵盖了文档的写入、更新、查询和删除等核心功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

索引操作

创建索引

在创建索引时,可以设置索引的参数,定义索引的映射;当然,如果不需要自定义,则可以完全省略。

// 语法:
PUT /${index_name}
{
  "settings": {                // 对索引的参数进行设置
    ...
  },
  "mappings": {                // 定义索引的映射
    ...
  }
}
  
// 示例:
PUT /hotel
{
  "settings": {
    "number_of_shards": 15,     // 主分片数
    "number_of_replicas": 2     // 主分片的副本数
  },
  "mappings": {
    "properties": {
      ...
    }
  }
}

查看索引

// 查看索引列表
GET /_cat/indices?v&pretty  // ?表示后面接此次请求的参数,多个参数用&连接; v表示显示标题行,pretty表示已更美观的形式显示

// 查看索引中的信息
GET /hotel    // 可以看到别名、mapping、设置信息

删除索引

// 语法:
DELETE /${index_name}

// 示例:
DELETE /hotel

关闭索引

关闭索引后,不能对索引进行搜索与写入,但是可以通过ES的API或者监控工具看到索引的元数据信息。

// 语法
POST /${index_name}/_close

// 示例
POST /hotel/_close

打开索引

重新开启索引的搜索与写入功能

// 语法
POST /${index_name}/_open

// 示例
POST /hotel/_open

索引别名

作用:可以将多个索引设置为同一个别名,搜索时,指定别名即可在多个索引中进行搜索。

// 增加索引别名
POST /_aliases
{
  "actions": [
    {
      "add": {
        "index": "${index_name}",
        "alias": "${index_alias}"
      }
    }
  ]
}

// 删除索引别名
POST /_aliases
{
  "actions": [
    {
      "remove": {
        "index": "${index_name}",
        "alias": "${index_alias}"
      }
    }
  ]
}

// 查看索引别名
GET /${index_name}/_alias

需要注意的是,当索引别名只有一个后端索引时,写入数据时可以指定该别名;当索引别名有多个后端索引时,写入数据时不能指定该别名。

这种情况需要在别名设置时,将目标索引的is_write_index属性值设置为true来指定该索引可用于执行数据写入操作。

POST /_aliases
{
  "actions": [
    {
      "add": {
        "index": "${index_name}",
        "alias": "${index_alias}",
        "is_write_index": true          // 同一别名只能定义一个索引为可写
      }
    }
  ]
}

映射操作

映射可以由ES自动创建(动态映射),也可以手动创建(显示映射)。

字段所能配置的类型请参考:Elasticsearch字段类型

新建映射

PUT /${index_name}
{
  "mappings": {
    "properties": {
      "FIELD": {
        "type": "TYPE"
      },
      "FIELD": {
        "type": "TYPE"
      },
      "FIELD": {
        "type": "TYPE"
      }
    }
  }
}

// 示例
PUT /march_log
{
  "mappings": {
    "properties": {
      "uid": {
        "type": "keyword"
      },
      "hotel_id": {
        "type": "keyword"
      },
      "check_in_date": {
        "type": "keyword"
      }
    }
  }
}

查看映射

// 查看所有映射
GET /${index_name}/_mapping

// 查看单个字段的映射
GET /${index_name}/_mapping/field/${field_name}

扩展映射

映射中已有的字段类型是不可以修改的,但是字段可以扩展。

PUT /${index_name}/_mapping
{
  "properties": {
    "FIELD": {
      "type": "TYPE"
    }
  }
}

// 示例
PUT /hotel/_mapping
{
  "properties": {
    "tag": {
      "type": "keyword"
    }
  }
}


文档操作

文档的写入、更新操作可以用POST请求操作,也可以用PUT请求,但是更推荐使用POST请求。两者的区别可以查看:Elasticsearch操作实例

单条写入文档

文档的 _id可以由ES自动生成,也可以手动配置。注意是_id,不是id

# 语法
POST /${index_name}/_doc/${_id}          # ${_id}是可选的
{
  # 数据
}

# 示例
POST /hotel/_doc/001
{
  "title": "好再来酒店",
  "city": "青岛",
  "price": 198
}

批量写入文档

# 语法
POST /_bulk
{"index": {"_index": "${index_name}", "_id": "${_id}"}}   # _id是可选的
{...${data}...}
{"index": {"_index": "${index_name}"}}
{...${data}...}

# 示例
POST /_bulk
{"index": {"_index": "hotel", "_id": "002"}}
{"title": "文雅酒店", "city": "北京", "price": 550.00}
{"index": {"_index": "hotel"}}
{"title": "完美酒店", "city": "东莞", "price": 174.00}

查看单条文档

# 语法
GET /${index_name}/_doc/${_id}

# 示例
GET /hotel/_doc/001

查看索引下的所有文档

默认只返回十条数据,具体规则请查看Elasticsearch搜索操作。

# 语法
GET /${index_name}/_search

# 示例
GET /hotel/_search

更新单条文档

# 语法
POST /${index_name}/_update/${_id}   # _id不能省略
{
  "doc": {
    # 数据
  },
  "upsert": {       # 如果目标文档存在,则执行更新逻辑;否则执行插入逻辑。
    # 数据
  }
}

# 示例
POST /hotel/_update/001
{
  "doc": {
    "title": "好再来酒店",
    "city": "北京"
  }
}

批量更新文档

# 语法
POST /_bulk
{"update": {"_index": "${index_name}", "_id": "${_id}"}}   # 必须指定 _id
{"doc": {...${data}...}}
{"update": {"_index": "${index_name}", "_id": "${_id}"}}
{"doc": {...${data}...}}

# 示例
POST /_bulk
{"update": {"_index": "hotel", "_id": "001"}}
{"doc": {"title": "张三酒店", "city": "张三", "price": 12312}}
{"update": {"_index": "hotel", "_id": "002"}}
{"doc": {"title": "李四酒店", "city": "李四"}}

根据条件更新文档

相当于SQL的where,只更新查出来的数据。

# 语法
POST /${index_name}/_update_by_query
{
  "query": {          # 更新的查询条件
    ...
  },
  "script": {         # 更新的具体更新脚本
    ...
  }
}

# 示例
POST /hotel/_update_by_query
{
  "query": {
    "term": {
      "city.keyword": {     # 以子字段的方式搜索
        "value": "上海"
      }
    }
  },
  "script": {
    "source": "ctx._source['city']='东莞'",
    "lang": "painless"
  }
}

删除单条文档

# 语法
DELETE /${index_name}/_doc/${_id}

# 示例
DELETE /hotel/_doc/001

批量删除文档

# 语法
POST /_bulk
{"delete": {"_index": "${index_name}", "_id": "${_id}"}}
{"delete": {"_index": "${index_name}", "_id": "${_id}"}}

# 示例
POST /_bulk
{"delete": {"_index": "hotel", "_id": "001"}}
{"delete": {"_index": "hotel", "_id": "002"}}

根据条件删除文档

相当于SQL的where,只删除查出来的数据。

# 语法
POST /${index_name}/_delete_by_query
{
  "query": {
    # 查询语法
  }
}

# 示例
POST /hotel/_delete_by_query
{
  "query": {
    "term": {
      "city.keyword": {
        "value": "东莞"
      }
    }
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值