關於elasticsearch是什麼、elasticsearch的原理及elasticsearch能幹什麼,就很少說了,主要記錄下本身的一個使用過程。html
一、安裝java
elasticsearch是用java編寫的,因此它的運行離不開jdk,jdk的安裝這裏再也不囉嗦,我使用的是虛擬機是centos7,已經裝好了jdk1.8,下面說下本身安裝elasticsearch的過程。node
(1)到官網 https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html,查看各個操做系統的安裝方式,找到對應的,個人是centos7,以root身份登陸,執行 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.1.tar.gz。linux
(2)解壓 tar -zvxf elasticsearch-6.5.1.tar.gz -C /usr/localweb
(3)默認ES 6.X 是不容許root用戶運行的,不然ES運行的時候會報錯,因此咱們須要建立新的用戶,groupadd es ——>useradd es -g es——>passwd es 按照提示設置密碼便可。修改權限 chown -R es:es elasticsearch-6.5.1spring
(4)修改配置,支持外網訪問(記得關防火牆),在合適的位置建立兩個文件夾,分別用來存儲elasticsearch的數據和日誌,執行vim config/elasticsearch.yml,取消下列對應的項的註釋並修改 vim
cluster.name: li-application #集羣名稱,能夠自行修改
node.name: linux-2 #節點名稱,自行修改
network.host: 0.0.0.0 #主機地址,這裏寫本機IP
http.port: 9200 #端口
path.data: /var/lib/es 數據存儲位置
path.logs: /var/logs/es 日誌存儲位置centos
(5)執行vim /etc/security/limits.conf,在結尾加上以下配置,其中es是用戶名api
es soft nofile 65536
es hard nofile 131072
es soft nproc 4096
es hard nproc 4096springboot
(6)執行 vi /etc/sysctl.conf,在文件末尾添加 vm.max_map_count=655360,保存,並執行命令 sysctl -p
(7)切換到es用戶,進入/usr/local/elasticsearch-6.5.1,執行./bin/elasticsearch -d (後臺啓動)。
(8)執行 curl -i localhost:9200,會有一個測試信息的響應,表示安裝成功。
二、整合springboot2.0
(1)引入依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> <!--集合工具包--> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>19.0</version> </dependency>
(2)添加配置,注意端口號是9300
spring.data.elasticsearch.cluster-name=my-application spring.data.elasticsearch.cluster-nodes=192.168.1.126:9300 spring.data.elasticsearch.repositories.enabled=true server.port=11111
(3)編寫對應的代碼
package com.example.demo; import org.springframework.data.elasticsearch.annotations.Document; import com.fasterxml.jackson.annotation.JsonProperty; //indexName表明因此名稱,type表明表名稱 @Document(indexName = "wantu_notice_info", type = "doc") public class Notice { //id @JsonProperty("auto_id") private Long id; //標題 @JsonProperty("title") private String title; //公告標籤 @JsonProperty("exchange_mc") private String exchangeMc; //公告發布時間 @JsonProperty("create_time") private String originCreateTime; //公告閱讀數量 @JsonProperty("read_count") private Integer readCount; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getExchangeMc() { return exchangeMc; } public void setExchangeMc(String exchangeMc) { this.exchangeMc = exchangeMc; } public String getOriginCreateTime() { return originCreateTime; } public void setOriginCreateTime(String originCreateTime) { this.originCreateTime = originCreateTime; } public Integer getReadCount() { return readCount; } public void setReadCount(Integer readCount) { this.readCount = readCount; } public Notice(Long id, String title, String exchangeMc, String originCreateTime, Integer readCount) { super(); this.id = id; this.title = title; this.exchangeMc = exchangeMc; this.originCreateTime = originCreateTime; this.readCount = readCount; } public Notice() { super(); } }
package com.example.demo; import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; import org.springframework.stereotype.Component; @Component public interface NoticeRepository extends ElasticsearchRepository<Notice, Long> { }
package com.example.demo; import java.util.ArrayList; import java.util.List; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.google.common.collect.Lists; @RestController @RequestMapping("/api/v1/article") public class NoticeController { @Autowired private NoticeRepository nticeRepository; @GetMapping("/save") public Object save(long id, String title){ Notice article = new Notice(); article.setId(id); article.setReadCount(123); article.setTitle(title); return nticeRepository.save(article); } /** * @param title 搜索標題 * @param pageable page = 第幾頁參數, value = 每頁顯示條數 */ @GetMapping("/search") public Object search(String title ,@PageableDefault() Pageable pag){ //按標題進行搜索 QueryBuilder builder = QueryBuilders.matchQuery("title", title); //若是實體和數據的名稱對應就會自動封裝,pageable分頁參數 Iterable<Notice> listIt = nticeRepository.search(builder, pag); //Iterable轉list List<Notice> list= Lists.newArrayList(listIt); return list; } @RequestMapping("/all") public List<Notice> all() throws Exception { Iterable<Notice> data = nticeRepository.findAll(); List<Notice> ds = new ArrayList<>(); for (Notice d : data) { ds.add(d); } return ds; } @RequestMapping("/id") public Object findid(long id) throws Exception { return nticeRepository.findById(id).get(); } }
啓動項目,先添加幾條數據,而後依次訪問所有記錄、帶"三"的記錄、帶"吃飯"的記錄,效果以下: