个人技术分享

一、创建索引库:PUT

        ES中通过Restful请求操作索引库、文档。请求内容用DSL语句来表示。创建索引库和mapping的DSL语法如下:

        整个jason 里边,它有一个叫mapping的属性,代表的是映射。映射里边有properties代表就是字段。可以看到这里只有三个字段,然后每个字段都有一些自己的信息: type、analyzer、index...

我们先来复习一下mapping的常见属性: 

     需要注意的是,第三个字段这里还加了一个properties代表的子字段,这种就是带对象嵌套的方式: Object要结合properties声明子字段 

                                         

代码:

PUT /heima
{
  "mappings":{
    "properties": {
      "info":{
        "type":"text",
        "analyzer": "ik_smart"
      },
      "email":{
        "type":"keyword",
        "index": false
      },
      "name":{
        "type":"object",
        "properties": {
          "firstName":{
            "type":"keyword"
          },
          "lastName":{
            "type":"keyword"
          }
        }
      }
    }
  }
}

                                成功: 

    

二、查看、删除索引库: GET/DELETE

        

GET /heima 

{
  "heima" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "email" : {
          "type" : "keyword",
          "index" : false
        },
        "info" : {
          "type" : "text",
          "analyzer" : "ik_smart"
        },
        "name" : {
          "properties" : {
            "firstName" : {
              "type" : "keyword"
            },
            "lastName" : {
              "type" : "keyword"
            }
          }
        }
      }
    },
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "number_of_shards" : "1",
        "provided_name" : "heima",
        "creation_date" : "1714394468076",
        "number_of_replicas" : "1",
        "uuid" : "jgQAdwONRLqYAr2XfT9ZSA",
        "version" : {
          "created" : "7120199"
        }
      }
    }
  }
}

                 DELETE /heima           删除后再查寻:GET /heima 

 

 三、添加字段:PUT /索引库名/_mapping

        索引库和mapping一旦创建无法修改,但是可以添加新的字段,语法如下:

        

        数据库里边一个表创建完了,理论还可以去修改表结构,但是在生产环境下,数据库一般情况下,我们也是尽量禁止去修改的,因为修改它的这个性能是影响非常大,可能会导致整个数据库不可用。 ES做的更彻底,索引库创建完了以后,是不允许修改的,当它的mapping映射都已经定义好了,ES会基于mapping去创建倒排索引。如果说你要去修改一个字段的话,可能导致我们原有的整个倒排索引失效,所以ES里边,是禁止修改索引库的,ES它虽然禁止你直接去修改原有的字段,但它允许你修改索引库的过程中添加新字段,它的语法是这样子的:

 代码:
#修改索引库,添加新的字段
PUT /heima/_mapping
{
  "properties":{
    "age":{
      "type":"integer"
    }
  }
}

         再调用GET /heima :多了一个age的属性:

                                

索引库和mapping一旦创建无法修改:

        但是如果说你现在把age再添加一次,你把它的类型改成long,这等于是在修改索引库结构,从integer改成long,报错了:  

四、添加文档:POST /索引库名/_doc/文档id

        新增文档的DSL语法:它是一个post请求,路径是一个索引库名,加上一个_doc,这是固定写法。后边跟上文档的i d, 其实就是告诉Kibana:我要新增的这个文档要到哪个库里面去。

        我这个文档的id是什么? 要写在路径的后边,这是Restful一种语法方式。如果你不加这个id,他就会认为你这个文档没有i d,将来ES会给你随机生成一个id:

代码:
#插入文档

POST /heima/_doc/1
{
  "info":"程序员java",
  "email":"123456@qqq.com",
  "name":{
    "firstName":"张三",
    "lastName":"李四"
  }
}

                        ​​​​​​​        

再插入一条不带id的:

POST /heima/_doc
{
  "info":"c++程序员",
  "email":"6666@qq.com",
  "name":{
    "firstName":"王五",
    "lastName":"赵六"
  }
}

五、查询、删除文档 GET(DELETE)  /索引库名/_doc/文档id

查询代码: 

 GET /heima/_doc/1 

       这个信息给大家解读一下,_index代表他所在的索引库是“heima”,然后version1,这里其实有这个版本控制,每做一次文档修改,将来这个版本就会+1。然后_source就是你插入的那个原始文档,注意,这个_source就是你插入的原始文档。大家看是jason风格的原始文档:  

        ​​​​​​​        

 删除代码:

        DELETE /heima/_doc/1

                 

        可以看见删除后版本号+1,再次执行插入操作,版本号又+1 :

        ​​​​​​​        ​​​​​​​ 

  六、更新文档

方式一:全量修改,会删除旧文档:PUT /索引库名/_doc/文档id

  1、 全量修改和新增POST只有请求方式不同

  2 、如果传的这个id在索引库里不存在对应文档,这个删除的动作不会执行,新增不受影响

代码:
#插入文档

POST /heima/_doc/2
{
  "info":"程序员javSa",
  "email":"123456@qqq.Scom",
  "name":{
    "firstName":"张三S",
    "lastName":"李四S"
  }
}

#更新文档
PUT /heima/_doc/2
{
  "info":"golang程序员",
  "email":"99999@qq.com",
  "name":{
    "firstName":"zhangsan",
    "lastName":"lisi"
  }
}


 如果这个id不存在,那它就会变成新增操作:

方式二:增量修改,修改指定字段值:POST /索引库名/_update/文档id

代码: 

POST /heima/_update/3
{
  "doc":{
    "email":"aaaa@qq.com"
  }
}

                         

七、 索引库、文档操作总结:

        ​​​​​​​        

        ​​​​​​​        

八、