ES基础篇 常用API之文档API

这篇具有很好参考价值的文章主要介绍了ES基础篇 常用API之文档API。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

前面写了一篇常用API之索引类、映射类、别名类API,主要是介绍Elasticsearch的集群类、索引类、映射类、别名类等,这些在开发中或许不会经常用到,但API的存在定有它存在的价值,作为程序猿的我们,或使用Java,或使用Python等等,虽然使用编程语言调用接口,但有时候,需要便捷的操作、查看相关信息的时候,明显在Kinbana上操作API会更加便捷,这或许就是它所存在的意义,所以这次在追加一篇文档API,供大家开发的时候参考

文档操作

单个文档操作

method URL remark
PUT localhost:9200/索引名称/类型名称/文档id 创建文档-指定文档id
POST localhost:9200/索引名称/类型名称 创建文档-随机文档id
POST localhost:9200/索引名称/类型名称/文档id/_update 修改文档(部分修改)
DELETE localhost:9200/索引名称/类型名称/文档id 删除文档
GET localhost:9200/索引名称/类型名称/文档id 查询某条文档
POST localhost:9200/索引名称/类型名称/_search 搜索文档
添加文档
  1. 指定文档ID

       #PUT localhost:9200/索引名称/类型名称/文档id
       # 添加文档时,防止覆盖已存在的文档,可通过_create加以限制,如:PUT blog/_doc/1/_create
       PUT {index}/_doc/{id}
       {
         "filed":"value",
         ……
       }
    

    样例:

    在创建的索引中添加文档(指定id)

    • 输入
         PUT /nav_web_video/_doc/1
         {
           "name":"爱奇艺",
           "url":"https://www.iqiyi.com/",
           "ipAddr":"110.242.72.5",
           "desc":"爱奇艺(iQIYI.COM)是拥有海量、优质、高清的网络视频的大型视频网站,专业的网络视频播放平台。爱奇艺影视内容丰富多元,涵盖电影、电视剧、动漫、综艺、生活、音乐、搞笑、财经、军事、体育、片花..."
         }
    
    • 输出
         {
           "_index" : "nav_web_video",
           "_type" : "_doc",
           "_id" : "1",
           "_version" : 1,
           "result" : "created",
           "_shards" : {
             "total" : 1,
             "successful" : 1,
             "failed" : 0
           },
           "_seq_no" : 0,
           "_primary_term" : 3
         }
    

    响应说明:

    • _index:文档所在的索引名
    • _type:文档所在的类型名
    • _id:文档ID
    • _version:文档版本
    • result:created已经创建
    • _shards:索引操作的复制过程的信息
    • total:指示应在其上执行索引操作的分片副本(主分片和副本分片)的数量
    • successful:表示索引操作成功的分片副本数。
    • failed:在副本分片上索引操作失败的情况下包含复制相关错误。
  2. **不指定文档ID **

    添加文档时可以不指定文档id,则文档id是自动生成的字符串。注意,需要使用POST方法,而不是PUT方法。

       # POST localhost:9200/索引名称/类型名称
       
       POST {index}/_doc
       {
         "filed":"value",
         ……
       }
    

    样例:

    在创建的索引中添加文档(不指定id)

    • 输入
         POST /nav_web_video/_doc/
         {
           "name":"爱奇艺",
           "url":"https://www.iqiyi.com/",
           "ipAddr":"110.242.72.5",
           "desc":"爱奇艺(iQIYI.COM)是拥有海量、优质、高清的网络视频的大型视频网站,专业的网络视频播放平台。爱奇艺影视内容丰富多元,涵盖电影、电视剧、动漫、综艺、生活、音乐、搞笑、财经、军事、体育、片花..."
         }
    
    • 输出
    {
      "_index" : "nav_web_video",
      "_type" : "_doc",
      "_id" : "2T3ydogBRXiZstgWuI_C",
      "_version" : 1,
      "result" : "created",
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "failed" : 0
      },
      "_seq_no" : 1,
      "_primary_term" : 3
    }
    
获取文档
  1. 通过id获取指定文档

    # GET localhost:9200/索引名称/类型名称/文档id
    GET /{index}/_doc/{id}
    

