ElasticSearch與spring boot的集成使用

1、ElasticSearch瞭解java

        ElasticSearch是一個基於lucene的分佈式檢索服務器。相對於solr搜索,在大數據量和數據併發量上更有優點,同時,也有數據庫的數據存儲功能,但提供了比數據庫更多的存儲功能,如分詞搜索、關聯度搜索等,同事搜索速度也不是一個級別,達到百萬數據/秒的查詢數據。總結優勢爲:實時搜索、穩定、可靠、快速、安裝方便等。node

        ElasticSearch中的概念(或叫作結構)和數據庫中進行對比:mysql

        (1)、index:索引,至關於數據庫中的一個庫,裏面能夠創建不少表,存儲不一樣類型的數據spring

        (2)、type:類型,至關於數據庫中的一張表,存儲json類型的數據sql

        (3)、document:文檔,一個文檔至關於數據庫中的一條數據數據庫

        (4)、field:列,至關於數據庫中的列,也就是一個屬性npm

        (5)、shards:分片,通俗理解,就是數據分紅幾塊區域來存儲,能夠理解爲mysql中的分庫分表(不太恰當)json

        (6)、replicas:備份,就是分片的備份數,至關於數據庫中的備份庫springboot

2、ElasticSearch+nodejs+head集成安裝(安裝環境:jdk8,window10)服務器

        一、先安裝ElasticSearch

            (注意:ElasticSearch目前最新版本達到了7.0.1,但不一樣的版本在不一樣的安裝環境下回出現不一樣的兼容性問題,詳見百度,目前遇到的問題有:用7.0.1版本時沒法設置network.host爲0.0.0.0,這樣見沒法讓外部服務去範圍當前服務器,故改爲如今的6.7.2是能夠的,而且,ElasticSearch是Java項目,須要依賴jdk,而且對jdk版本有要求,目前安裝的是jdk8。另外,安裝es服務時安裝路徑最好不要包含空格,不然在作經過logstash數據同步的時候會報莫名的錯誤)

            (1)、安裝:具體安裝爲在官網https://www.elastic.co/cn/downloads/elasticsearch#ga-release下載相應的版本後如:elasticsearch-6.7.2.zip,進行解壓便可。

            (2)、啓動:到elasticsearch-6.7.2\bin目錄下,啓動elasticsearch.bat便可

            (3)、判斷是否安裝啓動成功:訪問http://localhost:9200,出現以下圖即爲成功

                     

        二、安裝nodejs

            (1)、在https://nodejs.org/en/download/ 下載對應的版本,進行傻瓜式安裝(默認安裝成功後自動配置環境變量)

            (2)、安裝成功後使用 node -v查看nodejs的版本,使用npm -v查看npm的版本,如圖:

                        

            (3)、在nodejs的根目錄下,執行npm install -g grunt-cli命令,安裝grunt,安裝完成後執行grunt -version查看是否安裝成功,如圖:

                        

            三、安裝head

                (1)、網上下載elasticsearch-head.zip文件解壓便可

                (2)、修改elasticsearch-head文件目錄下的Gruntfile.js文件,添加以下內容:

                          

                (3)、修改elasticsearch-head\_site文件目錄下的app.js文件內容,將紅框中的內容修改成服務器地址,或是本機部署則不用修改。

                       

                  (4)、進入elasticsearch-head的跟目錄下執行npm install 命令,如圖:

                       

            (5)、在elasticsearch-head的根目錄下啓動nodejs,執行grunt server 或者 npm run start,如圖:

                            

            (6)、訪問http://localhost:9100,出現如圖所示,則head+nodejs安裝成功

                        

               (7)、若想讓head啓動並連接elasticsearch成功,需先啓動elasticsearch,若head和elasticsearch不在同一服務器上時,須要在elasticsearch中作以下配置:

                            修改elasticsearch.yml文件,在文件末尾加入:

                            http.cors.enabled: true 
                            http.cors.allow-origin: "*"
                            node.master: true
                            node.data: true

                            放開network.host: 192.168.0.1的註釋並改成network.host: 0.0.0.0(這樣外部服務器也能訪問es服務)

                            放開cluster.name(集羣名稱,服務啓動前修改後,之後不要再隨意修改);node.name(集羣使用時回用到);http.port(默認端口號便可)的註釋

                            雙擊elasticsearch.bat重啓es

                           修改完elasticsearch.yml文件完啓動es後再訪問http://localhost:9100,若head連接es成功後以下圖:

                            

        四、在head中對es數據進行操做,如,添加刪除索引,對索引中的數據進行增刪改差等操做。(詳見百度)

