elasticsearch 主键字段_ElasticSearch入门篇(二)

REST

1、REST简介

ElasticSearch

index(索引库) type(类型) document(文档) field(字段)

REST全称Representational State Transfer。是一种软件的架构风格,而不是标准,只是提供了一组设计原则和约束 条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存 等机制。

其实说白了就是类似HTTP的访问,和HTTP非常的相似。 REST操作: GET:获取对象的当前状态; PUT:改变对 象的状态; POST:创建对象; DELETE:删除对象; HEAD:获取头信息。

2、Rest具体操作说明

21fa4ad118c0eae7039bc4e9bdca42b5.png

3、ES内置REST接口

52849a1d115be83575cf0b0a17d0dee8.png

CURL简介

curl是利用URL语法在命令行方式下工作的开源文件传输工具,使用curl可以简单实现常见的get/post请求。简单的 认为是可以在命令行下面访问url的一个工具。在centos的默认库里面是有curl工具的,如果没有请yum安装即可。

curl -X 指定http的请求方法 有 HEAD GET POST PUT DELETE -d 指定要传输的数据 -H 指定http请求头信息

  • 使用CURL创建索引库、创建索引

curl创建索引库 curl -XPUT http://:9200/index_name/ PUT或POST都可以创建 举例: curl -XPUT 'http://localhost: 9200/bigdata'

创建索引

curl -H 'Content-Type:application/json' -XPOST 'http://localhost:9200/bigdata/product/1' -d '{ "name" : "hadoop", "author" : "Doug Cutting", "core" : ["hdfs","mr","yarn"], "latest_version": 3.0 }'
  • 使用CURL进行PUT和POST操作

PUT是幂等方法,POST不是。所以PUT用户更新,POST用于新增比较合适。 PUT和DELETE操作是幂等的。所谓幂 等是指不管进行多少次操作,结果都一样。比如用PUT修改一篇文章,然后在做同样的操作,每次操作后的结果并没 有什么不同,DELETE也是一样。 POST操作不是幂等的,比如常见的POST重复加载问题:当我们多次发出同样的 POST请求后,其结果是创建了若干的资源。 还有一点需要注意的就是,创建操作可以使用POST,也可以使用PUT,

区别就在于POST是作用在一个集合资源(/articles)之上的,而PUT操作是作用在一个具体资源之上的(/articles/123), 比如说很多资源使用数据库自增主键作为标识信息,这个时候就需要使用PUT了。而创建的资源的标识信息到底是什 么,只能由服务端提供时,这个时候就必须使用POST。 ES创建索引库和索引时的注意点 1)索引库名称必须要全部小 写,不能以下划线开头,也不能包含逗号 2)如果没有明确指定索引数据的ID,那么es会自动生成一个随机的ID,需 要使用POST参数 curl -XPOST http://localhost:9200/bigdata/product/ -d '{"author" : "Doug Cutting"}'

如果想要确定创建的都是全新的数据 1:使用随机ID(POST方式) 2:在url后面添加参数 curl -XPOST http://localhos t:9200/bigdata/product/2?op_type=create -d '{"name" : "hbase"}' curl -XPOST http://localhost:9200/bigdata/pr oduct/3/_create -d '{"name" : "hive"}' 如果成功创建了新的文档,ES将会返回常见的元数据以及created为true的反 馈。如果存在同名文件,ES将会返回AlreadyExistsException。 之前的版本如果成功创建了新的文档,Elasticsearch 将会返回常见的元数据以及201 Created的HTTP反馈码。而如果存在同名文件,Elasticsearch将会返回一个409 Conflict的HTTP反馈码

  • CURL使用之查询所有

查询所有 -GET 根据产品ID查询 curl -XGET http://localhost:9200/bigdata/product/1?pretty 在任意的查询url中添 加pretty参数,es可以获取更易识别的json结果。 检索文档中的一部分,显示特定的字段内容 curl -XGET http://loca lhost:9200/bigdata/product/1?source=name,author&pretty' source curl -XGET 'http://localhost:9200/bigdata/product/1/source?pretty' 查询所有 curl -XGET 'http://localhost:9200/bigdata/prod uct/_search?pretty' 根据条件进行查询 curl -XGET 'http://localhost:9200/bigdata/product/_search?q=name:hbas e&pretty'

  • CURL使用之ES更新&删除

ES更新 ES可以使用PUT或者POST对文档进行更新,如果指定ID的文档已经存在,则执行更新操作 注意:执行更新操 作的时候,ES首先将旧的文档标记为删除状态,然后添加新的文档,旧的文 档不会立即消失,但是你也无法访问, ES会继续添加更多数据的时候在后台清理已经标记为删 除状态的文档。 局部更新 可以添加新字段或者更新已经存在 字段(必须使用POST)

curl -XPOST http://localhost:9200/bigdata/product/1/_update -d '{"doc":{"name" : "apache- hadoop"}}'

普通删除,根据主键删除 curl -XDELETE http://localhost:9200/bigdata/product/3/ 说明:如果文档存在,es属性 found:true,successful:1,_version属性的值+1。 如果文档不存在,es属性found为false,但是版本值version依 然会+1,这个就是内部 管理的一部分,有点像svn版本号,它保证了我们在多个节点间的不同操作的顺序被正确标记 了。 注意:一个文档被删除之后,不会立即生效,他只是被标记为已删除。ES将会在你之后添加 更多索引的时候才 会在后台进行删除。

  • CURL使用之ES批量操作-bulk

