AI智能
改变未来

ElasticSearch Java API

[TOC]

SpringBoot 整合 ES

1)引入 ElasticSearch 相关坐标

<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.4.0</version></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId><version>7.4.0</version></dependency><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.4.0</version></dependency>

2)ElasticSearchConfig.java(ES 配置类)

package com.example.es_demo.config;import org.apache.http.HttpHost;import org.elasticsearch.client.RestClient;import org.elasticsearch.client.RestHighLevelClient;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configuration@ConfigurationProperties(prefix = "elasticsearch")public class EsConfig {private String host;private int port;public String getHost() {return host;}public void setHost(String host) {this.host = host;}public int getPort() {return port;}public void setPort(int port) {this.port = port;}@Beanpublic RestHighLevelClient client(){return new RestHighLevelClient(RestClient.builder(new HttpHost(host, port, "http")));}}

3)测试类

  • 注意:使用 @Autowired 注入 RestHighLevelClient 时如果报红线,则是因为配置类所在的包和测试类所在的包,两者包名不一致造成的。
package com.example.es_demo;import org.elasticsearch.client.RestHighLevelClient;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;@SpringBootTestclass EsDemoApplicationTests {@AutowiredRestHighLevelClient client;@Testvoid contextLoads() {System.out.println(client);}}

操作索引

创建索引

/*** 添加索引*/@Testpublic void addIndex() throws IOException {// 1.使用client获取操作索引对象IndicesClient indices = client.indices();// 2.创建索引CreateIndexRequest createIndexRequest = new CreateIndexRequest("index1");CreateIndexResponse createIndexResponse = indices.create(createIndexRequest, RequestOptions.DEFAULT);// 3.根据返回值判断结果System.out.println(createIndexResponse.isAcknowledged());}/*** 添加索引,并添加映射*/@Testpublic void addIndexAndMapping() throws IOException {// 1.使用client获取操作索引对象IndicesClient indices = client.indices();// 2.添加索引CreateIndexRequest createIndexRequest = new CreateIndexRequest("index2");// 3.添加mappingsString mapping = "{\\n" +"      \\"properties\\" : {\\n" +"        \\"address\\" : {\\n" +"          \\"type\\" : \\"text\\",\\n" +"          \\"analyzer\\" : \\"ik_max_word\\"\\n" +"        },\\n" +"        \\"age\\" : {\\n" +"          \\"type\\" : \\"long\\"\\n" +"        },\\n" +"        \\"name\\" : {\\n" +"          \\"type\\" : \\"keyword\\"\\n" +"        }\\n" +"      }\\n" +"    }";createIndexRequest.mapping(mapping, XContentType.JSON);CreateIndexResponse createIndexResponse = indices.create(createIndexRequest, RequestOptions.DEFAULT);// 4.根据返回值判断结果System.out.println(createIndexResponse.isAcknowledged());}

查询索引

/*** 查询索引*/@Testpublic void queryIndex() throws IOException {IndicesClient indices = client.indices();GetIndexRequest getRequest=new GetIndexRequest("index2");GetIndexResponse response = indices.get(getRequest, RequestOptions.DEFAULT);Map<String, MappingMetaData> mappings = response.getMappings();for (String key : mappings.keySet()) {System.out.println(key+"==="+mappings.get(key).getSourceAsMap());// index2==={properties={address={analyzer=ik_max_word, type=text}, name={type=keyword}, age={type=long}}}}}/*** 判断索引是否存在*/@Testpublic void existIndex() throws IOException {IndicesClient indices = client.indices();GetIndexRequest getIndexRequest=new GetIndexRequest("index1");boolean exists = indices.exists(getIndexRequest, RequestOptions.DEFAULT);System.out.println(exists);}

删除索引

/*** 删除索引*/@Testpublic void deleteIndex() throws IOException {IndicesClient indices = client.indices();DeleteIndexRequest deleteRequest=new DeleteIndexRequest("index2");AcknowledgedResponse delete = indices.delete(deleteRequest, RequestOptions.DEFAULT);// 返回是否删除成功System.out.println(delete.isAcknowledged());}

操作文档

引入阿里巴巴的 JSON 格式转换库:

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.4</version></dependency>

添加文档

注意:在仅有索引的情况下也可以添加文档,且在有映射的情况下也可以新增字段,两者操作均会自动添加默认类型。

/*** 添加文档,使用map作为数据*/@Testpublic void addDoc() throws IOException {// map数据Map data = new HashMap();data.put("address", "北京昌平");data.put("name", "大胖");data.put("age", 20);// 获取操作文档的对象IndexRequest request = new IndexRequest("index2").id("1").source(data);// 添加数据,获取结果IndexResponse response = client.index(request, RequestOptions.DEFAULT);//打印响应结果System.out.println(response.getId());}/*** 添加文档,使用对象作为数据*/@Testpublic void addDoc2() throws IOException {// 对象数据Person p = new Person();p.setId("3");p.setName("小胖3333");p.setAge(30);p.setAddress("广东深圳");p.setHobby("basketball");// 将对象转为jsonString data = JSON.toJSONString(p);// 获取操作文档的对象IndexRequest request = new IndexRequest("index2").id(p.getId()).source(data, XContentType.JSON);// 添加数据,获取结果IndexResponse response = client.index(request, RequestOptions.DEFAULT);// 打印响应结果System.out.println(response.getId());

修改文档

/*** 修改文档:添加文档时,如果id存在则修改,id不存在则添加*/@Testpublic void UpdateDoc() throws IOException {Person person=new Person();person.setId("2");person.setName("李四");person.setAge(20);person.setAddress("北京三环车王");String data = JSON.toJSONString(person);IndexRequest request=new IndexRequest("itcast").id(person.getId()).source(data,XContentType.JSON);IndexResponse response = client.index(request, RequestOptions.DEFAULT);System.out.println(response.getId());}

查询文档

/*** 根据id查询文档*/@Testpublic void getDoc() throws IOException {//设置查询的索引、文档GetRequest indexRequest=new GetRequest("itcast","2");GetResponse response = client.get(indexRequest, RequestOptions.DEFAULT);System.out.println(response.getSourceAsString());}

删除文档

/*** 根据id删除文档*/@Testpublic void delDoc() throws IOException {//设置要删除的索引、文档DeleteRequest deleteRequest=new DeleteRequest("itcast","1");DeleteResponse response = client.delete(deleteRequest, RequestOptions.DEFAULT);System.out.println(response.getId());}

bulk 批量操作

/***  Bulk 批量操作*/@Testpublic void test2() throws IOException {// 创建bulkrequest对象,整合所有操作BulkRequest bulkRequest =new BulkRequest();// 1. 删除5号记录DeleteRequest deleteRequest=new DeleteRequest("person1", "5");bulkRequest.add(deleteRequest);// 2. 添加6号记录Map<String, Object> map=new HashMap<>();map.put("name", "六号");IndexRequest indexRequest=new IndexRequest("person1").id("6").source(map);bulkRequest.add(indexRequest);// 3. 修改3号记录 名称为 “三号”Map<String, Object> mapUpdate=new HashMap<>();mapUpdate.put("name", "三号");UpdateRequest updateRequest=new UpdateRequest("person1", "3").doc(mapUpdate);bulkRequest.add(updateRequest);// 执行批量操作BulkResponse response = client.bulk(bulkRequest, RequestOptions.DEFAULT);System.out.println(response.status());}

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » ElasticSearch Java API