zoukankan      html  css  js  c++  java
  • ElasticSearch学习之——基本的文档CURD

    一、文档的添加

    POST http://127.0.0.1:9200/{index}/{type}/{id}
    {
    "key":"value",
    "key2":"value2",
    "key2":"value2",
    }

    这是最基本的一个文档添加语句{index}表示添加的索引如果没有回自动建立(可以理解为数据库),{type}标示类型如果没有回自动建立(可以理解为表),{id}标示添加文档的id可以理解为数据库中的主键,添加的文档内容就是json 格式的数据,在添加前可以不定义每个字段的类型ES可以自动的根据类型定义字段的属性。

    添加多个文档

    POST http://127.0.0.1:9200/{index}/{type}/_bulk
    {"index":{"_id":"1"}}
    {"key1":"value1"}
    {"index":{"_id":"2"}}
    {"key1":"value2"}

    _bulk 表示大量id在json里面定义

    不同索引下的批量添加

    POST http://127.0.0.1:9200/_bulk
    { "index": { "_index": "{index}", "_type": "{type}", "_id": "{id}" }} 
    { "key1": "key2" }
    { "index": { "_index": "{index}", "_type": "{type}", "_id": "{id}" }} 
    { "key1": "key2" }
    { "index": { "_index": "{index}", "_type": "{type}", "_id": "{id}" }} 
    { "key1": "key2" }

    在添加时index和type必须明确,但是可不指定id的值,如果不指定会自动生成的id有22字符串长度URL-safe, Base64-encoded string universally unique identifiers, 或者叫 UUID。

    如果指定的id已经存在就会覆盖原来的json数据。

    在添加时指定了id但是又想避免覆盖可以在url上添加_create或者?op_type=create参数  添加的id如果已经存在会返回409状态。

    添加成功会返回

    {
    "_index": "{index}",//索引名
    "_type": "{type}",//类型名
    "_id": "{id}",//id
    "_version": 1,//数据版本号 改变一次默认会加1
    "result": "created", // 结果添加
    "_shards": {
    "total": 2,//在多少个分配中进行了操作
    "successful": 1,//成功建立的索引分片数量至少时1
    "failed": 0//建立索引失败的片数
    },
    "created": true //如果是添加为true 修改为false
    }

    二、文档的修改

    上面在添加文档的时候已经说了,在添加的时候如果自定了id如果id已经存在了就会覆盖原来的,这就是最基本的修改。

    还有一种修改是通过脚本在原有的数据基础上进行修改。

    POST /{index}/{type}/{id}/_update
    {
      "script" : "ctx._source.key += 5"
    }

    ctx._source 表示当前文档。在当前文档的key属性的原有值上在加5。

    可以增加新的属性。

    每次修改成功会返回一个json格式和上面添加类似,同时_version默认加1

    三、文档的删除

    删除文档比较简单只要发出的请求是DELETE类型同时指定index,type,id 就可以了

    例如:

    DELETE /{index}/{type}/{id}/_update

    成功返回:

    {
    "found" : true,
    "_index" : {index},
    "_type" : {type},
    "_id" : {id},
    "_version" : 3
    }

    删除是_version也会加1。

    如果文档本身不存在会得到一个 404 的状态。found值为false

    在ES内部原来的文档不会被立马删除,只是被标记为被删除,但是已经不能访问了。在后面ES会自己删除。

    四、文档的查看

    1.直接通过id获取文档

    GET /{index}/{type}/{id}?pretty

    结果为:

    {
    "_index" : {index},
    "_type" : {type},
    "_id" : {id},
    "_version" : 3,
    "found" : true,
    "_source":{
         "key1":"value"  
    }
    }

    返回对应inden内type中id的数据pretty标示返回的数据以json格式化 换行输出,方便阅读。

    _index 表示查询的索引,_type 标示查询的类型 ,_id 标示查询的id , found标示查询结果,_source 标示查询到的源数据

    在查询过程中_type 是可选的 如果不全定可以使用_all。

    在查询是可以设置是否返回_source字段,只需要在url后面添加_source=false就可以了,例如:

    GET /{index}/{type}/{id}?_source=false&pretty

    如果返回_source的字段中只需要返回一个或某几个字段可以在url后面添加_source_include或者_source_exclude来设置

    例如:

    GET /{index}/{type}/{id}?_source_include=key1,key3,keys11*&pretty

    就像上面的连接一样多个可以用逗号隔开,也可以使用通配符*。

    在查询时也可以设置值返回源数据,例如:

    GET /{index}/{type}/{id}/_source?pretty

    2.多文档查询

    在一次中查询多个文档,可以分别指定index,type,id来进行多个文档的查询。查询的结果包含查询到的文档数组。

    例如

    POST /_mget?pretty
    {
      "docs":[
                {"_index":"index1","_type":"index1","_id":"1"},
                {"_index":"index2","_type":"index2","_id":"2"}
      ]
    }        

    返回的结果结构为:

    {
         "docs":[
             {
                
                 "_index" : {index},
                 "_type" : {type},
                 "_id" : {id},
                 "_version" : 3,
                  "found" : true,
                  "_source":{
                          "key1":"values1"
                       }
              },
         {
                
                 "_index" : {index},
                 "_type" : {type},
                 "_id" : {id},
                 "_version" : 3,
                  "found" : true,
                  "_source":{
                          "key1":"values1"
                       }
              }
    
      ]
    }            

    同一个索引或类型下多条件查询   同等于 or 查询

    POST /{index}/{type}/_mget?pretty
    {
      "docs":[
               {"_id":"1","_source":false},
               {"_id":"2","_source":["key1","key2"]}
    
      ]
    }         

     3.没有任何条件的查询

    GET /{index}/{type}/_search

    没有任何条件的查询某个index下type中的文档,结果默认会展示出前20条文档

    也可以在查询时添加条件,假设文档中有一个name字段需要查找出name为张三的文档

    GET /{index}/{type}/_search?q=name:张三

    如果查询的条件比较复杂就需要使用结构化查询语句(DSL)了。

    转载请注明来自:http://www.cnblogs.com/phpshen/p/7887439.html

  • 相关阅读:
    在vs code中进行本地调试和开启本地服务器
    按highcharts中column形式转对象展现格式
    forEach、for in 、 for of三者的区别
    一位数左边补0,slice也可以
    js判断对象是否为空
    谷歌最佳实践
    谷歌最佳实践
    谷歌最佳实践
    谷歌最佳实践
    企业代码版本管理之争:TrunkBased vs GitFlow vs AoneFlow vs OneFlow vs ExeFlow
  • 原文地址:https://www.cnblogs.com/phpshen/p/7887439.html
Copyright © 2011-2022 走看看