springBoot2.1.3集成elasticSearch6.7.1

elasticsearch很火,可是springboot和es之間存在版本問題,若是版本不一致,就會出現以下異常:None of the configured nodes are available....這裏我選用的版本是 springboot 2.1.3 + elasticsearch6.7.1 具體版本之間的問題,能夠參考:https://github.com/spring-pro...php

一.centos7安裝elasticSearch6.7.1

//強烈建議:安裝進官網下載最新版本!!
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

二.springBoot2.1.3集成es6.7

上面的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...

相關文章
相關標籤/搜索