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文章
2970瀏覽量
104798 -
鏡像
+關注
關注
0文章
165瀏覽量
10751 -
Elasticsearch
+關注
關注
0文章
29瀏覽量
2842
原文標題:肝了兩小時的 Elasticsearch 保姆級入門
文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論