elasticsearch很火,可是springboot和es之間存在版本問題,若是版本不一致,就會出現以下異常:None of the configured nodes are available....這裏我選用的版本是 springboot 2.1.3 + elasticsearch6.7.1 具體版本之間的問題,能夠參考:https://github.com/spring-pro...php
//強烈建議:安裝進官網下載最新版本!! https://www.elastic.co/guide/en/elasticsearch/reference/current/zip-targz.html //選擇文件的方式,有.zip或.gz,這個本身選擇,進行解壓(在線下載,須要耐心等待) wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.7.1.zip wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.7.1.zip.sha512 shasum -a 512 -c elasticsearch-6.7.1.zip.sha512 unzip elasticsearch-6.7.1.zip cd elasticsearch-6.7.1/ //下載後,進入安裝目錄,個人安裝目錄是/crawler/es/elasticsearch-6.7.1/ cd /crawler/es/elasticsearch-6.7.1/ cd config vi elasticsearch.yml //在文件裏面添加以下配置:咱們須要將配置設置成全部機器均可以訪問。 network.host: 0.0.0.0 http.port: 9500 transport.tcp.port: 9300 transport.tcp.compress: true
此時基本配置已經作好,在這裏能夠準備啓動es,可是須要注意的是,啓動es(6+版本)須要非root帳號,而且jvm的設置可能會有限制問題,在此,咱們作以下兩步操做(沒有拋錯的請忽略)
(這裏能夠參照https://www.cnblogs.com/phppe...
a.將jvm配置改大:html
sudo sysctl -w vm.max_map_count=262144 (ps:感謝 「grossshen」 的評論,經確認,這裏應該是 :操做系統層面虛擬內存相關的一個參數,不是jvm參數)
b.建立額外的用戶(非root用戶),並受權java
第一步:liunx建立新用戶 adduser XXX 而後給建立的用戶加密碼 passwd XXX 輸入兩次密碼。node
第二步:切換剛纔建立的用戶 su XXX 而後執行elasticsearch 會顯示Permission denied 權限不足。git
第三步:給新建的XXX賦權限,chmod 777 * 這個不行,由於這個用戶自己就沒有權限,確定本身不能給本身付權限。因此要用root用戶登陸付權限。es6
第四步:root給XXX賦權限,chown -R XXX /你的elasticsearch安裝目錄。github
作了如上操做之後,咱們切換到建立用戶,進入安裝目錄並執行./bin/elasticsearch -d (守護線程執行)就行了web
上面的es服務器搭建好了之後,集成在springboot上面就會比較簡單了,下面作了一個demo:(參照https://www.cnblogs.com/qdhxh...spring
pom.xml依賴座標centos
<dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-elasticsearch</artifactId> </dependency>
配置文件
spring: data: elasticsearch: cluster-name: elasticsearch cluster-nodes: www.iamcrawler.cn:9300 //大哥,這裏寫你本身的.... repositories: enabled: true
實體類
import com.baomidou.mybatisplus.annotations.TableField; import com.baomidou.mybatisplus.annotations.TableName; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.data.elasticsearch.annotations.Document; /** * Created by liuliang on 2018/11/1. */ @TableName("goddess_user") @Data @NoArgsConstructor @AllArgsConstructor @Builder @Document(indexName = "wantu_notice_info", type = "doc") public class GoddessUser { @JsonProperty("id") private Long id; @JsonProperty("code") private String code; @TableField("user_name") @JsonProperty("userName") private String userName; @JsonProperty("password") private String password; @JsonProperty("mail") private String mail; @JsonProperty("phone") private String phone; }
Repository
@Component public interface EsUserRepository extends ElasticsearchRepository<GoddessUser, Long> { }
Controller
package cn.iamcrawler.crawlergoddess.elasticsearch.user; import cn.iamcrawler.crawler_common.domain.goddess.GoddessUser; import cn.iamcrawler.crawlergoddess.mapper.GoddessUserMapper; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.elasticsearch.index.query.MatchQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.List; /** * Created by liuliang on 2019/4/8. */ @RestController @RequestMapping("/api/es") @Slf4j public class EsUserController { @Autowired private GoddessUserMapper userMapper; @Autowired EsUserRepository esUserRepository; @PostMapping("/insert/all") public ResponseEntity loadAllUser(){ List<GoddessUser> users = userMapper.selectList(new EntityWrapper<GoddessUser>()); log.info("users:{}",users); users.stream().forEach(goddessUser -> { esUserRepository.save(goddessUser); }); return ResponseEntity.ok(true); } @GetMapping("/search") public ResponseEntity getByName(String name, Pageable pageable){ //按name進行搜索 MatchQueryBuilder builder = QueryBuilders.matchQuery("userName", name); //若是實體和數據的名稱對應就會自動封裝,pageable分頁參數 Page<GoddessUser> users = esUserRepository.search(builder, pageable); //迭代器轉list ArrayList<GoddessUser> list = Lists.newArrayList(users); return ResponseEntity.ok(list); }
}
能夠看到,上面一個insert進去之後,在此查詢的時候,就有數值了,postman示例:
[{ "id": 1, "code": "crawler", "userName": "liuliang", "password": "123456", "mail": "***@sina.com", "phone": "185***6019" } ]
至此,從搭建,到集成簡單的demo結束...本文作的時候參考的文檔有:
https://my.oschina.net/u/3187...
https://www.cnblogs.com/phppe...