样例:

在创建的索引中获取文档

  • 输入

    GET /nav_web_video/_doc/1
    
  • 输出

    {
    	  "_index" : "nav_web_video",
    	  "_type" : "_doc",
    	  "_id" : "1",
    	  "_version" : 1,
    	  "_seq_no" : 0,
    	  "_primary_term" : 3,
    	  "found" : true,
    	  "_source" : {
    	    "name" : "爱奇艺",
    	    "url" : "https://www.iqiyi.com/",
    	    "ipAddr" : "110.242.72.5",
    	    "desc" : "爱奇艺(iQIYI.COM)是拥有海量、优质、高清的网络视频的大型视频网站,专业的网络视频播放平台。爱奇艺影视内容丰富多元,涵盖电影、电视剧、动漫、综艺、生活、音乐、搞笑、财经、军事、体育、片花..."
    	  }
    	}
    

响应结果说明:

  • found值为true,说明查询到该文档

    found值为false,说明文档不存在

  • _source字段是文档的内容

  1. 判定文档是否存在

     # 使用HEAD判断文档是否存在
     HEAD {index}/_doc/{id}
    

    样例:

    在创建的索引上判断id为1的文档是否存在

    • 输入
    HEAD /nav_web_video/_doc/1
    
    • 输出
    200 - OK
    
更新文档
全部覆盖

PUT方式(同添加文档)进行更改,覆盖文档所有数据,没有的值的字段将会被清空覆盖

#PUT修改数据
PUT {index}/_doc/{id}
{
 "filed":"value",
 ……
}

样例:

在创建的索引中修改文档(PUT方式全部覆盖)

  • 输入

    # 1
    PUT /nav_web_video/_doc/1
    {
      "name":"爱奇艺"
    }
    
    # 2
    GET /nav_web_video/_doc/1
    
  • 输出

    # 2
    {
      "_index" : "nav_web_video",
      "_type" : "_doc",
      "_id" : "1",
      "_version" : 2,
      "_seq_no" : 2,
      "_primary_term" : 3,
      "found" : true,
      "_source" : {
        "name" : "爱奇艺"
      }
    }
    
部分修改

部分修改,只修改文档部分字段,其他字段不变

2.1 添加字段

  POST {index}/_doc/{id}/_update
  {
    "script": {
      "source": "ctx._source.{field}=\"{value}\""  
    } 
  }

样例:

在创建的索引中,id为1的文档新增字段

  • 输入

    # 1
    POST nav_web_video/_doc/1/_update
    {
      "script": {
        "source": "ctx._source.ceo=\"陈百强\""  
      } 
    }
    
    # 2
    GET /nav_web_video/_doc/1
    
  • 输出

      {
      "_index" : "nav_web_video",
         "_type" : "_doc",
         "_id" : "1",
         "_version" : 3,
         "_seq_no" : 3,
         "_primary_term" : 3,
         "found" : true,
         "_source" : {
           "name" : "爱奇艺",
        "ceo" : "陈百强"
         }
    }
    

2.2 删除字段

		POST {index}/_doc/{id}/_update
			{
			  "script": {
			    "source": "ctx._source.remove(\"{field}\")"  
			  } 
			}

样例:

在创建的索引中移除指定id的文档字段

  • 输入

    # 1
     POST nav_web_video/_doc/1/_update
     {
       "script": {
         "source": "ctx._source.remove(\"ceo\")"
       } 
     }
     
     # 2
     GET /nav_web_video/_doc/1
    
    
  • 输出

    {
      "_index" : "nav_web_video",
      "_type" : "_doc",
      "_id" : "1",
      "_version" : 6,
      "_seq_no" : 6,
      "_primary_term" : 3,
      "found" : true,
      "_source" : {
      "name" : "爱奇艺"
       }
     }
    

2.3 更新字段

通过脚本更新制定字段,其中ctx是脚本语言中的一个执行对象,先获取_source,再修改content字段

POST {index}/_doc/{id}/_update
{
  "script": {
    "source": "ctx._source.{field}=\"{value}\""  
  } 
}

样例:

在创建的索引中,修改id为1的文档的属性

  • 输入

    # 1
    POST nav_web_video/_doc/1/_update
    {
      "script": {
        "source": "ctx._source.name=\"aiqiyi\""  
      } 
    }
    
    # 2
    GET /nav_web_video/_doc/1
    
  • 输出

    {
      "_index" : "nav_web_video",
      "_type" : "_doc",
      "_id" : "1",
      "_version" : 7,
      "_seq_no" : 7,
      "_primary_term" : 3,
      "found" : true,
      "_source" : {
        "name" : "aiqiyi"
      }
    }
    
删除文档
  1. 根据id删除文档
# DELETE localhost:9200/索引名称/类型名称/文档id
DELETE {index}/_doc/{id}

样例:

在创建的索引中,删除id为1的文档

  • 输入

    DELETE nav_web_video/_doc/1
    
  • 输出

    {
      "_index" : "nav_web_video",
      "_type" : "_doc",
      "_id" : "1",
      "_version" : 8,
      "result" : "deleted",
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "failed" : 0
      },
      "_seq_no" : 8,
      "_primary_term" : 3
    }
    
  1. 查询删除

    # 查询删除
    POST /{index}/_delete_by_query
    {
      "query":{
          # "match_all":{} 表示删除所有
        "match":{
        	"{field}": "{value}"
        }
      }
    } 
    

    样例:

    在创建的索引中删除匹配查询到的文档

    • 输入

      POST /nav_web_video/_delete_by_query
      {
        "query": {
          "match": {
            "name": "爱奇艺"
          }
        }
      }
      
    • 输出

      {
       "took" : 709,
        "timed_out" : false,
        "total" : 1,
        "deleted" : 1,
        "batches" : 1,
        "version_conflicts" : 0,
        "noops" : 0,
        "retries" : {
          "bulk" : 0,
          "search" : 0
        },
        "throttled_millis" : 0,
        "requests_per_second" : -1.0,
        "throttled_until_millis" : 0,
        "failures" : [ ]
      }
      
      

批量文档操作

ElasticSearch提供了文档的批量操作机制.

ElasticSearch提供了Bulk API,可以执行批量索引、批量删除、批量更新等操作,也就是说Bulk API允许使用在单个步骤中进行多次 create 、 index 、 update 或 delete 请求。

create 和index的区别:

如果数据存在,使用create操作失败,会提示文档已经存在,使用index则可以成功执行。

bulk一次最大处理多少数据量?

bulk会把将要处理的数据载入内存中,所以数据量是有限制的,最佳的数据量不是一个确定的数值,它取决于你的硬件,你的文档大小以及复杂性,你的索引以及搜索的负载。

一般建议是1000-5000个文档,如果你的文档很大,可以适当减少队列,大小建议是5-15MB,默认不能超过100M,可以在es的配置文件(即$ES_HOME下的config下的elasticsearch.yml)中。

bulk 与其他的请求体格式稍有不同,bulk请求格式如下:

{ action: { metadata }}\n
{ request body        }\n
{ action: { metadata }}\n
{ request body        }\n
...

分成action、metadata和doc三部份

action : 必须是以下4种选项之一

index(最常用) : 如果文档不存在就创建他,如果文档存在就更新他

create : 如果文档不存在就创建他,但如果文档存在就返回错误使用时一定要在metadata设置_id值,他才能去判断这个文档是否存在

update : 更新一个文档,如果文档不存在就返回错误使用时也要给_id值,且后面文档的格式和其他人不一样,若修改单个字段不会覆盖别的字段

delete : 删除一个文档,如果要删除的文档id不存在,就返回错误使用时也必须在metadata中设置文档_id,且后面不能带一个doc,因为没意义,他是用_id去删除文档的.

metadata : 设置这个文档的metadata,像是_id、_index、_type…

doc : 就是一般的文档格式