3、springboot+elasticsearch集成及簡單使用

       一、先搭建好單獨的springboot項目,以及部署好elasticsearch服務

       二、具體集成步驟及經過對象的方式操做elasticsearch的具體步驟語法詳見博客:

            http://www.javashuo.com/article/p-hbqxmonq-eu.html

4、利用logstash實現MySQL中的數據全量/增量同步到elasticsearch服務器中(window10環境)

        一、logstash的下載安裝(logstash的安裝時路徑不要包含空格,某種在數據同步的時候會數據同步不成功)

             logstash的官網下載地址:https://www.elastic.co/downloads/logstash,注意下載的版本要與elasticsearch版本必須一直,如當前elasticsearch的版本是6.7.2,則logstash的版本也必須是6.7.2

            注意,在網上各類查找資料發現好多資料都需集成logstash-jdbc-input插件才能實現數據同步,後臺才發現這個和版本有關係,在elasticsearch5.X及以後的版本是不須要集成該插件便可

            下載好相應的版本後解壓便可(注意解壓的路徑,最好不要有中文和空格)。

        二、logstash配置

           (1)、在logstash-6.7.2路徑下建立空文件夾,如mysql,用來存放相關配置文件等

           (2)、在建立的新文件夾中(mysql文件夾)中放入驅動包:mysql-connector-java.jar

           (3)、在建立的新文件夾中(mysql文件夾)中建立一個sql文件,如find.sql,從這裏開始,就是logstash同步數據庫的核心操做了,在這裏建立的sql文件主要內容是:mysql須要同步Elasticsearch的具體數據的查詢方式,若是是全量同步,只須要select * from [table]便可

            (4)、在建立的新文件夾中(mysql文件夾)中建立一個conf文件,如jdbc.conf文件,該文件用於連接數據庫和elasticsearch,其內容爲:(注意,有的可能不識別註解,運行時須要將註解去掉)

input {
    stdin {
    }
    jdbc {
      # mysql 數據庫連接,my_es爲數據庫名
      jdbc_connection_string => "jdbc:mysql://localhost:3306/my_es"
      # 用戶名和密碼
      jdbc_user => "root"
      jdbc_password => "root"
      # 驅動
      jdbc_driver_library => "D:\logstash-6.7.2\mysql\mysql-connector-java-5.1.46.jar"
      # 驅動類名
      jdbc_driver_class => "com.mysql.jdbc.Driver"
      jdbc_paging_enabled => "true"
      jdbc_page_size => "50000"
      # 執行的sql 就是上一步建立的sql文件的絕對路徑+文件名字
      statement_filepath => "D:\logstash-6.7.2\mysql\find.sql"
      # 設置監聽間隔  各字段含義(由左至右)分、時、天、月、年,所有爲*默認含義爲每分鐘都更新
      schedule => "* * * * *"
      # 索引類型
      type => "center"
    }
}


filter {
    json {
        source => "message"
        remove_field => ["message"]
    }
}


output {
    elasticsearch {
        # ES的IP地址及端口
        hosts => ["localhost:9200"]
        # 索引名稱
        index => "article"
        # 自增ID id必須是待查詢的數據表的序列字段
        document_id => "%{id}"
    }
    stdout {
       # JSON格式輸出
        codec => json_lines
    }
}

網上的第二中配置,部分不一樣而已:

