(1)使用 docker-compose 安裝 elasticsearch 和 kibana
version: '3.0'
services:
elasticsearch:
image: daocloud.io/library/elasticsearch:6.5.4
restart: always
container_name: elasticsearch
volumes:
- elasticsearch_config:/usr/share/elasticsearch/config
- elasticsearch_data:/usr/share/elasticsearch/data
- elasticsearch_log:/usr/share/elasticsearch/logs
ports:
- 9200:9200
- 9300:9300
environment:
ES_JAVA_OPTS: -Xms256m -Xmx256m
networks:
- mongo_log
kibana:
image: daocloud.io/library/kibana:6.5.4
restart: always
container_name: kibana
volumes:
- kibana_config:/usr/share/kibana/config
ports:
- 5601:5601
environment:
- elasticsearch_url=http://192.168.17.150:9200 #修改成 elasticsearch 所在伺服器的 ip
depends_on:
- elasticsearch
networks:
- mongo_log
networks:
mongo_log:
volumes:
elasticsearch_config:
elasticsearch_data:
elasticsearch_log:
kibana_config:
安裝好後 docker-compose up 啟動,在浏覽器通路:【若使用背景啟動,啟動完後直接 docker ps 看到已啟動了,然後浏覽器馬上通路有時候還是提示連接配接不上,其實是還沒有徹底啟動成功,耐心等一會,或者使用前台啟動看日志,就知道還沒有啟動完成,如果很久了還是不行,那就可能是出問題了,看最下面有提示大概遇到什麼問題,以及怎麼處理】
http://192.168.17.150:9200/ # 能出來如下,則表示 elasticsearch 啟動成功

http://192.168.17.150:5601/ # 能看到如下圖像界面,表示 kibana 啟動成功
(2)springboot 項目,引入 elasticsearch 依賴:
<!-- elasticsearch -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
(3)application.yml 配置檔案配置 elasticsearch 配置
spring:
data:
elasticsearch:
#叢集名字(和 elasticsearch安裝所在伺服器的 elasticsearch.yml 配置檔案中的叢集名字一緻)
cluster-name: mongo-elasticsearch
#elasticsearch 所在伺服器位址,節點端口映射為 9300,不是 9200
cluster-nodes: 192.168.17.150:9300
(4)接下來使用和普通的資料庫 crud 模式一樣,建立實體類,dao 層
實體類:
package com.model.esEntity;
import lombok.Data;
import org.springframework.data.elasticsearch.annotations.Document;
import javax.persistence.Id;
/**
* @author Mongo
* @return
*/
@Document(indexName = "mongo",type = "user") //注意,這裡的 Document:indexName 對應 es 裡面的索引,user 對應 es 裡面的類型,下面會提到和 es 哪裡對應
@Data
public class UserEntity {
@Id
private String id;
private String name;
private Integer age;
private String sex;
}
dao 層:
package com.daoEs;
import com.model.esEntity.UserEntity;
import org.springframework.data.repository.CrudRepository;
/**
* @author Mongo
* @return
*/
public interface UserDao extends CrudRepository<UserEntity,String> {
}
controller 層測試:
package com.controller;
import com.common.result.ResultsBean;
import com.common.utils.*;
import com.daoEs.UserDao;
import com.model.bean.PostParamsBean;
import com.model.esEntity.UserEntity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
/**
* @author Mongo
* @return
*/
@RestController
@Slf4j
public class TestController {
@Autowired
UserDao userDao;
@PostMapping("/test/addEsUser")
public ResultsBean addEsUser(@RequestBody UserEntity userEntity) {
log.info("==== 開始 es 儲存資料 ====");
UserEntity save = userDao.save(userEntity);
log.info("==== 結束 es 儲存資料 ====");
return ResultsBean.ok(save);
}
@PostMapping("/test/findEsUser")
public ResultsBean findEsUser(@RequestBody UserEntity userEntity) {
log.info("==== 開始 es 查詢資料 ====");
String id = userEntity.getId();
Optional<UserEntity> byId = userDao.findById(id);
log.info("==== 結束 es 查詢資料 ====");
return ResultsBean.ok(byId);
}
}
postman 測試:
kibana 界面檢視:【注意,GET /mongo/user/2 這裡的 mongo 和 user 參數,就是上面 springboot 項目實體類注解上面的 @Document(indexName = "mongo",type = "user"),id 即為主鍵 id】
====================================
注意事項:
(1)elasticsearch 安裝好後,需要修改配置檔案,因為 docker 映射了路徑,直接在 /var/lib/docker/volumes 下面的 docker_elasticsearch_config/_data 内修改 elasticsearch.yml 檔案:
vi /var/lib/docker/volumes/docker_elasticsearch_config/_data/elasticsearch.yml
cluster.name: xxxx #這個參數要和 springboot 項目中的 application.yml 檔案中的 es 配置裡面的 cluster-name: mongo-elasticsearch 一緻!
其他兩個配置如圖所示,一般到這裡就可以正常使用了。(如果還不行,檢視日志提示:Native controller process has stopped - no new native processes can be started,則直接在 linux 中執行指令:sysctl -w vm.max_map_count=262144)
注意:如果啟動 es(elasticsearch 簡稱) 後,springboot 請求接口後報錯,提示:
None of the configured nodes are available: [{#transport#-1}{GMeURoP8SfSHo9z-SuSHFg}{192.168.17.150}{192.168.17.150:9200}]
解決方法:
1、類似這樣的錯誤,記得 docker-compose.yml 檔案中,9300 端口要寫上映射,不寫會報這個錯,
2、es 中的 elasticsearch.yml 檔案中的 cluster.name 要和 springboot application.yml 檔案中的 cluster-name 一緻