这种格式类似一个有效的单行 JSON 文档 流 ,它通过换行符(\n)连接到一起。注意两个要点:

  • 每行一定要以换行符(\n)结尾, 包括最后一行 。这些换行符被用作一个标记,可以有效分隔行。
  • 这些行不能包含未转义的换行符,因为他们将会对解析造成干扰。这意味着这个 JSON 不 能使用 pretty 参数打印。
  • action/metadata 行指定 哪一个文档 做 什么操作 。metadata 应该 指定被索引、创建、更新或者删除的文档的 _index 、 _type 和 _id 。
  • request body 行由文档的 _source 本身组成–文档包含的字段和值。它是 index 和 create 操作所必需的。
批量操作

批量操作,包括新增、更新和删除

POST _bulk:未指定索引的批量操作, 可以操作不同索引文档,action/metadata中指定索引

POST /{index}/_bulk:指定索引的批量操作 ,只能操作被指定的索引文档

POST _bulk
{"create":{"_index":"{index}", "_id":"{id}"}}
{${json_value}}
{"update":{"_index":"{index}", "_id":"{id}"}}
{ "doc" : {${json_value}} }
{"delete":{"_index":"{index}", "_id":"{id}"}}

样例:

批量操作创建的索引下的数据,包含不同索引的增删改

  • 输入

    POST _bulk
    {"create":{"_index":"nav_web_video","_id":"1"}}
    {"name":"爱奇艺","url":"https://www.iqiyi.com/","ipAddr":"110.242.72.5","desc":"爱奇艺(iQIYI.COM)是拥有海量、优质、高清的网络视频的大型视频网站,专业的网络视频播放平台。爱奇艺影视内容丰富多元,涵盖电影、电视剧、动漫、综艺、生活、音乐、搞笑、财经、军事、体育、片花..."}
    {"update":{"_index":"nav_web_video","_id":"1"}}
    {"doc":{"name":"爱奇艺update"}}
    {"delete":{"_index":"nav_web_video", "_id":"1"}}
    {"index":{"_index":"nav_web_game","_id":"1"}}
    {"name":"腾讯游戏","url":"https://game.qq.com/","ipAddr":"157.255.245.60","desc":"腾讯游戏成立于2003年,是全球领先的游戏研发和运营商。作为“超级数字场景”理念的倡导者和实践者,腾讯游戏致力于为用户创造高品质数字生活体验,为产业和社会发展创造更多建设性的..."}
    
  • 输出

    {
      "took" : 16,
      "errors" : false,
      "items" : [
        {
          "create" : {
            "_index" : "nav_web_video",
            "_type" : "_doc",
            "_id" : "1",
            "_version" : 1,
            "result" : "created",
            "_shards" : {
              "total" : 1,
              "successful" : 1,
              "failed" : 0
            },
            "_seq_no" : 20,
            "_primary_term" : 3,
            "status" : 201
          }
        },
        {
          "update" : {
            "_index" : "nav_web_video",
            "_type" : "_doc",
            "_id" : "1",
            "_version" : 2,
            "result" : "updated",
            "_shards" : {
              "total" : 1,
              "successful" : 1,
              "failed" : 0
            },
            "_seq_no" : 21,
            "_primary_term" : 3,
            "status" : 200
          }
        },
        {
          "delete" : {
            "_index" : "nav_web_video",
            "_type" : "_doc",
            "_id" : "1",
            "_version" : 3,
            "result" : "deleted",
            "_shards" : {
              "total" : 1,
              "successful" : 1,
              "failed" : 0
            },
            "_seq_no" : 22,
            "_primary_term" : 3,
            "status" : 200
          }
        },
        {
          "index" : {
            "_index" : "nav_web_game",
            "_type" : "_doc",
            "_id" : "1",
            "_version" : 4,
            "result" : "updated",
            "_shards" : {
              "total" : 1,
              "successful" : 1,
              "failed" : 0
            },
            "_seq_no" : 3,
            "_primary_term" : 1,
            "status" : 200
          }
        }
      ]
    }
    
批量获取
GET {index}/_mget
{
    "ids" : [${id}, ${id},${id}]
}

样例:

