ElasticSearch 7.x学习笔记(三)---索引+映射+文档操作

(一)索引的相关操作

  • 创建索引库

// 语法
PUT /索引名称
{
   settings:{
      "属性名":"属性值"   
  }
}
// settings:就是索引库设置,其中可以定义索引库的各种属性 比如分片数,副本数等,目前我们可以不设置,都走默认
// 样例
# 仅创建索引
PUT /index2

# 创建索引并设置分片数和副本数
PUT /index2
{
  "settings": {
    "number_of_replicas": 1,
    "number_of_shards": 1
  }
}
  • 判断索引是否存在

// 语法
HEAD /索引名

// 样例
HEAD /index2
  • 查看索引

// 语法
GET /索引名称1,索引名称2

// 样例
# 单个查看索引
GET /index2
# 批量查看索引
GET /index1,index2
  • 查看所有索引

#方式一
GET _all

#方式二
GET /cat/indices?v
  • 开启索引

// 语法
POST /索引名称/_open
      
//样例
POST /index2/_open
  • 关闭索引

// 语法
// 索引关闭情况下,无法向索引库添加数据
POST /索引名称/_close
  
// 样例
POST /index2/_close
  • 删除索引

// 语法
DELETE /索引名称1,索引名称2,索引名称3...

// 样例
DELETE /index1,index2

(二)映射的相关操作

索引创建之后,等于有了关系型数据库中的database。Elasticsearch7.x取消了索引type类型的设置,不允许指定类型,默认为_doc,但字段仍然是有的,我们需要设置字段的约束信息,叫做字段映射(mapping) 字段的约束包括但不限于:字段的数据类型,是否要存储,是否要索引,分词器
  • 创建映射字段

// 语法
PUT /索引库名/_mapping 
{ 
    "properties": { 
         "字段名": { 
             "type": "类型",
             "index": true, 
             "store": true, 
             "analyzer": "分词器" 
          } 
     } 
}
// 字段名:任意填写,下面指定许多属性,例如:
// type:类型,可以是text、long、short、date、integer、object等
// index:是否索引,默认为true 
// store:是否存储,默认为false
// analyzer:指定分词器 

// 样例
PUT /index3/_mapping/ 
{ 
  "properties": { 
    "name": { 
      "type": "text", 
      "analyzer": "ik_max_word" 
    },
    "job": { 
      "type": "text", 
      "analyzer": "ik_max_word" 
    },
    "logo": { 
      "type": "keyword", 
      "index": "false" 
    },
    "payment": { 
      "type": "float" 
    } 
  } 
}                                
  • 映射属性详解

  1. type:

ElasticSearch 7.x学习笔记(三)---索引+映射+文档操作

常用类型介绍: String类型,又分两种:text:可分词,不可参与聚合,keyword:不可分词,数据会作为完整字段进行匹配,可以参与聚合 Numerical:数值类型,分两类,基本数据类型:long、interger、short、byte、double、float、half_float,浮点数的高精度类型:scaled_float,需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以因子后存储,取出还原。 Date:日期类型,elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。 Array:数组类型,进行匹配时,任意一个元素满足,都认为满足,排序时,如果升序则用数组中的最小值来排序,如果降序则用数组中的最大值来排序 Object:对象  

    2.index

index影响字段的索引情况。true:字段会被索引,则可以用来进行搜索。默认值就是true。false:字段不会被索引,不能用来搜索。index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。但是有些字段是我们不希望被索引的,比如企业的logo图片地址,就需要手动设置index为false。

   3.store

是否将数据进行独立存储。原始的文本会存储在 _source 里面,默认情况下其他提取出来的字段都不是独立存储的,是从_source 里面提取出来的。当然你也可以独立的存储某个字段,只要设置store:true即可,获取独立存储的字段要比从_source中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置,默认为false。 

   4.analyzer:指定分词器

一般我们处理中文会选择ik分词器 ik_max_word ik_smart 
  • 查看映射关系

// 语法
GET /索引名称/_mapping
      
样例
GET /index3/_mapping
  • 查看所有映射关系

// 方式一
GET _mapping

// 方式二
GET _all/_mapping
  • 修改索引映射关系 

// 语法
PUT /索引库名/_mapping
{ 
  "properties": { 
    "字段名": { 
      "type": "类型", 
      "index": true, 
      "store": true, 
      "analyzer": "分词器" 
    } 
  } 
}

// 样例
PUT /index3/_mapping
{ 
  "properties": { 
    "name": { 
      "type": "text", 
      "index": true, 
      "store": true, 
      "analyzer": "ik_max_word" 
    } 
  } 
}

(三)文档的相关操作

文档,即索引库中的数据,会根据规则创建索引,将来用于搜索。可以类比做数据库中的一行数据。
  •  新增文档

// 语法(指定ID)
POST /索引名称/_doc/{id}
// 语法(不指定ID)
POST /索引名称/_doc

// 样例,指定ID
POST /index3/_doc/1 { 
    "name": "leqi", 
    "job": "金蝶需求分析师", 
    "payment": "30000",
    "logo": "http://xxx.png" 
}
  
// 样例,不指定ID
POST /index3/_doc{ 
    "name": "leqi", 
    "job": "金蝶需求分析师", 
    "payment": "30000",
    "logo": "http://xxx.png" 
}
  • 查看单个文档

// 语法
GET /索引名称/_doc/{id}

// 样例
GET /index3/_doc/1

元素元数据介绍

ElasticSearch 7.x学习笔记(三)---索引+映射+文档操作

  •  查看所有文档

// 语法
POST /索引名称/_search
{
  "query": {
    "match_all": {}
  }
}

// 样例
POST /index3/_search
{
  "query": {
    "match_all": {}
  }
}

文档的全量更新只需要将创建文档的POST 请求换成PUT就行了,id如果存在是就会自动更新,不存在时就会自动创建

  • 文档更新(局部更新)

// 语法
POST /索引名/_update/{id} 
{ 
    "doc":{ 
        "field":"value" 
    } 
} 

// 样例
POST /index3/_update/1
{ 
    "doc":{ 
        "name":"lisi" 
    } 
}    
  • 删除文档

// 语法
DELETE /索引名/_doc/{id}

// 样例
DELETE /index3/_doc/1
  
// 根据查询条件删除
POST /索引库名/_delete_by_query
{
  "query": {
    "match": {
      "字段名": "搜索关键字"
    }
  }
}       
上一篇:【ElasticSearch】前缀搜索,通配符搜索,正则搜索


下一篇:ElasticSearch一篇上手,肝肝单单