文章目录:
1.开篇
在上一篇文章中,对ES中的创建/查看/删除索引、创建定义映射、创建/查看/修改/删除文档的这些操作有了一定的了解认识,但是是通过Postman + JSON串的方法来实现的。文章链接:https://blog.csdn.net/weixin_43823808/article/details/119911746
那么,这篇文章,仍然是对ES中的索引、映射、文档进行操作,只是方法换成了Java API。
2.案例详解
首先需要创建一个maven工程,必然要添加ES相关的依赖。
同时双击ES安装目录的bin目录下的elasticsearch.bat ,先启动ES服务端。
<dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>7.8.0</version> </dependency> <!-- elasticsearch 的客户端 --> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.8.0</version> </dependency> <!-- elasticsearch 依赖 2.x 的 log4j --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.8.2</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.8.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.9</version> </dependency> <!-- junit 单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency>
2.1 创建ES客户端:完成与ES服务端的连接
后面的一二十个案例都是依照这个模板代码来的。
package com.szh.es; import org.apache.http.HttpHost; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import java.io.IOException; /** * */ public class ESTestClient { public static void main(String[] args) throws IOException { //创建ES客户端 RestHighLevelClient esClient = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost",9200,"http")) ); //关闭ES客户端 esClient.close(); } }
2.2 创建索引
package com.szh.es; import org.apache.http.HttpHost; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.indices.CreateIndexRequest; import org.elasticsearch.client.indices.CreateIndexResponse; import java.io.IOException; /** * */ public class ESTestIndexCreate { public static void main(String[] args) throws IOException { //创建ES客户端 RestHighLevelClient esClient = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost",9200,"http")) ); //创建索引 --- 请求对象 CreateIndexRequest request = new CreateIndexRequest("user"); //发送请求 --- 获取响应 CreateIndexResponse response = esClient.indices().create(request, RequestOptions.DEFAULT); //响应状态 boolean acknowledged = response.isAcknowledged(); System.out.println("索引操作:" + acknowledged); //关闭ES客户端 esClient.close(); } }
2.3 查看索引
package com.szh.es; import org.apache.http.HttpHost; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.indices.GetIndexRequest; import org.elasticsearch.client.indices.GetIndexResponse; import java.io.IOException; /** * */ public class ESTestIndexSearch { public static void main(String[] args) throws IOException { //创建ES客户端 RestHighLevelClient esClient = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost",9200,"http")) ); //查询索引 --- 请求对象 GetIndexRequest request = new GetIndexRequest("user"); //发送请求 --- 获取响应 GetIndexResponse response = esClient.indices().get(request, RequestOptions.DEFAULT); //响应状态 System.out.println(response.getAliases()); System.out.println(response.getMappings()); System.out.println(response.getSettings()); //关闭ES客户端 esClient.close(); } }
2.4 删除索引
package com.szh.es; import org.apache.http.HttpHost; import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest; import org.elasticsearch.action.support.master.AcknowledgedResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import java.io.IOException; /** * */ public class ESTestIndexDelete { public static void main(String[] args) throws IOException { //创建ES客户端 RestHighLevelClient esClient = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost",9200,"http")) ); //删除索引 --- 请求对象 DeleteIndexRequest request = new DeleteIndexRequest("user"); //发送请求 --- 获取响应 AcknowledgedResponse response = esClient.indices().delete(request,RequestOptions.DEFAULT); //响应状态 System.out.println(response.isAcknowledged()); //关闭ES客户端 esClient.close(); } }
2.5 创建文档
索引有了,就相当于有了数据库。接下来就需要向数据库中建表、添加数据。建表自然要有表结构(有哪些属性、这些属性分别都是什么数据类型),也就是ES中的映射,在Java代码中就可以采用实体类来实现。
package com.szh.es; /** * */ public class User { private String name; private String sex; private Integer age; //getter and setter }
package com.szh.es; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.http.HttpHost; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.xcontent.XContentType; import java.io.IOException; /** * */ public class ESTestDocInsert { public static void main(String[] args) throws IOException { //创建ES客户端 RestHighLevelClient esClient = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost",9200,"http")) ); //创建文档 --- 请求对象 IndexRequest request = new IndexRequest(); //设置索引及索引中文档的唯一性标识id(如果不指定,则ES会默认随机生成一个id) request.index("user").id("1001"); //创建数据对象(文档内容) User user = new User(); user.setName("张起灵"); user.setSex("man"); user.setAge(21); //向ES中插入数据,必须将数据格式转换为JSON ObjectMapper objectMapper = new ObjectMapper(); String userJson = objectMapper.writeValueAsString(user); request.source(userJson, XContentType.JSON); //发送请求 --- 获取响应 IndexResponse response = esClient.index(request, RequestOptions.DEFAULT); System.out.println(response.getResult()); //关闭ES客户端 esClient.close(); } }
2.6 修改文档
package com.szh.es; import org.apache.http.HttpHost; import org.elasticsearch.action.update.UpdateRequest; import org.elasticsearch.action.update.UpdateResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.xcontent.XContentType; import java.io.IOException; /** * */ public class ESTestDocUpdate { public static void main(String[] args) throws IOException { //创建ES客户端 RestHighLevelClient esClient = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost",9200,"http")) ); //修改文档 --- 请求对象 UpdateRequest request = new UpdateRequest(); //配置修改参数 --- 表示要修改user索引中id为1001的文档内容 request.index("user").id("1001"); //将修改后的内容,以JSON格式写入请求体中 request.doc(XContentType.JSON,"age",18); //发送请求 --- 获取响应 UpdateResponse response = esClient.update(request,RequestOptions.DEFAULT); System.out.println(response.getResult()); //关闭ES客户端 esClient.close(); } }
2.7 查看文档
package com.szh.es; import org.apache.http.HttpHost; import org.elasticsearch.action.get.GetRequest; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import java.io.IOException; /** * */ public class ESTestDocSearch { public static void main(String[] args) throws IOException { //创建ES客户端 RestHighLevelClient esClient = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost",9200,"http")) ); //查询文档 --- 请求对象 GetRequest request = new GetRequest(); //设置请求参数 --- 表示要查询user索引中id为1001的文档内容 request.index("user").id("1001"); //发送请求 --- 获取响应 GetResponse response = esClient.get(request,RequestOptions.DEFAULT); System.out.println(response.getSourceAsString()); //关闭ES客户端 esClient.close(); } }
2.8 删除文档
package com.szh.es; import org.apache.http.HttpHost; import org.elasticsearch.action.delete.DeleteRequest; import org.elasticsearch.action.delete.DeleteResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import java.io.IOException; /** * */ public class ESTestDocDelete { public static void main(String[] args) throws IOException { //创建ES客户端 RestHighLevelClient esClient = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost",9200,"http")) ); //删除文档 --- 请求对象 DeleteRequest request = new DeleteRequest(); //设置请求参数 --- 表示要删除user索引中id为1001的文档 request.index("user").id("1001"); //发送请求 --- 获取响应 DeleteResponse response = esClient.delete(request,RequestOptions.DEFAULT); System.out.println(response.getResult()); //关闭ES客户端 esClient.close(); } }
2.9 批量创建文档
package com.szh.es; import org.apache.http.HttpHost; import org.elasticsearch.action.bulk.BulkRequest; import org.elasticsearch.action.bulk.BulkResponse; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.xcontent.XContentType; import java.io.IOException; /** * */ public class ESTestDocInsertBatch { public static void main(String[] args) throws IOException { //创建ES客户端 RestHighLevelClient esClient = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost",9200,"http")) ); //批量新增文档 --- 请求对象 BulkRequest request = new BulkRequest(); //以JSON格式批量新增文档 --- 存入请求体中 request.add(new IndexRequest().index("user").id("1001").source(XContentType.JSON, "name", "张起灵","sex","boy","age",21)); request.add(new IndexRequest().index("user").id("1002").source(XContentType.JSON, "name", "小哥","sex","boy","age",18)); request.add(new IndexRequest().index("user").id("1003").source(XContentType.JSON, "name", "小宋","sex","boy","age",20)); //发送请求 --- 获取响应 BulkResponse response = esClient.bulk(request, RequestOptions.DEFAULT); System.out.println(response.getTook()); //关闭ES客户端 esClient.close(); } }