索引操作
创建索引
在创建索引时,可以设置索引的参数,定义索引的映射;当然,如果不需要自定义,则可以完全省略。
// 语法:
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": "东莞"
}
}
}
}