第三节:基于DevTools的索引库操作和文档操作详解
一. 索引库操作
(Index就类似数据库表,Mapping映射就类似表的结构。我们要向es中存储数据,必须先创建Index和Mapping)
1.创建索引和映射
(1) 基本语法
- 
PUT - 
请求路径:
/索引库名,可以自定义 - 
请求参数:
mapping 
(2) 格式
PUT /索引库名称
{
  "mappings": {
    "properties": {
      "字段名":{
        "type": "text",
        "analyzer": "ik_smart"
      },
      "字段名2":{
        "type": "keyword",
        "index": "false"
      },
      "字段名3":{
        "properties": {
          "子字段": {
            "type": "keyword"
          }
        }
      },
    }
  }
}
(3) 样例
PUT /user
{
  "mappings": {
    "properties": {
      "info":{
        "type": "text",
        "analyzer": "ik_smart"
      },
      "email":{
        "type": "keyword",
        "index": false
      },
      "name":{
        "properties": {
          "firstName":{
            "type": "keyword"
          },
          "lastName":{
            "type": "keyword"
          }
        }
      }
    }
  }
}
2 查询索引库
(1) 基本语法
- 
 - 
请求路径:/索引库名
 - 
 
(2) 格式
GET /索引库名
(3) 样例
GET /user
3 修改索引库
(1) 基本语法
倒排索引结构虽然不复杂,但是一旦数据结构改变(比如改变了分词器),就需要重新创建倒排索引,这简直是灾难。因此索引库一旦创建,无法修改mapping。
虽然无法修改mapping中已有的字段,但是却允许添加新的字段到mapping中,因为不会对倒排索引产生影响。因此修改索引库能做的就是向索引库中添加新字段,或者更新索引库的基础属性。
(2) 格式
PUT /索引库名/_mapping
{
  "properties": {
    "新字段名":{
      "type": "integer"
    }
  }
}
(3) 样例
PUT /user/_mapping
{
  "properties":{
    "age":{
      "type": "integer"
    }
  }
}
4 删除索引库
(1) 基本语法
- 
 - 
请求路径:/索引库名
 - 
 
(2) 格式
DELETE /索引库名
(3) 样例
DELETE /user
二. 文档操作
1 新增文档
(1) 语法
POST /索引库名/_doc/文档id
{
    "字段1": "值1",
    "字段2": "值2",
    "字段3": {
        "子属性1": "值3",
        "子属性2": "值4"
    },
}
(2) 样例
事先创建索引
PUT /user
{
  "mappings": {
    "properties": {
      "info":{
        "type": "text",
        "analyzer": "ik_smart"
      },
      "email":{
        "type": "keyword",
        "index": false
      },
      "name":{
        "properties": {
          "firstName":{
            "type": "keyword"
          },
          "lastName":{
            "type": "keyword"
          }
        }
      }
    }
  }
}
新增文档
POST /user/_doc/1
{
    "info": "青岛欢迎您",
    "email": "ypf@qq.cn",
    "name": {
        "firstName": "云",
        "lastName": "赵"
    }
}
2 查询文档
(1) 语法
GET /{索引库名称}/_doc/{id}
(2) 样例
GET /user/_doc/1

3 删除文档
(1) 语法
删除使用DELETE请求,同样,需要根据id进行删除:
DELETE /{索引库名}/_doc/id值
(2) 样例
DELETE /user/_doc/1
4 修改文档
修改有两种方式:
- 
全量修改:直接覆盖原来的文档
 - 
局部修改:修改文档中的部分字段
 
4.1 全量修改
(1) 语法
PUT /{索引库名}/_doc/文档id
{
    "字段1": "值1",
    "字段2": "值2",
    // ... 略
}
(2) 样例
PUT /user/_doc/1
{
    "info": "山东欢迎你",
    "email": "zs@qq.cn",
    "name": {
        "firstName": "三",
        "lastName": "张"
    }
}

4.2 局部修改
(1) 语法
POST /{索引库名}/_update/文档id
{
    "doc": {
         "字段名": "新的值",
    }
}
(2) 样例
POST /user/_update/1
{
  "doc":{
    "email":"hh@test.cn"
  }
}
5 批处理
(1) 语法
POST _bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_id" : "2" } }
{ "create" : { "_index" : "test", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }
PS:
- 
index代表新增操作- 
_index:指定索引库名 - 
_id指定要操作的文档id - 
{ "field1" : "value1" }:则是要新增的文档内容 
 - 
 - 
delete代表删除操作- 
_index:指定索引库名 - 
_id指定要操作的文档id 
 - 
 - 
update代表更新操作- 
_index:指定索引库名 - 
_id指定要操作的文档id - 
{ "doc" : {"field2" : "value2"} }:要更新的文档字段 
 - 
 
(2) 样例-批量新增
POST /_bulk
{"index":{"_index":"user", "_id":3}}
{"info":"test11111", "email":"ww@hh.cn","name":{"firstName":"王", "lastName":"五"}}
{"index":{"_index":"user", "_id":4}}
{"info":"test77777", "email":"zs@hh.cn","name":{"firstName":"张", "lastName":"三"}}
(2) 样例-批量删除
POST /_bulk
{"delete":{"_index":"user", "_id":3}}
{"delete":{"_index":"user", "_id":4}}
!
- 作 者 : Yaopengfei(姚鹏飞)
 - 博客地址 : http://www.cnblogs.com/yaopengfei/
 - 声 明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
 - 声 明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 
                    
                
                
            
        
浙公网安备 33010602011771号