springboot-elasticsearch搜索引擎安裝及使用

一、介紹

  1. 簡介
      ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。
      Elasticsearch是用Java語言開發的,並作爲Apache許可條款下的開放源碼發佈,是一種流行的企業級搜索引擎。
      ElasticSearch用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。官方客戶端在Java、.NET (C#)、PHP、Python、Apache Groovy、Ruby 和許多其他語言中都是可用的。
      根據DB-Engines的排名顯示,Elasticsearch是 最受歡迎的企業搜索引擎,其次是Apache Solr,也是基於Lucene。
  2. elasticSearch特點和使用場景
    1、 全文檢索,結構化檢索,數據統計、分析,接近實時處理,分佈式搜索(可部署數百臺服務器),處理TB、PB級別的數據搜索糾錯等;
    2、 使用場景:日誌搜索,數據聚合,數據監控,報表統計分析;
    3、 國內使用:維基百科,Stack Overflow, GitHub。

二、安裝

  1. 官方文檔
  2. 在window下的安裝
    下載7.6版本 ,直接加壓到非中文硬盤。D:\Program Files\elasticsearch-7.6.0\bin雙擊elasticsearch.bat 啓動es7.6。 會提示需安裝JDK11, 下載安裝JDK11即可。
  3. 啓動後,瀏覽器輸入:localhost:9200 看到如下信息代表成功。信息見備註
  4. 一般情況下,我們都會通過一個可視化的工具來查看ES的運行狀態和數據。這個工具我們一般選擇head 。
    該插件依賴notejs ,下載地址:notejs下載地址 安裝很簡單,一路下一步。
    nodejs安裝完畢後,cmd輸入:node --version 能看到版本信息,代表安裝成功。
  5. 進入nodejs安裝目錄在這裏插入圖片描述
  6. 以上所有head的依賴都安裝完畢,下面安裝head
    head下載地址
  7. 解壓到非中文路徑,然後cmd進入該路徑,通過命令行安裝:npm install 執行安裝,此安裝過程非常緩慢。
    啓動命令:
    npm run start 
    
  8. 啓動後,在瀏覽器輸入:http://localhost:9100/
  9. 發現連接狀態未連接,因爲es默認不允許跨域訪問,需手動開啓,比如路徑:
    D:\Program Files\elasticsearch-7.6.0\config
    用文本編輯器打開elasticsearch.yml
    注意: 添加一下內容時,要注意 冒號後面的 的前後要有空格
    在這裏插入圖片描述
  10. 重啓es 刷新elasticsearch-head
  11. 如果重啓es 發現閃退,需修改es安裝包下:/config/jvm.options可以將JVM參數改小
    -Xms512M
    -Xmx512M
    

三、ElasticSearch簡單測試

  1. 參考文檔
  2. 集羣運行狀況
  3. 測試接口
    查看集羣狀態:localhost:9200/_cat/health?v
    查看索引列表:localhost:9200/_cat/indices?v
  4. 創建索引參考文檔
    創建索引接口:localhost:9200/customer?pretty 提交方式是put
  5. 再次查看索引,可以看到內容:localhost:9200/_cat/indices?v
    在這裏插入圖片描述
    6. 索引中存放數據參考文檔
    向索引中添加數據:put提交,提交參數爲json數據,需選擇Body–raw–json,否則提交報錯406
    在這裏插入圖片描述
  6. 通過get提交查看剛纔添加到索引的數據。
    localhost:9200/customer/external/1?pretty

四、整合elasticsearch

  1. spring-data-elasticsearch介紹
  2. idea搭建springboot工程
  3. application.properties 配置
    參考文檔
  4. 實體類配置
    在這裏插入圖片描述
    /**
     * 用戶實體類
     */
    @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;
        }
    }
    
    
  5. dao層
    繼承ElasticsearchRepository
    /**
     * user的持久層,繼承了ElasticsearchRepository
     */
    @Repository
    public interface UserRepository extends ElasticsearchRepository<User,Integer> {
    }
    
  6. 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);
        }
    }
    
  7. 測試
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章