一、介紹
- 簡介
ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。
Elasticsearch是用Java語言開發的,並作爲Apache許可條款下的開放源碼發佈,是一種流行的企業級搜索引擎。
ElasticSearch用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。官方客戶端在Java、.NET (C#)、PHP、Python、Apache Groovy、Ruby 和許多其他語言中都是可用的。
根據DB-Engines的排名顯示,Elasticsearch是 最受歡迎的企業搜索引擎,其次是Apache Solr,也是基於Lucene。 - elasticSearch特點和使用場景
1、 全文檢索,結構化檢索,數據統計、分析,接近實時處理,分佈式搜索(可部署數百臺服務器),處理TB、PB級別的數據搜索糾錯等;
2、 使用場景:日誌搜索,數據聚合,數據監控,報表統計分析;
3、 國內使用:維基百科,Stack Overflow, GitHub。
二、安裝
- 官方文檔
- 在window下的安裝
下載7.6版本 ,直接加壓到非中文硬盤。D:\Program Files\elasticsearch-7.6.0\bin雙擊elasticsearch.bat 啓動es7.6。 會提示需安裝JDK11, 下載安裝JDK11即可。 - 啓動後,瀏覽器輸入:localhost:9200 看到如下信息代表成功。信息見備註
- 一般情況下,我們都會通過一個可視化的工具來查看ES的運行狀態和數據。這個工具我們一般選擇head 。
該插件依賴notejs ,下載地址:notejs下載地址 安裝很簡單,一路下一步。
nodejs安裝完畢後,cmd輸入:node --version 能看到版本信息,代表安裝成功。 - 進入nodejs安裝目錄
- 以上所有head的依賴都安裝完畢,下面安裝head
head下載地址 - 解壓到非中文路徑,然後cmd進入該路徑,通過命令行安裝:npm install 執行安裝,此安裝過程非常緩慢。
啓動命令:npm run start
- 啓動後,在瀏覽器輸入:http://localhost:9100/
- 發現連接狀態未連接,因爲es默認不允許跨域訪問,需手動開啓,比如路徑:
D:\Program Files\elasticsearch-7.6.0\config
用文本編輯器打開elasticsearch.yml
注意: 添加一下內容時,要注意 冒號後面的 值 的前後要有空格
- 重啓es 刷新elasticsearch-head
- 如果重啓es 發現閃退,需修改es安裝包下:/config/jvm.options可以將JVM參數改小
-Xms512M -Xmx512M
三、ElasticSearch簡單測試
- 參考文檔
- 集羣運行狀況
- 測試接口
查看集羣狀態:localhost:9200/_cat/health?v
查看索引列表:localhost:9200/_cat/indices?v - 創建索引參考文檔
創建索引接口:localhost:9200/customer?pretty 提交方式是put - 再次查看索引,可以看到內容:localhost:9200/_cat/indices?v
6. 索引中存放數據參考文檔
向索引中添加數據:put提交,提交參數爲json數據,需選擇Body–raw–json,否則提交報錯406
- 通過get提交查看剛纔添加到索引的數據。
localhost:9200/customer/external/1?pretty
四、整合elasticsearch
- spring-data-elasticsearch介紹
- idea搭建springboot工程
- application.properties 配置
參考文檔 - 實體類配置
/** * 用戶實體類 */ @Document(indexName = "user",type = "info") public class User { private Integer id; private String name; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
- dao層
繼承ElasticsearchRepository
/** * user的持久層,繼承了ElasticsearchRepository */ @Repository public interface UserRepository extends ElasticsearchRepository<User,Integer> { }
- controller層
使用了一個工具類JsonData,轉成json字符串@RestController @RequestMapping("/user/info") public class UserController { @Autowired private UserRepository repository; //1.保存數據到索引 @GetMapping("/save") public Object save(){ User user = new User(); user.setId(2); user.setName("張三"); user.setAge(21); repository.save(user); return JsonData.buildSuccess(); } //2.從索引檢索數據 @GetMapping("/search") public Object search(String name){ QueryBuilder builder = QueryBuilders.matchQuery("name",name); Iterable<User> list = repository.search(builder); return JsonData.buildSuccess(list); } }
- 測試