elastic search 基本操作
来源:互联网 发布:angular.js中文社区 编辑:程序博客网 时间:2024/05/29 09:36
转自大数据学习平台:大讲台: http://www.dajiangtai.com/course/search.do?search=elastic
一、Restful web API
elastic search提供了Restful web API,先说一下什么是Restful web API。
1、Rest——REpresentational state Transfer——表述性状态转移。
所谓状态是指网络上的某个资源在某个时间点下的数据呈现,表述性则是指这些数据可以通过一定的格式被表述出来。
简单举例如下:比如说在北京时间20170929 08:55:06.986这个时间点,我们想查看下es集群的状态,于是发送了一个HTTP GET请求:
GET /_cluster/health?pretty HTTP/1.1 Host: hadoop01:9200 Accept:
text/html,application/xhtml+xml,application/xml;...
服务器的响应头:
Content-Length:
Content-Type:application/json; charset=UTF-8356- 响应body:
{ "cluster_name" : "escluster", "status" : "green", "timed_out" : false, "number_of_nodes" : 3, "number_of_data_nodes" : 3, "active_primary_shards" : 4, "active_shards" : 8, "relocating_shards" : 1, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0}
- 响应信息显示,es集群当前状况良好,有3个节点...
我们请求的资源,在那个时间点下的状态,就通过如上的格式表述了出来。这就是表述性状态。
当然同一个状态可以通过不同的格式表述,即资源的多重表述。如上资源也可以通过xml的格式表述:
- <name>node-0</name>
- <cluster_name>escluster</cluster_name>
- ...
转移是指资源在不同时间点下呈现不同的状态,即资源从一个状态转移到了另一个状态。
- 简单举例:上面的那个请求,当我们关掉一个节点的服务,而后再次请求时,状态如下:
- 响应body:
{ "cluster_name" : "escluster", "status" : "green", "timed_out" : false, "number_of_nodes" : 2, "number_of_data_nodes" : 2, "active_primary_shards" : 4, "active_shards" : 8, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0}
- 响应信息显示,es集群当前状况良好,有2个节点...
- 以上。
- 2、REST是一种软件架构风格
- 虽然以上举例都是用http请求,但REST并不局限于web,而是因为REST通常被用于web系统中。非web的系统例如提供Service服务的后台系统同样也可以是REST风格的。
- REST是针对架构的一组约束条件和原则,满足这些约束和原则的架构,就是RESTful架构。
- 二、CURL
- 1、用法 curl [options] url
- -d/--data HTTP POST data(parama=valuea¶mb=valueb)
- -X/--request <command> Specify request command to use
- -v/--verbose 显示详细信息
2、PUT 与POST
PUT与DELETE都是幂等操作,一般用于更新操作。
幂等性是指即不论重复执行多少次,其对数据库所造成的结果都是一样的。例如更新id为1的name字段的值为liylnew,无论多少次发出此请求,结果都是将name的值更新为liylnew。
POST不是幂等操作,一般用于新增操作。比如常见的POST重复加载问题。当我们多次发出同样的POST请求后,其结果是创建出了若干资源。
3、如果只是想看一下文档是否存在,则HEAD,head只返回response head
4、如果只想局部更新则只能用POST
三、API1、 创建
url:/{index}/{type}/{documentid}
例:
curl -XPOST http://hadoop01:9200/djt/user/1 -d '{"name":"liyl","age":35}'
{"_index":"djt","_type":"user","_id":"1","_version":1,"_shards":{"total":2,"successful":2,"failed":0},"created":true}
{"_index":"djt","_type":"user","_id":"1","_version":1,"_shards":{"total":2,"successful":2,"failed":0},"created":true}
创建了一个索引库名称为djt,同时在此索引库下创建一个名称为user的类型,再创建一个documt,id为1。
2、在type已存在的情况下创建一个指定id的document
curl -XPUT http://hadoop01:9200/{index}/{type}/{documentid}?op_type=create -d '{"name":"liyl2"}'
或者
curl -XPUT http://hadoop01:9200/{index}/{type}/{documentid}/_create -d '{"name":"liyl2"}'
如果没有指定id,需要自增id的话,则只能用如下的方式:
curl -XPUT http://hadoop01:9200/{index}/{type}/ -d '{"name":"liyl2"}'
3、查询
GET /{index}/{type}/{documentid} 根据Id查询
或者
GET /{index}/{type}/_mget -d '{"ids":[1,3]}'
GET /{index}/{type}/{documentid}?_source=name 只显示指定字段
GET /{index}/{type}/_search 查询所有
GET /{index}/{type}/_search?q=name:liyl 条件查询4、更新
POST /{index}/{type}/{documentid}/_update -d {"docs":{"name":"liyl","age":22}}
5、批量操作
{action:{metadata}}
{body}
action的类型:index/create/update/delete(create 与index的区别是:如果数据已经存在,则create操作的结果为failure,index操作的结果为success)
metadata:用于指定要更新的目标。可以是:{"_index" : "djt", "_type" : "user", "_id" : "1"}
body:要更新的结果。例如{"docs":{"name":"liyl","age":33}}。
可以有多组,写到同一个文件中,用命令执行:
POST /_bulk --data-binary @文件路径
批量操作建议1000-5000条为一批,大小5M-15M,默认不超过100M,这个上限可以配置:http.max_content_length
6、并发控制(事务)
普通关系型数据库使用的是悲观锁进行并发控制(PCC)
es使用的是乐观锁进行并发控制(OCC):
es不会阻止对正在被其它线程更新的数据的访问,但是如果数据在读取和写入的中间发生了变化,写入就会失败。这需要客户端自行处理这种失败。客户端可以选择重新读取数据,再更新。也可以选择反馈给用户。
es的乐观锁的实现:
读取文档时,获得版本号
更新文档时,会把版本号传过去,es会检查要被更新的数据的最新版本号与传递过来的版本号是否相同,如果不相同,则返回失败。
阅读全文
0 0
- elastic search 基本操作
- elastic search 基本介绍
- Java对elastic search简单操作详解
- elastic search
- Elastic Search使用
- Elastic Search vs. mongodb
- elastic search教程
- Elastic Search Filter Script
- Elastic search点点滴滴
- elastic search记录
- Elastic Search RESTful API
- elastic search 配置文件
- Elastic Search Mapping
- Elastic Search 查询基础
- Elastic Search 学习概要
- ELASTIC SEARCH学习笔记
- elastic search学习
- Elastic Search学习总结
- 每日英语阅读(六十三)
- kaggle机器学习竞赛冠军及分享
- session简介
- maven相关使用
- You only look once:YOLO
- elastic search 基本操作
- 提示错误:arm-linux-gcc: Command not found
- Linux常用命令大全
- 开始进行AI学习
- 如何成为自己所在领域内前1%的顶尖人才? 凤凰科技 09-29 07:42 原标题:如何成为自己所在领域内前1%的顶尖人才? 有时你会觉得,可能你永远也实现自己的梦想。你清楚地知道自己想做什么,但有
- Leetcode题解-617. Merge Two Binary Trees
- 【BZOJ】1452 [JSOI2009]Count 树套树
- Industrial Society and its Future
- 很好用的一个轮播图