Kibana 可以将 Elasticsearch 中的数据转化为直观的图表、图形和仪表盘。
这篇文章,您将学习本地安装 Elasticsearch 和 Kibana,以及使用开发工具/ Java SDK 创建索引和搜索数据。
1 本地安装
1.1 创建网络
我们需要创建一个供 Elasticsearch 和 Kibana 使用的 network。这个 network 将被用于 Elasticsearch 和 Kibana 之间的通信。
dockernetworkcreateelastic
1.2 安装 ES
拉取 Elasticsearch 镜像
dockerpulldocker.elastic.co/elasticsearch/elasticsearch:{version}
这里的版本 version
,我们选取:8.9.0
。
dockerpulldocker.elastic.co/elasticsearch/elasticsearch:8.9.0
启动 docker elasticsearch 镜像
dockerrun--nameelasticsearch--netelastic-p9200:9200-p9300:9300-e"discovery.type=single-node"-tdocker.elastic.co/elasticsearch/elasticsearch:8.9.0
进入ES容器,修改 elasticsearch 用户密码
bin/elasticsearch-reset-password--usernameelastic-i
1.3 安装 Kibana
拉取 Kibana 镜像
dockerpulldocker.elastic.co/kibana/kibana:8.9.0
启动 Kibana 镜像
dockerrun--namekibana--netelastic-p5601:5601docker.elastic.co/kibana/kibana:8.9.0
因为启动安装 Kibana ,需要 token , 所以进入 elasticsearch 容器 ,执行:
bin/elasticsearch-create-enrollment-token-skibana
输入 token 之后,刷新页面,进入登录页面:
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
- 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
- 视频教程:https://doc.iocoder.cn/video/
2 接口测试
我们可以使用 Kibana Dev tools 来进行接口测试。
2.1 添加
向索引添加单个文档,提交一个 HTTP POST 请求,目标是该索引。
POST/customer/_doc/1
{
"firstname":"Jennifer",
"lastname":"Walters"
}
该请求会自动创建名为customer
的索引(如果不存在),然后添加一个 ID 为 1的新文档,同时存储并建立firstname
和lastname
字段的索引。
新文档可以立即从集群中的任何节点获取。您可以使用 GET 请求来检索它,请求中需指定其文档 ID :
GET/customer/_doc/1
要一次性添加多个文档,请使用 _bulk
API。批量数据必须是以换行分隔的 JSON(NDJSON)格式。每一行必须以换行字符( )结尾,包括最后一行。
PUTcustomer/_bulk
{"create":{}}
{"firstname":"Monica","lastname":"Rambeau"}
{"create":{}}
{"firstname":"Carol","lastname":"Danvers"}
{"create":{}}
{"firstname":"Wanda","lastname":"Maximoff"}
{"create":{}}
{"firstname":"Jennifer","lastname":"Takeda"}
2.2 搜索
已索引的文档可以在准实时的情况下进行搜索。下面的搜索将在customer
索引中匹配所有名为 Jennifer 的顾客。
GETcustomer/_search
{
"query":{
"match":{"firstname":"Jennifer"}
}
}
2.3 视图
进入 Kibana Data Views :
然后创建数据视图 :
创建数据视图之后,可以在 Analytics > Discover 查看索引数据。
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
3 Java SDK 实战
3.1 依赖
<dependency>
<groupId>co.elastic.clientsgroupId>
<artifactId>elasticsearch-javaartifactId>
<version>8.9.0version>
dependency>
<dependency>
<groupId>io.github.hakky54groupId>
<artifactId>sslcontext-kickstartartifactId>
<version>7.1.0version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.12.3version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-coreartifactId>
<version>2.12.3version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-annotationsartifactId>
<version>2.12.3version>
dependency>
<dependency>
<groupId>jakarta.jsongroupId>
<artifactId>jakarta.json-apiartifactId>
<version>2.0.1version>
dependency>
<dependency>
<groupId>org.elasticsearch.clientgroupId>
<artifactId>elasticsearch-rest-clientartifactId>
<version>8.9.0version>
dependency>
3.2 创建客户端
1、通过用户名和密码创建客户端
RestClientBuilderbuilder=RestClient.builder(newHttpHost("localhost",9200,"https"));
finalCredentialsProvidercredentialsProvider=newBasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,newUsernamePasswordCredentials("elastic","ilxw@19841201"));
// Elasticsearch 提供了 Https 服务,创建 client 建立 SSL 链接时没有做证书验证;
SSLFactorysslFactory=SSLFactory.builder().withUnsafeTrustMaterial().withUnsafeHostnameVerifier().build();
builder=builder.setHttpClientConfigCallback(
httpClientBuilder->httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)
setSSLContext(sslFactory.getSslContext())
.setSSLHostnameVerifier(sslFactory.getHostnameVerifier())
);
RestClientrestClient=builder.build();
//CreatethetransportwithaJacksonmapper
ElasticsearchTransporttransport=newRestClientTransport(restClient,newJacksonJsonpMapper());
//AndcreatetheAPIclient
ElasticsearchClientesClient=newElasticsearchClient(transport);
2、通过 apikey 创建客户端
我们在安全目录的管理页面,创建 API key ,如下图:
示例代码如下:
//自己创建的apikey
StringapiKey="cnRVUy1Ja0JZYUtuSTRuMG1oRkk6RVFSdTk2T2NRb1cyYVdLRTB4TjktQQ==";
RestClientBuilderbuilder=RestClient.builder(newHttpHost("localhost",9200,"https"));
SSLFactorysslFactory=SSLFactory.builder().withUnsafeTrustMaterial().withUnsafeHostnameVerifier().build();
RestClientrestClient=builder.setDefaultHeaders(newHeader[]{newBasicHeader("Authorization","ApiKey"+apiKey)}).setHttpClientConfigCallback(httpClientBuilder->httpClientBuilder.setSSLContext(sslFactory.getSslContext()).setSSLHostnameVerifier(sslFactory.getHostnameVerifier())).build();
//CreatethetransportwithaJacksonmapper
ElasticsearchTransporttransport=newRestClientTransport(restClient,newJacksonJsonpMapper());
//AndcreatetheAPIclient
ElasticsearchClientesClient=newElasticsearchClient(transport);
3.3 创建文档
创建索引名为 products
,新建一个文档 id 为 1 。
ProductPoproduct=newProductPo(1,"Bag",42);
IndexRequest
3.4 查询文档
GetResponseresponse=esClient.get(g->g
.index("products")
.id(String.valueOf(1)),
ProductPo.class
);
if(response.found()){
ProductPoproduct=response.source();
System.out.println("Productname"+product.getName());
}else{
System.out.println("Productnotfound");
}
3.5 修改文档
Mapdoc=newHashMap();
//文档产品名称调整为mybike
doc.put("name","mybike");
doc.put("price",100);
BulkOperationop=newBulkOperation.Builder().update(
i->i.action(newUpdateAction.Builder<>().doc(doc).docAsUpsert(true).build()).id("1"))
.build();
Listlist=Collections.singletonList(op);
BulkResponseresponse=esClient.bulk(bulkBuilder->bulkBuilder.index("products").operations(list));
3.6 删除文档
esClient.delete(d->d.index("products").id("1"));
参考文档:
1、Elasticsearch 官方文档:
https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/getting-started-java.html
2、Github文档
https://github.com/elastic/elasticsearch
-
JAVA
+关注
关注
19文章
2957浏览量
104540 -
镜像
+关注
关注
0文章
162浏览量
10697 -
Elasticsearch
+关注
关注
0文章
27浏览量
2820
原文标题:肝了两小时的 Elasticsearch 保姆级入门
文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论