input {
    stdin {
    }
    jdbc {
      jdbc_connection_string => "jdbc:mysql://localhost:3306/你的數據庫名字"

        jdbc_user => "你的數據庫用戶名"

        jdbc_password => "你的數據庫密碼"

        jdbc_driver_library => "C:/logstash/bin/mysql-connector-java-5.1.44-bin.jar"

        jdbc_driver_class => "com.mysql.jdbc.Driver"

        jdbc_paging_enabled => "true"

        jdbc_page_size => "50000"
        statement => "SELECT id(主鍵),其餘內容 FROM 你的表"
        schedule => "* * * * *"
    }
}

output {
     stdout {
        codec => json_lines
    }
    elasticsearch {
        hosts => "localhost:9200"
        index => "你要建立的索引名"
        document_type => "你要建立的索引類型"
        document_id => "%{id}"
    }
}

另外一個說明比較詳細的版本:

input {
    stdin {
    }
    jdbc {
      # 鏈接的數據庫地址和哪個數據庫,指定編碼格式,禁用SSL協議,設定自動重連
      jdbc_connection_string => "jdbc:mysql://數據庫地址:端口號/數據庫名?characterEncoding=UTF-8&useSSL=false&autoReconnect=true"
      # 你的帳戶密碼
      jdbc_user => "帳號"
      jdbc_password => "密碼"
      # 鏈接數據庫的驅動包,建議使用絕對地址
      jdbc_driver_library => "mysql/mysql-connector-java-5.1.45-bin.jar"
      # 這是不用動就好
      jdbc_driver_class => "com.mysql.jdbc.Driver"
      jdbc_paging_enabled => "true"
      jdbc_page_size => "50000"
 
    #處理中文亂碼問題
      codec => plain { charset => "UTF-8"}
 
       #使用其它字段追蹤,而不是用時間
      use_column_value => true
       #追蹤的字段      
    tracking_column => testid      
    record_last_run => true     
    #上一個sql_last_value值的存放文件路徑, 必需要在文件中指定字段的初始值     
    last_run_metadata_path => "mysql/station_parameter.txt"
 
      jdbc_default_timezone => "Asia/Shanghai"
 
      statement_filepath => "mysql/jdbc.sql"
      
    #是否清除 last_run_metadata_path 的記錄,若是爲真那麼每次都至關於從頭開始查詢全部的數據庫記錄
    clean_run => false
 
      # 這是控制定時的,重複執行導入任務的時間間隔,第一位是分鐘
      schedule => "*/5 * * * *"
      type => "jdbc"
    }
}
 
filter {
    json {
        source => "message"
        remove_field => ["message"]
    }
}
 
output {
    elasticsearch {
        # 要導入到的Elasticsearch所在的主機
        hosts => "192.168.105.180:9200"
        # 要導入到的Elasticsearch的索引的名稱
        index => "db_anytest"
        # 類型名稱(相似數據庫表名)
        document_type => "table_anytest"
        # 主鍵名稱(相似數據庫主鍵)
        document_id => "%{testid}"
        # es 帳號
        user => elastic
        password => changeme
        
    }
 
    stdout {
        # JSON格式輸出
        codec => json_lines
    }
}

    (5)、多表數據同步https://www.jianshu.com/p/e359880541b8

 

        三、啓動logstash開始同步數據庫

              (1)、確保elasticsearch服務已啓動,而且要同步的表裏有相應的數據

              (2)、cmd一個新窗口,進入到D:\logstash-6.7.2\bin

              (3)、運行命令logstash -f ../mysql/jdbc.conf  ,其中logstash -f表示運行指令, ../mysql/jdbc.conf表示咱們配置的jdbc.conf文件路徑,成功啓動後,能夠在終端中看見運行的sql和同步的數據,如圖:

               (4)、同步成功後便可在head中查看同步到elasticsearch中的數據,其中timestamp和version是elastisearch本身添加的字段。

                (5)注意點:

                        a、在同步的時候,若是是首次全量同步的話,能夠不須要在elasticsearch中去新建索引和類型,同步的時候會根據配置自動建立

                        b、如果增量更新的話,在sql中添加查詢條件便可,如

                    where  testid >= :sql_last_start

                        c、對與多表數據同步的狀況,參考文獻:https://www.jianshu.com/p/e359880541b8,進行操做

相關文章
相關標籤/搜索