• 文档的增删改查


    1.新增

      使用put进行新增,必须使用id。

    PUT /nba/_doc/1
    {
     "name":"哈登",
     "team_name":"⽕箭",
     "position":"得分后卫",
     "play_year":"10",
     "jerse_no":"13"
    }
    

      结果:

    {
      "_index" : "nba",
      "_type" : "_doc",
      "_id" : "1",
      "_version" : 1,
      "result" : "created",
      "_shards" : {
        "total" : 2,
        "successful" : 1,
        "failed" : 0
      },
      "_seq_no" : 0,
      "_primary_term" : 3
    }
    

      

    2.新增

      这种不指定id

    POST /nba/_doc/
    {
     "name":"哈登",
     "team_name":"⽕箭",
     "position":"得分后卫",
     "play_year":"10",
     "jerse_no":"13"
    }
    

      结果:

    {
      "_index" : "nba",
      "_type" : "_doc",
      "_id" : "xpGZJnEB_xXvz4I-POcw",
      "_version" : 1,
      "result" : "created",
      "_shards" : {
        "total" : 2,
        "successful" : 1,
        "failed" : 0
      },
      "_seq_no" : 1,
      "_primary_term" : 3
    }
    

      

    3.查找

    GET /nba/_doc/1
    

      

    4.说明

      不存在的索引,新增文档,也可以新建出索引。不过,实验发现都是keyword类型。

    PUT /wba/_doc/1
    {
     "name":"哈登2",
     "team_name":"⽕箭",
     "position":"得分后卫",
     "play_year":"10",
     "jerse_no":"13"
    }
    

      结果:

    {
      "_index" : "wba",
      "_type" : "_doc",
      "_id" : "1",
      "_version" : 1,
      "result" : "created",
      "_shards" : {
        "total" : 2,
        "successful" : 1,
        "failed" : 0
      },
      "_seq_no" : 0,
      "_primary_term" : 1
    }
    

      查看索引:

    GET /wba
    

      结果:

    {
      "wba" : {
        "aliases" : { },
        "mappings" : {
          "properties" : {
            "jerse_no" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "name" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "play_year" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "position" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "team_name" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            }
          }
        },
        "settings" : {
          "index" : {
            "creation_date" : "1585491459227",
            "number_of_shards" : "1",
            "number_of_replicas" : "1",
            "uuid" : "5919dIHxQYGZXQ4DrtuCyQ",
            "version" : {
              "created" : "7020099"
            },
            "provided_name" : "wba"
          }
        }
      }
    }
    

      

    5.指定操作类型

      为啥需要呢

    PUT /nba/_doc/1
    {
     "name":"哈登2",
     "team_name":"⽕箭",
     "position":"得分后卫",
     "play_year":"10",
     "jerse_no":"13"
    }
    
    GET /nba/_doc/1
    

      结果:

    {
      "_index" : "nba",
      "_type" : "_doc",
      "_id" : "1",
      "_version" : 5,
      "_seq_no" : 5,
      "_primary_term" : 3,
      "found" : true,
      "_source" : {
        "name" : "哈登2",
        "team_name" : "⽕箭",
        "position" : "得分后卫",
        "play_year" : "10",
        "jerse_no" : "13"
      }
    }
    

      然后,想新增

    PUT /nba/_doc/1
    {
     "name":"哈登",
     "team_name":"⽕箭",
     "position":"得分后卫",
     "play_year":"10",
     "jerse_no":"13"
    }
    
    GET /nba/_doc/1
    

      结果:

    # PUT /nba/_doc/1
    {
      "_index" : "nba",
      "_type" : "_doc",
      "_id" : "1",
      "_version" : 6,
      "result" : "updated",
      "_shards" : {
        "total" : 2,
        "successful" : 1,
        "failed" : 0
      },
      "_seq_no" : 6,
      "_primary_term" : 3
    }
    
    
    # GET /nba/_doc/1
    {
      "_index" : "nba",
      "_type" : "_doc",
      "_id" : "1",
      "_version" : 6,
      "_seq_no" : 6,
      "_primary_term" : 3,
      "found" : true,
      "_source" : {
        "name" : "哈登",
        "team_name" : "⽕箭",
        "position" : "得分后卫",
        "play_year" : "10",
        "jerse_no" : "13"
      }
    }
    

      发现,不小心把前面的给覆盖了。

      然后,怎么解决呢?

    PUT /nba/_doc/1?op_type=create
    {
     "name":"哈登2",
     "team_name":"⽕箭",
     "position":"得分后卫",
     "play_year":"10",
     "jerse_no":"13"
    }
    

      结果:

    {
      "error": {
        "root_cause": [
          {
            "type": "version_conflict_engine_exception",
            "reason": "[1]: version conflict, document already exists (current version [6])",
            "index_uuid": "q_fuLgv1Sjyb8yncRsCWZQ",
            "shard": "0",
            "index": "nba"
          }
        ],
        "type": "version_conflict_engine_exception",
        "reason": "[1]: version conflict, document already exists (current version [6])",
        "index_uuid": "q_fuLgv1Sjyb8yncRsCWZQ",
        "shard": "0",
        "index": "nba"
      },
      "status": 409
    }
    

      

    6.批量查询

      post方式,get也可以 

    POST /_mget
    {
    	"docs":[
    	  {
    		"_index": "nba",
    		"_type": "_doc",
    		"_id": 2
    	}, 
    	{
    		"_index": "songs",
    		"_type": "_doc",
    		"_id": 1
    	}
    	]
    }
    

      效果:

    #! Deprecation: [types removal] Specifying types in multi get requests is deprecated.
    {
      "docs" : [
        {
          "_index" : "nba",
          "_type" : "_doc",
          "_id" : "2",
          "_version" : 1,
          "_seq_no" : 7,
          "_primary_term" : 3,
          "found" : true,
          "_source" : {
            "name" : "哈登2",
            "team_name" : "⽕箭",
            "position" : "得分后卫",
            "play_year" : "10",
            "jerse_no" : "13"
          }
        },
        {
          "_index" : "songs",
          "_type" : "_doc",
          "_id" : "1",
          "_version" : 8,
          "_seq_no" : 7,
          "_primary_term" : 1,
          "found" : true,
          "_source" : {
            "name" : "说好不哭",
            "author" : "周杰伦"
          }
        }
      ]
    }
    

      

    7.更加简化的查询方式

    POST /nba/_doc/_mget
    {
      "docs":[
        {
          "_id":"1"
        },
        {
          "_id":"2"
        }
      ]
    }
    

      结果:

    #! Deprecation: [types removal] Specifying types in multi get requests is deprecated.
    {
      "docs" : [
        {
          "_index" : "nba",
          "_type" : "_doc",
          "_id" : "1",
          "_version" : 6,
          "_seq_no" : 6,
          "_primary_term" : 3,
          "found" : true,
          "_source" : {
            "name" : "哈登",
            "team_name" : "⽕箭",
            "position" : "得分后卫",
            "play_year" : "10",
            "jerse_no" : "13"
          }
        },
        {
          "_index" : "nba",
          "_type" : "_doc",
          "_id" : "2",
          "_version" : 1,
          "_seq_no" : 7,
          "_primary_term" : 3,
          "found" : true,
          "_source" : {
            "name" : "哈登2",
            "team_name" : "⽕箭",
            "position" : "得分后卫",
            "play_year" : "10",
            "jerse_no" : "13"
          }
        }
      ]
    }
    

      

    8.更加简化的mget

      

    POST /nba/_doc/_mget
    {
      "ids":["1","2"]
    }
    

      

    9.修改

      只更新了一部分字段

    POST /nba/_update/2
    {
     "doc":{
        "play_year":"1000",
        "jerse_no":"1300"
     }
    }
    
    GET /nba/_doc/2

      结果:

    # POST /nba/_update/2
    {
      "_index" : "nba",
      "_type" : "_doc",
      "_id" : "2",
      "_version" : 8,
      "result" : "updated",
      "_shards" : {
        "total" : 2,
        "successful" : 1,
        "failed" : 0
      },
      "_seq_no" : 14,
      "_primary_term" : 3
    }
    
    
    # GET /nba/_doc/2
    {
      "_index" : "nba",
      "_type" : "_doc",
      "_id" : "2",
      "_version" : 8,
      "_seq_no" : 14,
      "_primary_term" : 3,
      "found" : true,
      "_source" : {
        "name" : "哈登2",
        "team_name" : "⽕箭",
        "position" : "得分后卫",
        "play_year" : "1000",
        "jerse_no" : "1300"
      }
    }
    

      

    10.新增一个字段

    POST /nba/_update/2
    {
      "script":"ctx._source.age=19"
    }
    GET /nba/_doc/2
    

      结果:

    # POST /nba/_update/2
    {
      "_index" : "nba",
      "_type" : "_doc",
      "_id" : "2",
      "_version" : 9,
      "result" : "updated",
      "_shards" : {
        "total" : 2,
        "successful" : 1,
        "failed" : 0
      },
      "_seq_no" : 15,
      "_primary_term" : 3
    }
    
    
    # GET /nba/_doc/2
    {
      "_index" : "nba",
      "_type" : "_doc",
      "_id" : "2",
      "_version" : 9,
      "_seq_no" : 15,
      "_primary_term" : 3,
      "found" : true,
      "_source" : {
        "name" : "哈登2",
        "team_name" : "⽕箭",
        "position" : "得分后卫",
        "play_year" : "1000",
        "jerse_no" : "1300",
        "age" : 19
      }
    }
    

      

    11.删除一个文档

    POST /nba/_update/2
    {
      "script":"ctx._source.remove("age")"
    }
    GET /nba/_doc/2
    

      结果:

    # POST /nba/_update/2
    {
      "_index" : "nba",
      "_type" : "_doc",
      "_id" : "2",
      "_version" : 10,
      "result" : "updated",
      "_shards" : {
        "total" : 2,
        "successful" : 1,
        "failed" : 0
      },
      "_seq_no" : 17,
      "_primary_term" : 3
    }
    
    
    # GET /nba/_doc/2
    {
      "_index" : "nba",
      "_type" : "_doc",
      "_id" : "2",
      "_version" : 10,
      "_seq_no" : 17,
      "_primary_term" : 3,
      "found" : true,
      "_source" : {
        "name" : "哈登2",
        "team_name" : "⽕箭",
        "position" : "得分后卫",
        "play_year" : "1000",
        "jerse_no" : "1300"
      }
    }
    

      

    12.根据指定参数,更新文档

    POST /nba/_update/3
    {
    	"script": {
    		"source": "ctx._source.allstar += params.allstar",
    		"params": {
    			"allstar": 4
    		}
    	},
    	"upsert": {
    		"allstar": 1
    	}
    }
    

      结果:

    # POST /nba/_update/3
    {
      "_index" : "nba",
      "_type" : "_doc",
      "_id" : "3",
      "_version" : 3,
      "result" : "updated",
      "_shards" : {
        "total" : 2,
        "successful" : 1,
        "failed" : 0
      },
      "_seq_no" : 20,
      "_primary_term" : 3
    }
    
    
    # GET /nba/_doc/3
    {
      "_index" : "nba",
      "_type" : "_doc",
      "_id" : "3",
      "_version" : 3,
      "_seq_no" : 20,
      "_primary_term" : 3,
      "found" : true,
      "_source" : {
        "allstar" : 9
      }
    }
    

      发现这里version是3。

      第一次不存在则为1,第二次是5,第三次是9.

      upsert:不存在,就是后面的数,存在就使用上面的数据

    13.删除

    DELETE /nba/_doc/3
    GET /nba/_doc/3
    

      结果:

    # DELETE /nba/_doc/3
    {
      "_index" : "nba",
      "_type" : "_doc",
      "_id" : "3",
      "_version" : 4,
      "result" : "deleted",
      "_shards" : {
        "total" : 2,
        "successful" : 1,
        "failed" : 0
      },
      "_seq_no" : 21,
      "_primary_term" : 3
    }
    
    
    # GET /nba/_doc/3
    {
      "_index" : "nba",
      "_type" : "_doc",
      "_id" : "3",
      "found" : false
    }
    

      

  • 相关阅读:
    【Git】为GitHub添加ssh配置
    【Linux】cmake编译指定 gcc/g++
    【Git】提交历史查看
    【AFL(十五)】LAVA-M服务器篇
    Docker实用技巧(五):查看容器占用磁盘大小
    Docker实用技巧(四):限制cpu数量
    【AFL(十四)】afl-plot 使用详解
    【AFL(十三)】afl-whatsup 使用详解
    Docker实用技巧(三):容器与主机之间的端口映射
    【AFL(十二)】make文件管理
  • 原文地址:https://www.cnblogs.com/juncaoit/p/12595918.html
Copyright © 2020-2023  润新知