目录
1、RESTFUL定义
REST (REpresentation State Transfer)描述了一个 架构样式的网络系统,比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的 主要编写者之一。REST 指的是一组架构约束条件和原则。 满足这些约束条件和原则的应用程序或设计就是 RESTful。
REST 定义
Web 应用程序最重要的 REST 原则是,客户端和服 务器之间的交互在请求之间是无状态的。从客户端到服务 器的每个请求都必须包含理解请求所必需的信息。如果服 务器在请求之间的任何时间点重启,客户端不会得到通知。 此外,无状态请求可以由任何可用服务器回答,这十分适 合云计算之类的环境。客户端可以缓存数据以改进性能。
2、ES 内置的REST接口
URL 说明
/index/_search 搜索指定索引下的数据
/_aliases 获取或者操作索引下的别名
/index/ 查看指定索引下的详细信息
/index/type/ 创建或者操作类型
/index/mapping 创建或者操作mapping
/index/settings 创建或者操作settings
/index/_open 打开指定索引
/index/_close 关闭指定索引
/index/_refresh 刷新索引(使新增加内容对搜索可见, 不保证数据被写入磁盘) /index/_flush 刷新索引(会触发Lucene提交数据)
CURL命令
简单认为是可以在命令行下访问url的一个工具 curl是利用URL语法在命令行方式下工作的开源 文件传输工具,使用curl可以简单实现常见的 get/post请求。 Curl的使用 -X 指定http请求的方法GET POST PUT DELETE
-d 指定要传递的参数
3、CURL 创建索引库
curl -XPUT 'http://master:9200/test/' PUT/POST都可以 示例: curl -H "Content-Type: application/json" -XPOST http://master:9200/test/user/1 -d '{"name" : "jack","age" : 28}'
PUT和POST的用法区别
PUT是幂等方法,而POST并不是。所以PUT用于更新操作、 POST用于新增操作比较合适。 说白了用put执行同一条操作原数据会更新,post会创建另一条相同的数据。POST是作用在一个集合资源之上的(/articles), 而PUT操作是作用在一个具体资源之上的(/articles/123),比如说 很多资源使用数据库自增主键作为标识信息,而创建的资源的标识 信息到底是什么只能由服务端提供,这个时候就必须使用POST。
4、查询索引-GET
根据员工id查询 curl -XGET http://master:9200/test/user/1
在任意的查询字符串中添加pretty参数,es可以 得到易于识别的json结果。 检索文档中的一部分,如果只需要显示指定字段 curl -XGET 'http://master:9200/test/user/1?_source=name&pretty' 查询指定索引库指定类型所有数据 curl -XGET http://master:9200/test/user/_search?pretty
根据条件进行查询 curl -XGET 'http://master:9200/test/user/_search?q=name:john&pretty=true‘ 或者 curl -XGET 'http://master:9200/test/user/_search?q=name:john&pretty'
5、DSL查询
Domain Specific Language领域特定语言 新添加一个文档 curl -H "Content-Type: application/json" -XPUT http://master:9200/test/user/4/_create -d '{"name":"qiqi","age":17}'
curl -H "Content-Type: application/json" -XGET http://master:9200/test/user/_search d'{"query":{"match":{"name":"qiqi"}}}'
6、MGET查询
使用mget API获取多个文档 先新建一个库 curl -XPUT 'http://master:9200/test2/' curl -H "Content-Type: application/json" -XPOST http://master:9200/test2/user/1 -d '{"name" : "marry","age" : 16}'
curl -H "Content-Type: application/json" -XGET http://master:9200/_mget?pretty -d '{"docs":[{"_index":"test","_type":"user","_id":2,"_source":"name"},{"_index":"te st2","_type":"user","_id":1}]}‘
7、HEAD的使用
如果只想检查一下文档是否存在,你可以 使用HEAD来替代GET方法,这样就只会 返回HTTP头文件 curl -i -XHEAD http://master:9200/test/user/1
ES更新(1)
ES可以使用PUT或者POST对文档进行更 新(全部更新),如果指定ID的文档已经存 在,则执行更新操作 注意:执行更新操作的时候 ES首先将旧的文档标记为删除状态 然后添加新的文档 旧的文档不会立即消失,但是你也无法访问 ES会在你继续添加更多数据的时候在后台清 理已经标记为删除状态的文档
8、ES更新
局部更新,可以添加新字段或者更新已有 字段(必须使用POST) curl -H "Content-Type: application/json" -XPOST http://master:9200/test/user/1/_update -d '{"doc":{"name":"baby","age":27}}‘
curl -XGET http://master:9200/test/user/1?pretty
9、ES删除
删除操作 curl -XDELETE http://master:9200/test/user/1 curl -XGET http://master:9200/test/user/1 如果文档存在,result属性值为deleted,_version属 性的值+1 如果文档不存在,result属性值为not_found, 但是_version属性的值依然会+1,这个就是 内部管理的一部分,它保证了我们在多个节 点间的不同操作的顺序都被正确标记了 注意:删除一个文档也不会立即生效,它只是被 标记成已删除。Elasticsearch将会在你之后添加 更多索引的时候才会在后台进行删除内容的清理。
10、ES版本控制
普通关系型数据库使用的是(悲观并发控制(PCC)) 当我们在修改一个数据前先锁定这一行,然后确保只有读取到数据的 这个线程可以修改这一行数据. ES使用的是(乐观并发控制(OCC)) ES不会阻止某一数据的访问,然而,如果基础数据在我们读取和写入 的间隔中发生了变化,更新就会失败,这时候就由程序来决定如何处 理这个冲突。它可以重新读取新数据来进行更新,又或者将这一情况 直接反馈给用户。 ES如何实现版本控制(使用es内部版本号) 首先得到需要修改的文档,获取版本(_version)号 curl -XGET http://master:9200/test/user/2 在执行更新操作的时候把版本号传过去 curl -H "Content-Type: application/json" -XPUT http://master:9200/test/user/2?version=1 -d '{"name":"john","age":29}' curl -H "Content-Type: application/json" -XPOST http://master:9200/test/user/2/_update?version=2 -d '{"doc":{"age":30}}' 如果传递的版本号和待更新的文档的版本号不一致,则会更新失败
ElasticSearch核心