安裝kibana視覺化外掛(SpringBoot整合Elasticsearch)
1. 什麼是kibana
Kibana是一個開源的分析和視覺化平臺,設計用於和Elasticsearch一起工作。 你用Kibana來搜尋,檢視,並和儲存在Elasticsearch索引中的資料進行互動。 你可以輕鬆地執行高階資料分析,並且以各種圖示、表格和地圖的形式視覺化資料。 Kibana使得理解大量資料變得很容易。它簡單的、基於瀏覽器的介面使你能夠快速建立和共享動態儀表板,實時顯示Elasticsearch查詢的變化。
2. 安裝kibana視覺化外掛
解壓上篇部落格上傳的kibana-6.4.3-linux-x86_64.tar.gz
修改kibana配置檔案
# 將預設配置改成如下:
server.port: 5601 //kibana預設埠號
server.host: "192.168.0.105" //伺服器IP地址
elasticsearch.url: "http://192.168.0.105:9200" //es的url
進入kibana的bin目錄下,執行./kibana啟動kibana
瀏覽器訪問:http://192.168.0.105:5601,出現以下頁面即表明kibanba安裝成功
3. kibana增刪改查文件
Elasticsearch儲存結構 :
Elasticsearch是檔案儲存,Elasticsearch是面向文件型資料庫,一條資料在這裡就是一個文件,用JSON作為文件序列化的格式,比如下面這條使用者資料:
{
"name" : "zhangsan",
"sex" : 0,
"age" : 20
}
關係資料庫 ⇒ 資料庫 ⇒ 表 (使用者表) ⇒ 行 ⇒ 列(Columns)
Elasticsearch ⇒ 索引(Index) ⇒ 型別(type) ⇒ 文件(Docments) ⇒ 欄位(Fields)
① 建立索引
② 查詢索引
③ 建立文件(注意id不可重複,相當於mysql的主鍵id)
④ 查詢文件
⑤ 更改文件(方式和新增一個樣,注意執行後version和result的變化)
⑥ 刪除文件
⑦ 刪除索引
4. 高階查詢(瞭解一下就行,一般我們springboot整合即可)
① 查詢所有資料
② 根據多個id查詢
③ 查詢年齡為22歲
④ 查詢年齡20-30之間
⑤ 查詢年齡20-30之間,且降序排列
⑥ 查詢年齡20-30之間,且降序排列,分頁
⑦ 查詢年齡20-30之間,且降序排列,分頁,只展示name和age欄位
5. Dsl語言查詢與過濾
① 根據姓名精確查詢
term是代表完全匹配,即不進行分詞器分析,文件中必須包含整個搜尋的詞彙
GET myes/user/_search
{
"query": {
"term": {
"name": "zhangsan"
}
}
}
② match根據名稱模糊查詢,相當於like
GET myes/user/_search
{
"query": {
"match": {
"name": "迪"
}
}
}
③ match根據名稱模糊查詢,相當於like,limit0,1
GET myes/user/_search
{
"from": 0,
"size": 2,
"query": {
"match": {
"name": "迪"
}
}
}
④ 使用filter過濾年齡,_source代表只展示的欄位
6. Elasticsearch版本控制
① 為什麼要進行版本控制CAS無鎖(樂觀鎖)?
為了保證資料再多執行緒操作下的準確性
② 悲觀鎖和樂觀鎖
悲觀鎖:假設會發生併發衝突,遮蔽一切可能違反資料準確性的操作(最壞的打算,就認為一定會發生併發衝突)
樂觀鎖:假設不會發生併發衝突,只在提交操作是檢查是否違反資料完整性
③ 內部版本控制和外部版本控制
內部版本控制:_version自增長,修改資料後,_version會自動的加1(一般用內部版本控制)
外部版本控制:為了保持_version與外部版本控制的數值一致,使用version_type=external檢查資料當前的version值是否小於請求中的version值
7. SpringBoot整合Elasticsearch
① 首先在pom.xml檔案引入以下依賴
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yuyi</groupId>
<artifactId>springboot-es</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>
② 配置application.yml
spring:
data:
elasticsearch:
####叢集名稱
cluster-name: myes
####地址
cluster-nodes: 192.168.0.105:9300
其中cluster-name為伺服器/usr/local/elasticsearch-6.4.3/config/elasticsearch.yml的配置,預設為elasticsearch,可更改,這裡我改成了myes,如下圖所示:
③ SpringBoot啟動類加上以下註解,其中basePackages為掃描的dao層
package com.yuyi;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
@SpringBootApplication
@EnableElasticsearchRepositories(basePackages = "com.yuyi.repository")
public class AppEs {
public static void main(String[] args) {
SpringApplication.run(AppEs.class, args);
}
}
④ 編寫一個實體類,UserEntity,屬性與上面建的myes/user一一對應
indexName:上面配的索引(即mysql中的資料庫)
type:型別(即mysql中的表)
package com.yuyi.entity;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import lombok.Data;
@Document(indexName = "myes", type = "user")
@Data
public class UserEntity {
@Id
private String id;
private String name;
private Integer sex;
private Integer age;
}
⑤ DAO層
package com.yuyi.repository;
import org.springframework.data.repository.CrudRepository;
import com.yuyi.entity.UserEntity;
public interface UserReposiory extends CrudRepository<UserEntity, String> {//String指主鍵id的型別
}
⑥ Controller層,簡單編寫兩個介面進行測試
package com.yuyi.controller;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.yuyi.entity.UserEntity;
import com.yuyi.repository.UserReposiory;
@RestController
public class EsController {
@Autowired
private UserReposiory userReposiory;
/**
* 新增文件
* @param user
* @return
*/
@RequestMapping("/addUser")
public UserEntity addUser(@RequestBody UserEntity user) {
return userReposiory.save(user);
}
/**
* 查詢文件
* @param id
* @return
*/
@RequestMapping("/findUser")
public Optional<UserEntity> findUser(String id) {
return userReposiory.findById(id);
}
}
⑦ 開啟postman進行測試:
可以發現在kibana視覺化介面,獲取到id為2的值:
測試查詢介面:
至此,kibana視覺化介面安裝,以及SpringBoot整合Elasticsearch正式完成!!