本篇文章为你整理了Elasticsearch rest(elasticsearch restful)的详细内容,包含有ElasticsearchRestTemplate elasticsearch restful elasticsearch resthighclient elasticsearch restful api Elasticsearch rest,希望能帮助你了解 Elasticsearch rest。
本篇主要讲解一下 rest-high-level-client 去操作 Elasticsearch , 虽然这个客户端在后续版本中会慢慢淘汰,但是目前大部分公司中使用Elasticsearch 版本都是6.x 所以这个客户端还是有一定的了解
准备一个SpringBoot环境 2.2.11 版本
准备一个Elasticsearch 环境 我这里是8.x版本
引入依赖 elasticsearch-rest-high-level-client 7.4.2
1.配置依赖
注意: 我使用的是 springboot 2.2.11 版本 , 它内部的 elasticsearch 和 elasticsearch-rest-client 都是 6.8.13 需要注意
dependency
groupId org.springframework.boot /groupId
artifactId spring-boot-starter-web /artifactId
/dependency
dependency
groupId org.projectlombok /groupId
artifactId lombok /artifactId
optional true /optional
/dependency
dependency
groupId org.springframework.boot /groupId
artifactId spring-boot-starter-test /artifactId
scope test /scope
/dependency
!-- 引入 elasticsearch 7.4.2 --
dependency
groupId org.elasticsearch /groupId
artifactId elasticsearch /artifactId
version 7.4.2 /version
exclusions
exclusion
artifactId log4j-api /artifactId
groupId org.apache.logging.log4j /groupId
/exclusion
/exclusions
/dependency
!-- 排除 elasticsearch-rest-client , 也可不排除 为了把maven冲突解决 --
dependency
groupId org.elasticsearch.client /groupId
artifactId elasticsearch-rest-high-level-client /artifactId
version 7.4.2 /version
exclusions
exclusion
groupId org.elasticsearch.client /groupId
artifactId elasticsearch-rest-client /artifactId
/exclusion
exclusion
artifactId elasticsearch /artifactId
groupId org.elasticsearch /groupId
/exclusion
/exclusions
/dependency
!-- 不引入会导致可能 使用 springboot的 elasticsearch-rest-client 6.8.13 --
dependency
groupId org.elasticsearch.client /groupId
artifactId elasticsearch-rest-client /artifactId
version 7.4.2 /version
/dependency
!-- elasticsearch 依赖 2.x 的 log4j --
dependency
groupId org.apache.logging.log4j /groupId
artifactId log4j-core /artifactId
version 2.8.2 /version
!-- 排除掉 log4j-api 因为springbootstarter 中引入了loging模块 --
exclusions
exclusion
artifactId log4j-api /artifactId
groupId org.apache.logging.log4j /groupId
/exclusion
/exclusions
/dependency
!-- junit 单元测试 --
dependency
groupId junit /groupId
artifactId junit /artifactId
version 4.12 /version
/dependency
2.构建 RestHighLevelClient
highlevelclient 是 高级客户端 需要通过它去操作 Elasticsearch , 它底层也是要依赖 rest-client 低级客户端
@Slf4j
public class TestEsClient {
private RestHighLevelClient client = null;
private ObjectMapper objectMapper = new ObjectMapper();
//构建 RestHighLevelClient
@Before
public void prepare() {
// 创建Client连接对象
String[] ips = {"172.16.225.111:9200"};
HttpHost[] httpHosts = new HttpHost[ips.length];
for (int i = 0; i ips.length; i++) {
httpHosts[i] = HttpHost.create(ips[i]);
RestClientBuilder builder = RestClient.builder(httpHosts);
client = new RestHighLevelClient(builder);
3.创建索引 client.indices().create
创建索引 需要使用 CreateIndexRequest 对象 , 操作 索引基本上是 client.indices().xxx
构建 CreateIndexRequest 对象
@Test
public void test1() {
CreateIndexRequest request = new CreateIndexRequest("blog1");
try {
CreateIndexResponse createIndexResponse =
client.indices().create(request, RequestOptions.DEFAULT);
boolean acknowledged = createIndexResponse.isAcknowledged();
log.info("[create index blog :{}]", acknowledged);
} catch (IOException e) {
e.printStackTrace();
4.删除索引 client.indices().delete
构建 DeleteIndexRequest 对象
@Test
public void testDeleteIndex(){
DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("blog1");
try {
AcknowledgedResponse response = client.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
log.info("[delete index response: {}", response.isAcknowledged());
} catch (IOException e) {
e.printStackTrace();
4.查询索引 client.indices().get
构建 GetIndexRequest 对象
@Test
public void testSearchIndex() {
GetIndexRequest request = new GetIndexRequest("blog1");
try {
GetIndexResponse getIndexResponse =
client.indices().get(request, RequestOptions.DEFAULT);
Map String, List AliasMetaData aliases = getIndexResponse.getAliases();
Map String, MappingMetaData mappings = getIndexResponse.getMappings();
Map String, Settings settings = getIndexResponse.getSettings();
log.info("[aliases: {}]", aliases);
log.info("[mappings: {}]", mappings);
log.info("[settings: {}", settings);
} catch (IOException e) {
e.printStackTrace();
可以根据 response 获取 aliases , mappings , settings 等等 和 Kibana 中返回的一样
5.插入文档 client.index
插入文档 需要使用 IndexRequest 对象 , 注意 不是 InsertRequest , 不知道为什么不这样定义 感觉会更加好理解
request.source(blogInfoJsonStr, XContentType.JSON);
@Test
public void insertDoc() {
IndexRequest request = new IndexRequest();
request.index("blog1").id("1");
BlogInfo blogInfo =
new BlogInfo()
.setBlogName("Elasticsearch 入门第一章")
.setBlogType("Elasticsearch")
.setBlogDesc("本篇主要介绍了Elasticsearch 的基本client操作");
try {
//提供java 对象的 json str
String blogInfoJsonStr = objectMapper.writeValueAsString(blogInfo);
request.source(blogInfoJsonStr, XContentType.JSON);
// 这里会抛错 原因是 我的 Elasticsearch 版本8.x 而 使用的 restHighLevel 已经解析不了,因为新的es已经不推荐使用
// restHighLevel,而使用 Elasticsearch Java API Client
IndexResponse index = client.index(request, RequestOptions.DEFAULT);
log.info("[Result insert doc :{} ]", index);
} catch (IOException e) {
6.查询文档 client.get
注意 getResponse.getSourceAsString() 返回文档数据
@Test
public void testSelectDoc() {
GetRequest getRequest = new GetRequest();
getRequest.index("blog1").id("1");
try {
GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
BlogInfo blogInfo =
objectMapper.readValue(getResponse.getSourceAsString(), BlogInfo.class);
log.info("[get doc :{}] ", blogInfo);
} catch (IOException e) {
e.printStackTrace();
7.删除文档 client.delete
注意 删除文档 的 response 也解析不了 Elasticsearch 8.x 版本
@Test
public void testDeleteDoc() {
DeleteRequest deleteRequest = new DeleteRequest();
deleteRequest.index("blog1").id("1");
try {
// 这里也会抛错 和上面的一样
DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);
log.info("[delete response:{} ]", deleteResponse);
} catch (IOException e) {
本篇主要介绍了 java 操作Elasticsearch 的客户端 rest-high-level-client 的基本使用 , 如果你是使用springboot 需要注意jar 冲突问题, 后续操作 Elasticsearch 客户端 逐渐变成 Elasticsearch Java API Client , 不过目前大部分还是使用 rest-high-level-client
欢迎大家访问 个人博客 Johnny小屋
欢迎关注个人公众号
以上就是Elasticsearch rest(elasticsearch restful)的详细内容,想要了解更多 Elasticsearch rest的内容,请持续关注盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。