• 06_ElasticSearch:索引和文档的CURD


    索引的CURD

    新增

    # 创建索引名为 tehero_index 的索引
    PUT /tehero_index?pretty
    {
    # 索引设置
      "settings": {
        "index": {
          "number_of_shards": 1, # 分片数量设置为1,默认为5
          "number_of_replicas": 1 # 副本数量设置为1,默认为1
        }
      },
    # 映射配置
      "mappings": {
        "_doc": { # 类型名, 7 版本不允许设置
          "dynamic": false, # 动态映射配置
    # 字段属性配置
          "properties": {
            "id": {
              "type": "integer"  # 表示字段id,类型为integer
            },
            "name": {
              "type": "text",
              "analyzer": "ik_max_word", # 存储时的分词器
              "search_analyzer": "ik_smart"  # 查询时的分词器
            },
            "createAt": {
              "type": "date"
            }
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    注:dynamic:是动态映射的开关,有3种状态:true 动态添加新的字段–缺省;推荐使用)false 忽略新的字段,不会添加字段映射,但是会存在于_source中;(strict 如果遇到新字段抛出异常;

    查询

    GET /tehero_index  # 索引名,可以同时检索多个索引或所有索引
    如:GET /*    GET /tehero_index,other_index
    
    GET /_cat/indices?v  #查看所有 index
    
    • 1
    • 2
    • 3
    • 4

    修改

    ES提供了一系列对index修改的语句,包括副本数量的修改、新增字段、refresh_interval值的修改、索引分析器的修改(后面重点讲解)、别名的修改

    # 修改副本数
    PUT /tehero_index/_settings
    {
        "index" : {
            "number_of_replicas" : 2
        }
    }
    
    # 修改分片刷新时间,默认为1s
    PUT /tehero_index/_settings
    {
        "index" : {
            "refresh_interval" : "2s"
        }
    }
    
    # 新增字段 age
    PUT /tehero_index/_mapping/_doc
    {
      "properties": {
        "age": {
          "type": "integer"
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    删除

    # 删除索引
    DELETE /tehero_index
    # 验证索引是否存在
    HEAD tehero_index
    返回:404 - Not Found
    
    • 1
    • 2
    • 3
    • 4
    • 5

    文档crud

    新增

    # 新增单条数据,并指定es的id 为 1
    PUT /tehero_index/_doc/1?pretty
    {
      "name": "Te Hero"
    }
    # 新增单条数据,使用ES自动生成id
    POST /tehero_index/_doc?pretty
    {
      "name": "Te Hero2"
    }
    
    # 使用 op_type 属性,强制执行某种操作
    PUT tehero_index/_doc/1?op_type=create
    {
         "name": "Te Hero3"
    }
    注意:op_type=create强制执行时,若id已存在,ES会报“version_conflict_engine_exception”。
    op_type 属性在实践中同步数据时是有用的,后面讲解数据库与ES的数据同步问题时,TeHero再为大家详细讲解。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    查询

    我们查询数据,看下效果:GET /tehero_index/_doc/_search
    
    • 1

    # 根据id,修改单条数据
    (ps:修改语句和新增语句相同,可以理解为根据ID,存在则更新;不存在则新增)
    PUT /tehero_index/_doc/1?pretty
    {
      "name": "Te Hero-update"
    }
    
    # 根据查询条件id=10,修改name="更新后的name"(版本冲突而不会导致_update_by_query 中止)
    POST tehero_index/_update_by_query
    {
      "script": {
        "source": "ctx._source.name = params.name",
        "lang": "painless",
        "params":{
          "name":"更新后的name"
        }
      },
      "query": {
        "term": {
          "id": "10"
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    删除

    # 1、根据id,删除单个数据
    DELETE /tehero_index/_doc/1
    
    # 2、delete by query
    POST tehero_index/_delete_by_query
    {
      "query": {
        "match": {
         "name": "2"
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    批量操作 Bulk API

    # 批量操作
    POST _bulk
    { "index" : { "_index" : "tehero_test1", "_type" : "_doc", "_id" : "1" } }
    { "this_is_field1" : "this_is_index_value" }
    { "delete" : { "_index" : "tehero_test1", "_type" : "_doc", "_id" : "2" } }
    { "create" : { "_index" : "tehero_test1", "_type" : "_doc", "_id" : "3" } }
    { "this_is_field3" : "this_is_create_value" }
    { "update" : {"_id" : "1", "_type" : "_doc", "_index" : "tehero_test1"} }
    { "doc" : {"this_is_field2" : "this_is_update_value"} }
    
    # 查询所有数据
    GET /tehero_test1/_doc/_search
    结果:
    {
      "took": 33,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": 2,
        "max_score": 1,
        "hits": [
          {
            "_index": "tehero_test1",
            "_type": "_doc",
            "_id": "1",
            "_score": 1,
            "_source": {
              "this_is_field1": "this_is_index_value",
              "this_is_field2": "this_is_update_value"
            }
          },
          {
            "_index": "tehero_test1",
            "_type": "_doc",
            "_id": "3",
            "_score": 1,
            "_source": {
              "this_is_field3": "this_is_create_value"
            }
          }
        ]
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    注:POST _bulk 都做了哪些操作呢?

    1、若索引“tehero_test1”不存在,则创建一个名为“tehero_test1”的 index,同时若id = 1 的文档存在,则更新;不存在则插入一条 id=1 的文档;

    2、删除 id=2 的文档;

    3、插入 id=3 的文档;若文档已存在,则报异常;

    4、更新 id = 1 的文档。

    ps:批量操作在实践中使用是比较多的,因为减少了IO,提高了效率!

  • 相关阅读:
    经典图割算法中图的构建及实现:Graph-Cut
    神经网络实现AND门:逻辑运算的智能化飞跃
    【HCIP】OSPF 特殊区域、汇总、认证
    前端实现在线预览Word文件
    13.1 使用DirectX9绘图引擎
    【笔记】css更改hr标签颜色
    C++的智能指针 && RAII
    pyqt5移动鼠标时显示鼠标坐标
    Linux系统查看有几块硬盘
    【力扣SQL】几个常见SQL题
  • 原文地址:https://blog.csdn.net/wufagang/article/details/133204345