Bulk api可以帮助我们同时执行多个请求 格式: action:[index|create|update|delete] metadata:index,type,id request body:source(删除操作不需要) {action:{metadata}} {request body} {action:{metadata}} {request body} create和index的区别 如果数据存在,使用create操作失败,会提示文档已经存在,使用index则可以成功执 行。 使用文件的方式 vi reqeusts curl -XPOST/PUT http://localhost:9200/index/type/_bulk --data-binary @path 比如 curl -XPOST 'http://localhost:9200/bank/accout/_bulk?pretty' --data-binary "@data/accounts.json"

accounts数据说明.txt

银行客户账号信息文档,文档schema如下 { "account_number": 0, "balance": 16623, "firstname": "Bradshaw", "lastname": "Mckenzie", "age": 29, "gender": "F", "address": "244 Columbus Place", "employer": "Euron", "email": "bradshawmckenzie@euron.com", "city": "Hobucken", "state": "CO" }

可以查看一下各个索引库信息 curl 'http://localhost:9200/_cat/indices?v'

Bulk请求可以在URL中声明/index /index/_type Bulk一次最大处理多少数据量 Bulk会把将要处理的数据载入内存 中,所以数据量是有限制的 最佳的数据量不是一个确定的数值,它取决于你的硬件,你的文档大小以及复杂性,你 的索引以及搜索的负载 一般建议是1000~5000个文档,如果你的文档很大,可以适当减少队列,大小建议是 5~15MB,默认不能超过100M,可以在es的配置文件中修改这个值 http.max_content_length:100mb

  • CURL使用之ES版本控制

ES版本控制 普通关系型数据库使用的是(悲观并发控制(PCC)) 当我们在读取一个数据前先锁定这一行,然后确 保只有读取到数据的这个线程可以修改 这一行数据 ES使用的是(乐观并发控制(OCC)) ES不会阻止某一数据的访 问,然而,如果基础数据在我们读取和写入的间隔中发生了变 化,更新就会失败,这时候就由程序来决定如何处理 这个冲突。它可以重新读取新数据来进 行更新,又或者将这一情况直接反馈给用户。 ES如何实现版本控制(使用es内 部版本号)

1:首先得到需要修改的文档,获取版本(version)

curl -XGET http://localhost:9200/bigdata/product/1

2 、

curl -XPUT http://localhost:9200/bigdata/product/1?version=1 -d '{"name":"hadoop","version":3}'
curl -XPOST http://localhost:9200/bigdata/product/1/update?version=3 -d '{"doc":{"name":"apache hadoop","latest_version": 2.6}}'(部分更新)

3、如果传递的版本号和待更新的文档的版本 号不一致,则会更新失败 ES如何实现版本控制(使用外部版本号) 如果你的数据库已经存在了版本号,或者是可以代 表版本的时间戳。这时就可以在es的查 询url后面添加version_type=external来使用这些号码。 注意:版本号码必须 要是大于0小于9223372036854775807(Java中long的最大正值)的 整数。

es在处理外部版本号的时候,它不再检查version version是否比 指定的数值小,如果小,则请求成功。 example:

curl -XPUT 'http://localhost:9200/bigdata/product/20?version =10&version_type=external' -d '{"name": "flink"}'

注意:此处url前后的引号不能省略,否则执行的时候会报错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot整合Elasticsearch常用API主要包括以下几个方面: 1. 配置Elasticsearch信息 首先需要在application.yml中配置Elasticsearch的连接信息: ``` spring: data: elasticsearch: cluster-name: elasticsearch cluster-nodes: 127.0.0.1:9300 ``` 2. 创建ElasticsearchRepository 在SpringBoot中,可以通过ElasticsearchRepository来访问Elasticsearch,只需要继承该接口即可。 ``` public interface UserRepository extends ElasticsearchRepository<User, Long> { } ``` 其中,User是实体类,Long是主键类型。 3. 创建实体类 创建实体类,使用注解来映射Elasticsearch中的索引字段。 ``` @Document(indexName = "user", type = "_doc") public class User { @Id private Long id; @Field(type = FieldType.Keyword) private String name; @Field(type = FieldType.Integer) private Integer age; // getter and setter } ``` 4. 增删改查 通过ElasticsearchRepository提供的方法,可以实现增删改查的操作。如下: ``` @Autowired UserRepository userRepository; // 新增 userRepository.save(user); // 删除 userRepository.deleteById(id); // 修改 userRepository.save(user); // 查询 Optional<User> optional = userRepository.findById(id); ``` 5. 搜索 Elasticsearch提供了丰富的搜索API,可以通过QueryBuilder来构建查询条件,通过SearchRequest来执行搜索操作。如下: ``` @Autowired RestHighLevelClient restHighLevelClient; // 构建查询条件 QueryBuilder queryBuilder = QueryBuilders.matchQuery("name", "张三"); // 构建SearchRequest SearchRequest searchRequest = new SearchRequest("user"); searchRequest.types("_doc"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(queryBuilder); searchRequest.source(searchSourceBuilder); // 执行搜索 SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); // 处理搜索结果 SearchHits hits = searchResponse.getHits(); for (SearchHit hit : hits) { String sourceAsString = hit.getSourceAsString(); User user = JSON.parseObject(sourceAsString, User.class); System.out.println(user); } ``` 以上就是SpringBoot整合Elasticsearch常用API的介绍。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值