目录
一、集成Spring Boot
1、创建项目
2、pom文件 查看springboot集成的依赖
3、增加es的config类
二、索引相关API
1、创建索引
2、获取索引,判断其是否存在
3、删除索引
三、文档相关API
1、添加文档
2、获取文档,判断是否存在
3、获取文档信息
4、更新文档信息
5、删除文档信息
6、同文档批量导入数据
7、条件查询文档信息
一、集成Spring Boot
Java使用对应的rest风格调用ES是通过client依赖包进行操作的
配置需要的 maven 依赖
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.17.24</version>
</dependency>
1、创建项目
如果创建项目后拉取不到对应依赖,springboot 可以选用低一些的稳定版本例如 2.3.2.RELEASE 版本
2、pom文件 查看springboot集成的依赖
(当然也可自定义ES版本)
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency>
3、增加es的config类
package com.example.elasticsearch_springboot_demo.config;import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ElasticSearchClientConfig {@Beanpublic RestHighLevelClient restHighLevelClient(){RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http"),new HttpHost("localhost", 9201, "http")));return client;}
}
二、索引相关API
1、创建索引
@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;/*** 【索引相关】索引创建*/@Testvoid testCreateIndex() throws IOException {// 1、创建索引请求CreateIndexRequest request = new CreateIndexRequest("m_index");// 2、客户端执行请求 IndicesClient,执行创建请求 并获得响应结果CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);// 3、查看响应结果System.out.println(createIndexResponse);}
}
2、获取索引,判断其是否存在
@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;/*** 【索引相关】获取索引,判断其是否存在*/@Testvoid testExistIndex() throws IOException {// 1、获取索引请求GetIndexRequest request = new GetIndexRequest("m_index");// 2、客户端执行请求 IndicesClient,执行请求后获得是否存在结果boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);// 3、查看结果System.out.println(exists);}
}
3、删除索引
@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;/*** 【索引相关】删除索引*/@Testvoid testDeleteIndex() throws IOException {// 1、删除索引请求DeleteIndexRequest request = new DeleteIndexRequest("m_index");// 2、客户端执行请求 IndicesClient,执行删除请求 并获得响应结果AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);// 3、查看结果System.out.println(delete.isAcknowledged());}
}
三、文档相关API
先定义一个User类
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class User {private String name;private Integer age;}
1、添加文档
@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;/*** 【文档相关】添加文档*/@Testvoid testAddDocument() throws IOException {// 1、user对象User user = new User("marvin", 26);// 2、创建请求对象,并组装文档数据IndexRequest request = new IndexRequest("m_index");// 定义文档内容// 规则 put /m_index/_doc/1request.id("1");request.timeout(TimeValue.timeValueSeconds(1));request.timeout("1s");//将user数据放入请求jsonrequest.source(JSON.toJSONString(user), XContentType.JSON);// 3、客户端发送请求,获取响应的结果IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);// 4、查看结果System.out.println(indexResponse.toString());// 对应的文档信息System.out.println(indexResponse.status());// 执行命令的返回状态}
}
2、获取文档,判断是否存在
get /index/doc/1
@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;/*** 【文档相关】获取文档,判断是否存在 get /index/doc/1*/@Testvoid testIsExistsDocument() throws IOException {GetRequest getRequest = new GetRequest("m_index", "1");// 不获取返回的_source 的上下文getRequest.fetchSourceContext(new FetchSourceContext(false));getRequest.storedFields("_none_");boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);System.out.println(exists);}
}
3、获取文档信息
@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;/*** 【文档相关】获取文档信息*/@Testvoid testGetDocument() throws IOException {GetRequest getRequest = new GetRequest("m_index", "1");GetResponse documentFields = client.get(getRequest, RequestOptions.DEFAULT);System.out.println(documentFields.getSourceAsString());// 打印文档内容System.out.println(documentFields);// 返回的全部内容和命令是一样的}
}
4、更新文档信息
@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;/*** 【文档相关】更新文档信息*/@Testvoid testUpdateDocument() throws IOException {UpdateRequest updateRequest = new UpdateRequest("m_index", "1");updateRequest.timeout("1s");User user = new User("jerry", 28);updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);UpdateResponse updateResponse = client.update(updateRequest, RequestOptions.DEFAULT);System.out.println(updateResponse.status());}
}
5、删除文档信息
@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;/*** 【文档相关】删除文档信息*/@Testvoid testDeleteDocument() throws IOException {DeleteRequest deleteRequest = new DeleteRequest("m_index", "1");deleteRequest.timeout("1s");DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);System.out.println(deleteResponse.status());}
}
6、同文档批量导入数据
@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;/*** 【文档相关】特殊的,批量导入数据*/@Testvoid testBulkDocument() throws IOException {BulkRequest bulkRequest = new BulkRequest();bulkRequest.timeout("10s");List<User> userList = new ArrayList<>();userList.add(new User("marvin1", 26));userList.add(new User("marvin2", 26));userList.add(new User("marvin3", 26));userList.add(new User("marvin4", 26));userList.add(new User("marvin5", 26));userList.add(new User("marvin6", 26));// 批处理请求for (int i=0; i<userList.size();i++){// 批量更新和批量删除,就再这里修改对应请求就可以了bulkRequest.add(new IndexRequest("m_index").id(""+(i+1)).source(JSON.toJSONString(userList.get(i)), XContentType.JSON));}BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);System.out.println(bulkResponse.hasFailures());// 是否失败,返回false 代表成功!}
}
7、条件查询文档信息
@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;/*** 查询* searchRequest 搜索请求* SearchSourceBuilder 搜索条件构造*/@Testvoid testSearch() throws IOException {// 1、创建搜索请求SearchRequest searchRequest = new SearchRequest("m_index");// 2、构建搜索条件SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();/*** 查询条件,可以使用QueryBuilders快速匹配*///精确匹配:termQueryTermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "marvin");//匹配所有MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();sourceBuilder.query(termQueryBuilder);sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));// 3、将查询条件放入请求searchRequest.source(sourceBuilder);// 4、执行请求SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);// 5、所有结果都封装在 SearchHits 里面,通过getHits()得到System.out.println(JSON.toJSONString(searchResponse.getHits()));System.out.println("===================================");//循环输出每一条数据结果为map结构for (SearchHit documentFields : searchResponse.getHits().getHits()){System.out.println(documentFields.getSourceAsMap());// 转换为map结构}}
}