1. 程式人生 > >安裝kibana視覺化外掛(SpringBoot整合Elasticsearch)

安裝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正式完成!!