1. 程式人生 > >5 在springboot中使用ElasticsearchTemplate 操作ElasticSearch(本機和遠端伺服器)

5 在springboot中使用ElasticsearchTemplate 操作ElasticSearch(本機和遠端伺服器)

第三篇和第四篇分別介紹了ElasticSearch的http請求命令和對java api的封裝。像封裝好的ES java api可以使用於普通的java專案裡,來簡化一些原生的命令。
springboot作為一個集成了N多功能的框架,自然不需要我們自己來封裝工具類,它直接提供了ElasticsearchTemplate,和RedisTemplate一樣是一個封裝好的模板,當然你覺得ElasticsearchTemplate不好用的話,也可以去用自己的工具類。
現在用簡單的例子來看看在本機和在遠端伺服器分別使用ElasticsearchTemplate進行資料操作。

一:使用本機的ElasticSearch

application.yml還是使用第一節時的yml檔案

spring:
   data:
        elasticsearch:
            #cluster-name: #預設為elasticsearch
            #cluster-nodes: 112.74.72.18:9300 #配置es節點資訊,逗號分隔,如果沒有指定,則啟動ClientNode
            properties:
                path:
                  logs: ./elasticsearch/log #elasticsearch日誌儲存目錄
data: ./elasticsearch/data #elasticsearch資料儲存目錄

來看一下cluster-nodes,這裡如果直接註釋掉,不配置nodes,那麼預設就是本機!如果要使用遠端伺服器,或者區域網伺服器,那就需要在這裡配置IP:PORT。
可以配置多個,以逗號分隔,相當於叢集。cluster-name如果想改為其他,那就需要在安裝ElasticSearch時編輯配置檔案,設定name。
配置好yml後,就可以直接使用template了,嗯,就是這麼簡單!
我們在Test類裡,可以直接這麼寫:

@Autowired
    ElasticsearchTemplate elasticsearchTemplate
;

就可以使用elasticsearchTemplate了。
在第一篇時我們已經插入了兩條資料了,下面就直接查詢:

@Test
    public void test() {
        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(queryStringQuery("spring boot OR 書籍")).build();
        List<Article> articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
        for (Article article : articles) {
            System.out.println(article.toString());
        }
    }

執行就看到查詢結果了,template裡方法很多,各種各樣的操作,就需要自己慢慢研究了。
為什麼Template直接就能用了呢,其實類似於這樣:

import org.elasticsearch.client.Client;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;

/**
 * Created by wuwf on 17/6/2.
 */
@Configuration
public class ElasticSearchConfig {

    @Bean
    public ElasticsearchTemplate elasticsearchTemplate(Client client) {
        return new ElasticsearchTemplate(client);
    }

}

client引數就是yml裡配置的資訊,springboot會自動賦給Client,然後傳給template。不過上面這段程式碼如果不寫,系統也會自動做好賦值。
像前面說的,如果不想用template,而想使用自己的Util工具類,譬如ElasticSearchUtil,就可以在上面的程式碼中用該類替換ElasticTemplate,這樣就可以到處autowired你自己的util工具類了。

二:使用遠端伺服器

以阿里雲CentOS7為例,安裝ElasticSearch。
先安裝好jdk8,並配置環境變數,這個就不提了。
安裝ElasticSearch,使用如下命令:
下載rpm包:
wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.3.4/elasticsearch-2.3.4.rpm
安裝
rpm -ivh elasticsearch-2.3.4.rpm
安裝後先不要啟動,我們做個配置
進入etc/elasticsearch,用vi編輯elasticsearch.yml。可以看到裡面有cluster.name的地方,如果要做叢集,那麼叢集內所有的cluster.name應該一致。我們找到network.host行,把註釋放開,把後面的ip改為0.0.0.0,然後再把http.port那行的註釋也放開即可。目的是為了在外網能訪問到這臺伺服器公網IP的ElasticSearch服務。
啟動服務service elasticsearch start
然後就可以在自己電腦用瀏覽器訪問伺服器ip:9200,就會看到一串歡迎語json的輸出了。

三:安裝head外掛,管理Elasticsearch

這裡寫圖片描述
這個就是Head外掛,在裡面可以檢視各個節點,index資料等,相當於一個數據庫管理頁面。
安裝方法是:
/usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head
注意路徑和配置yml的路徑是不一樣的,yml是在etc/elasticsearch裡。
安裝好後,訪問ip:9200/_plugin/head/ 就能看到上面的介面了。

關於ElasticsearchTemplate的更多使用方法、複雜查詢、條件查詢,我還需要慢慢摸索一下,回頭總結一下。