栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 云计算 > 云平台

Elasticsearch基础操作

云平台 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Elasticsearch基础操作

索引操作 创建索引

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

// 语法:
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": "东莞"
      }
    }
  }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/897433.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号