根据id批量获取创建的索引的文档

  • 输入

    GET /nav_web_video/_mget
    {
      "ids":["1", "2"]
    }
    
  • 输出文章来源地址https://www.toymoban.com/news/detail-707789.html

    
      "docs" : [
        {
          "_index" : "nav_web_video",
          "_type" : "_doc",
          "_id" : "1",
          "_version" : 1,
          "_seq_no" : 23,
          "_primary_term" : 3,
          "found" : true,
          "_source" : {
            "name" : "爱奇艺",
            "url" : "https://www.iqiyi.com/",
            "ipAddr" : "110.242.72.5",
            "desc" : "爱奇艺(iQIYI.COM)是拥有海量、优质、高清的网络视频的大型视频网站,专业的网络视频播放平台。爱奇艺影视内容丰富多元,涵盖电影、电视剧、动漫、综艺、生活、音乐、搞笑、财经、军事、体育、片花..."
          }
        },
        {
          "_index" : "nav_web_video",
          "_type" : "_doc",
          "_id" : "2",
          "found" : false
        }
      ]
    }
    
    

到了这里,关于ES基础篇 常用API之文档API的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【从删库到跑路】详细讲解MySQL的函数和约束作用

    🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 是指一段可以直接被另一段程序调用的程序或代码 🎈字符串拼接函数 🎈把字符串全部变为小写 🎈把字符串全部变为大写 🎈字符串

    2024年02月09日
    浏览(65)
  • ES 的 RESTFUL API 常用示例

    目录 前言 一、创建索引 二、新增或修改记录 三、删除数据 四、查询数据 在这里记录ES的几种简单的 restful api操作,方便使用es开发过程中数据的模拟与验证。 下面示例中用到的index统一为blog,type统一为article。 创建一个index为blog的索引,索引中的type为articl 如果在创建索引

    2024年02月12日
    浏览(53)
  • 【从删库到跑路】MySQL系列——数据库的介绍&&MySQL的启动

    🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 数据库是一种用于存储、组织和管理数据的系统。它是一个结构化的数据集合,可以通过计算机系统进行访问、操作和更新。数据库

    2024年02月08日
    浏览(59)
  • 【从删库到跑路】一文带你明白MySQL数据库的 事务 操作

    🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 建议大家先看目录 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作

    2024年02月13日
    浏览(47)
  • 【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择

    🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【The Right Path】 🥰欢迎并且感谢大家指出小吉的问题 🎈没有创建索引时,执行SQL语句,查看SQL的耗时 🎈 创建索引后 ,执行SQL语句,查看SQL的耗时 比较发现,时间减少了 🎈细节 创建索引 相

    2024年02月16日
    浏览(51)
  • es--基础--11--es服务API--高亮

    可以让您从搜索结果中的一个或多个字段中获取突出显示的摘要,以便向用户显示查询匹配的位置。 当您请求突出显示(即高亮)时,响应结果的 highlight 字段中包括高亮的字段和高亮的片段。 Elasticsearch 默认会用 标签标记。 高亮参数 自定义高亮片段 多字段高亮 高亮性

    2024年02月09日
    浏览(39)
  • 【ElasticSearch】ElasticSearch Java API的使用——常用索引、文档、查询操作(二)

    Elaticsearch ,简称为es,es是一个开源的 高扩展 的 分布式全文检索引擎 ,它可以近乎 实时的存储 、 检索数据; 本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。es也使用java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的 目的

    2024年01月16日
    浏览(91)
  • 【从删库到跑路】MySQL系列——详细讲解SQL的DDL,DML,DQL,DCL语句

    🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 内容有点多,建议大家先看目录。 建立在关系模型基础上,由多张相互连接的二维表组成的数据库 🏀使用表存储数据,格式统一,

    2024年02月09日
    浏览(57)
  • 【从删库到跑路】MySQL数据库的查询(单表查询,多表查询,内外连接,联合查询,子查询)

    🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 在项目开发中,在进行数据库表结构设计时,会根据业务需求以及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联

    2024年02月10日
    浏览(48)
  • 【从删库到跑路】MySQL数据库的索引(一)——索引的结构(BTree B+Tree Hash),语法等

    🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 🥰欢迎并且感谢大家指出小吉的问题 索引(index)是帮助MySQL 高效获取数据 的 有序 的 数据结构 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方

    2024年02月16日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包