一、文档的添加

  1. POST http://127.0.0.1:9200/{index}/{type}/{id}
  2. {
  3. "key":"value",
  4. "key2":"value2",
  5. "key2":"value2",
  6. }

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

添加多个文档

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

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

不同索引下的批量添加

  1. POST http://127.0.0.1:9200/_bulk
  2. { "index": { "_index": "{index}", "_type": "{type}", "_id": "{id}" }}
  3. { "key1": "key2" }
  4. { "index": { "_index": "{index}", "_type": "{type}", "_id": "{id}" }}
  5. { "key1": "key2" }
  6. { "index": { "_index": "{index}", "_type": "{type}", "_id": "{id}" }}
  7. { "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状态。

添加成功会返回

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

二、文档的修改

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

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

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

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

可以增加新的属性。

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

三、文档的删除

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

例如:

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

成功返回:

  1. {
  2. "found" : true,
  3. "_index" : {index},
  4. "_type" : {type},
  5. "_id" : {id},
  6. "_version" :
  7. }

删除是_version也会加1。

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

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

四、文档的查看

1.直接通过id获取文档

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

结果为:

  1. {
  2. "_index" : {index},
  3. "_type" : {type},
  4. "_id" : {id},
  5. "_version" : ,
  6. "found" : true,
  7. "_source":{
  8. "key1":"value"
  9. }
  10. }

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

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

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

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

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

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

例如:

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

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

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

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

2.多文档查询

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

例如

  1. POST /_mget?pretty
  2. {
  3. "docs":[
  4. {"_index":"index1","_type":"index1","_id":""},
  5. {"_index":"index2","_type":"index2","_id":""}
  6. ]
  7. }

返回的结果结构为:

  1. {
  2. "docs":[
  3. {
  4.  
  5. "_index" : {index},
  6. "_type" : {type},
  7. "_id" : {id},
  8. "_version" : ,
  9. "found" : true,
  10. "_source":{
  11. "key1":"values1"
  12. }
  13. },
  14. {
  15.  
  16. "_index" : {index},
  17. "_type" : {type},
  18. "_id" : {id},
  19. "_version" : ,
  20. "found" : true,
  21. "_source":{
  22. "key1":"values1"
  23. }
  24. }
  25.  
  26. ]
  27. }

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

  1. POST /{index}/{type}/_mget?pretty
  2. {
  3. "docs":[
  4. {"_id":"","_source":false},
  5. {"_id":"","_source":["key1","key2"]}
  6.  
  7. ]
  8. }

3.没有任何条件的查询

  1. GET /{index}/{type}/_search

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

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

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

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

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

ElasticSearch学习之——基本的文档CURD的更多相关文章

  1. ElasticSearch 学习记录之 分布式文档存储往ES中存数据和取数据的原理

    分布式文档存储 ES分布式特性 屏蔽了分布式系统的复杂性 集群内的原理 垂直扩容和水平扩容 真正的扩容能力是来自于水平扩容–为集群添加更多的节点,并且将负载压力和稳定性分散到这些节点中 ES集群特点 ...

  2. Elasticsearch学习系列之多文档操作mget

    测试数据 GET /library/books/1 { "_index": "library", "_type": "books& ...

  3. Elasticsearch入门教程(四):Elasticsearch文档CURD

    原文:Elasticsearch入门教程(四):Elasticsearch文档CURD 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接: ...

  4. Elasticsearch配置详解、文档元数据

    目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.Elasticsearch配置文件详解 a. 在上面博客中,我们已经安装并且成功 ...

  5. ElasticSearch(二):文档的基本CRUD与批量操作

    ElasticSearch(二):文档的基本CRUD与批量操作 学习课程链接<Elasticsearch核心技术与实战> Create 文档 支持自动生成文档_id和指定文档_id两种方式 ...

  6. Elasticsearch中最重要的文档CRUD要牢记

    Elasticsearch文档CRUD要牢记 转载参考:https://juejin.im/post/5ddbf298e51d4523053c42e7 在Elasticsearch中,文档(docum ...

  7. Qt入门学习——Qt 5 帮助文档的使用

    Qt入门学习——Qt 5 帮助文档的使用 学习图形界面开发,肯定离不开帮助文档的使用,因为它不像 C 语言那样就那么几个函数接口,图形接口的接口可以用海量来形容,常用的我们可能能记住,其它的真的没有必 ...

  8. Javascript学习8 - 脚本化文档(Document对象)

    原文:Javascript学习8 - 脚本化文档(Document对象) 每个Web浏览器窗口(或帧)显示一个HTML文档,表示这个窗口的Window对象有一个document属性,它引用了一个Doc ...

  9. webservice学习01:wsdl文档结构

    webservice学习01:wsdl文档结构 wsdl文档结构 WSDL文档示例 <wsdl:definitions xmlns:xsd="http://www.w3.org/200 ...

随机推荐

  1. servlet(一):从Sevlet到HttpServlet

    Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层. servlet ...

  2. Q:判断链表中是否存在环的相关问题

    问题:如何判断一个单向链表中是否存在环? 例如: 链表中存在环(B-->D): <-- <--^ | | v | A-->B-->C-->D 链表中不存在环: A- ...

  3. AGC008E:Next or Nextnext

    传送门 考虑转化成图论问题,\(i\) 向 \(p_i\) 连边,那么合法方案一定是形成了若干个简单环或自环 考虑一个环内的情况: 如果 \(a_i=p_i\),那么 \(i\) 向 \(a_i\) ...

  4. 网件路由器wps无法设置

    问题:网件路由器WPS设置项全为灰色,无没设置 原因:因为设置WIFI时,将ssid广播隐藏了,导致WPS功能失效,所以WPS设置项为灰色.要想设置WPS,将SSID广播恢复即可

  5. 图片按钮(imageButton)

    图片按钮(imageButton) 常用属性: android:src="@drawable/download" (这里的download是一张图片的名称,通过引用该图片的名称直接 ...

  6. 深入理解net core中的依赖注入、Singleton、Scoped、Transient(二)

    相关文章: 深入理解net core中的依赖注入.Singleton.Scoped.Transient(一) 深入理解net core中的依赖注入.Singleton.Scoped.Transient ...

  7. GIT速成

    安装工具与使用工具: GIT工具 :https://www.git-scm.com/download/ WINGDOWS图形界面工具:https://download.tortoisegit.org/ ...

  8. c# 将秒数转换成时,分,秒的方法

    TimeSpan ts = , ,Convert.ToInt32( duration)); string str = ""; ) { str = ts.Hours.ToString ...

  9. Leetcode题解之Container With Most Water

    1.题目描述 2.题目分析 首先,这个题可以使用暴力解法,时间复杂度是O(n^2),这个显然是最容易的做法,但是效率不够高,题目提供了一种解法,使用两个指针,一个从头向尾部,另外一个从尾部向头部,每一 ...

  10. Oracle EBS 查询客户报错 查询已超出 200 行。可能存在更多的行,请限制查询。