分布式搜索引擎Elasticsearch安裝配置

yn6e 9年前發布 | 31K 次閱讀 ElasticSearch 搜索引擎

本文主要介紹了elasticsearch,還介紹了elasticsearch的安裝配置,包括插件的安裝使用。對于新入門的同學應該很有幫助,對于已經熟悉的同學也不失為一篇安裝教程,尤其是插件安裝。

分布式搜索引擎Elasticsearch

介紹

Elasticsearch是一個基于Lucene的開源分布式搜索引擎,具有分布式多用戶能力。Elasticsearch是用java開發,提供Restful接口,能夠達到實時搜索、高性能計算;同時Elasticsearch的橫向擴展能力非常強,不需要重啟服務,基本上達到了零配置。但是目前來說相關資料很少,同時版本更新很快,bug存在,API繁多并且變化。

概念和設計

索引

索引(index)是Elasticsearch存放數據的地方。如果你熟悉關系型數據庫,就可以將索引理解為關系型數據庫的一張表。但與關系型數據庫相比,Elasticsearch可以快速、搞笑地對索引中的數據進行全文檢索,并且不需要存儲原始數據。如果你熟悉MongoDB,就可以將Elasticsearch的索引理解為MongoDB中的集合。如果你熟悉CouchDB,就可以將索引理解為CouchDB中的數據庫。

文檔

文檔(document)是Elasticsearch中存儲的主要實體。文檔由字段(行數據的列)組成,Elasticsearch允許一個字段出現多次,該類字段被稱為多值字段(multivalued)。每個字段對應一種類型(字符串型、數值型、日期型等)。字段類型可以是復合的,字段可以包含其他子文檔或數組。字段類型在Elasticsearch中非常重要,它使得搜索引擎知道應如何執行不同的操作,如比較、排序等。幸運的是Elasticsearch可以自動確定字段類型。與關系型數據庫不同,Elasticsearch的文檔不需要有固定結構,不同文檔可以具有不同的字段集合,而且在程序開發時不需要知道文檔的字段。當然,用戶也可以通過模式映射(schema mapping)定義文檔結構。

文檔類型

在Elasticsearch中,一個索引可以存儲許多不同用途的對象。例如,基于Elasticsearch的博客可以存儲文章和評論。文檔類型可以幫助我們輕松地區分這些對象。值得注意的是,每個文檔可以有不同的結構。在實際操作中,將該文檔劃分為不同類型對數據操作有明顯的幫助。劃分時需要牢記一些限制條件,其中一個限制條件就是不同的文檔類型對同一字段不能設置為不同的字段類型。

節點與集群

Elasticsearch可以作為一個獨立的搜索服務工作。然而,為了能夠處理大型數據集并實現容錯功能,Elasticsearch支持在多臺協同工作的服務器運行。這些服務器被統稱為一個集群(cluster),集群的每個服務器則被稱為一個節點(node)。可以通過索引分片(分割成更小的個體)將海量數據進行分割并分布到不同節點。通過副本(索引部分的拷貝)可以實現更強的可用性和更高的性能。

分片

當需要存儲大規模文檔時,由于RAM空間、硬盤容量等的限制,僅使用一個節點是不夠的。另一個問題是一個節點的計算能力達不到所期望的復雜功能的要求。在這些情況下,可以將數據切分,每部分是一個單獨的ApacheLucene索引,稱為分片(shard)。每個分片可以被存儲在集群的不同節點上。當需要查詢一個由多個分片構成的索引時,Elasticsearch將該查詢發送到每個相關的分片,并將結果合并。這些過程對具體應用而言是透明的,無須知道分片的存在。

副本

為了提高查詢的吞吐量或實現高可用性,可以啟用分片副本功能。副本分片是對原始分片的一個精確拷貝,原始分片被稱為主分片。對索引的所有修改操作都直接作用在主分片上,每個主分片可以有零個或者多個副本分片。當主分片丟失時(如存儲數據的服務器不可用時),集群可以將一個副本分片提升為新的主分片。

安裝和配置Elasticsearch集群

Elasticsearch安裝方式有很多,支持多種平臺(包括windows),同時有相對應的安裝包(tar.gz, zip, rpm[centos], deb[ubuntu]),這里以elasticsearch-1.4.4版本為例,系統為centos6.5。

tar.gz安裝及配置

這種方式相對比較簡單,但是在命令行顯式運行,不方便進行管理,不是作為系統服務運行,但是這種方式可以使你在一臺主機上運行多個實例。

  1. 解壓elasticsearch-1.4.4.tar.gz得到elasticsearch-1.4.4目錄。

  2. 進入elasticsearch-1.4.4/config目錄,修改elasticsearch.yml,找到cluster.name,去掉前面的#,修改為cluster.name: supconit,這就是集群的名稱,所有節點都必須設置為一樣,elasticsearch就會自動識別和關聯節點(同一網段),組成集群。

  3. 修改elasticsearch.yml,找到node.name,去掉前面的#,修改為node.name:node1(自己隨便取),但是每個節點的名字必須不一樣。

  4. 復制elasticsearch-1.4.4到不同的主機,修改node.name。

  5. 其他配置,可以進入elasticsearch-1.4.4/bin目錄修改elasticsearch.in.sh(主要是jvm參數),elasticsearch.yml中也還有很多其他的參數(集群、分片、副本等配置),日志配置修改logging.yml。

rpm安裝及配置

這種方式安裝也很方便,系統服務運行,但是安裝完后目錄比較分散,不方便配置,一臺主機只能運行一個實例。

  1. 運行sudo rpm -ivh elasticsearch-1.4.4.noarch.rpm。

  2. 安裝成功后,elasticsearch程序目錄為/usr/share/elasticsearch,輸入sudo chkconfig --add elasticsearch添加服務。

  3. 進入/etc/elasticsearch目錄,修改elasticsearch.yml,找到cluster.name,去掉前面的#,修改為cluster.name: supconit,這就是集群的名稱,所有節點都必須設置為一樣,elasticsearch就會自動識別和關聯節點(同一網段),組成集群。

  4. 修改elasticsearch.yml,找到node.name,去掉前面的#,修改為node.name:node1(自己隨便取),但是每個節點的名字必須不一樣。

  5. 復制elasticsearch-1.4.4.noarch.rpm到不同節點,執行1~4步驟。

  6. 其他配置,可以進入elasticsearch-1.4.4/bin目錄修改elasticsearch.in.sh(主要是jvm參數),elasticsearch.yml中也還有很多其他的參數(集群、分片、副本等配置),日志配置修改logging.yml。

運行elasticsearch

  • $ ./elasticsearch (前臺運行)

  • $ ./elasticsearch -d (后臺進程運行)

  • $ sudo service elasticsearch start (rpm安裝,服務方式啟動)


關閉elasticsearch

  • 前臺運行,可以通過"CTRL+C"組合鍵來停止運行

  • 后臺運行,可以通過"kill -9 進程號"停止;也可以通過REST API接口"curl -XPOST http://主機IP:9200/_cluster/nodes/_shutdown"來關閉整個集群,"curl -XPOST http://主機IP:9200/_cluster/nodes/節點標示符(如Bjkhlujigopojhih)/_shutdown"來關閉單個節點

  • rpm安裝,"sudo service elasticsearch stop"關閉服務

插件


站點插件(以網頁形式展現)


  1. BigDesk Plugin ------ 監控ES狀態的插件

  2. Elasticsearch Head Plugin ------ 很方便對ES進行各種操作的客戶端,比如各種方式的查詢,索引量查看,節點狀態查看等


插件安裝

安裝方式有兩種,離線安裝和在線安裝,在線安裝相對來說比較方便,執行命令就行,但是很多公司環境是內網,不能訪問外網,所以就需要離線安裝,離線安裝網上的資料非常少,所以這也是一個福利送給大家(本人試了好久才試出來的)。兩種安裝都需要進入主目錄下的bin目錄,執行plugin腳本。

  • $ ./plugin -install mobz/elasticsearch-head (這是安裝head插件,在線安裝)

  • $ ./plugin install head -url file:/downloads/elasticsearch-head-master.zip (這是離線安裝方式,file后面就是插件路徑,去github上直接下載,地址就不提供了,時間久了會變,直接上git上搜就行)

安裝完成后,在瀏覽器輸入http://localhost:9200/_plugin/head就可以打開插件看詳情了,"head"換成"bigdesk",進入的就是bigdesk頁面了。

分詞插件IK

插件安裝

analysis-ik安裝沒那么方便,不能用命令安裝,相對比較麻煩。

   1. 下載https://github.com/medcl/elasticsearch-analysis-ik

  2. 解壓進入目錄執行"mvn clean package",生成target目錄。

   3. 解壓后將config/ik目錄復制到你的elasticsearch主目錄的config目錄下(如果是rpm安裝方式,則復制到/etc/esticsearch目錄).

   4. 編輯config/elasticsearch.yml(rpm安裝,編輯/etc/elasticsearch/elasticsearch.yml),在文件末尾添加下面內容(不能有tab鍵,只許空格)

index:
  analysis:                   
    analyzer:      
      ik:
          alias: [ik_analyzer]
          type: org.elasticsearch.index.analysis.IkAnalyzerProvider
      ik_max_word:
          type: ik
          use_smart: false
      ik_smart:
          type: ik
          use_smart: true
index.analysis.analyzer.default.type: ik


   5. 在elasticsearch主目錄plugins目錄(沒有就自己新建這個目錄)下新建analysis-ik目錄,復制解壓打包生成的文件elasticsearch-analysis-ik-1.2.9.jar(位于target目錄下)到新建的analysis-ik目錄下。

   6. 將target/releases下的所有jar包復制到elasticsearch主目錄下的lib目錄下。

測試
  • 新建索引名為test的索引 "curl -XPUT http://localhost:9200/test"

  • 給索引創建mapping

curl -XPOST http://localhost:9200/test/test/_mapping -d'
{
    "test": {
        "properties": {
            "content": {
                "type" : "string",
                "boost" : 8.0,
                "term_vector" : "with_positions_offsets",
                "analyzer" : "ik",
                "include_in_all" : true
            }
        }
    }
}'


  • 測試命令

curl 'http://localhost:9200/test/_analyze?analyzer=ik&pretty=true' -d '
{
"text":"這是我的第一個elasticsearch集群"
}'


  • 測試結果

{
  "tokens" : [ {
    "token" : "text",
    "start_offset" : 4,
    "end_offset" : 8,
    "type" : "ENGLISH",
    "position" : 1
  }, {
    "token" : "這是",
    "start_offset" : 11,
    "end_offset" : 13,
    "type" : "CN_WORD",
    "position" : 2
  }, {
    "token" : "我",
    "start_offset" : 13,
    "end_offset" : 14,
    "type" : "CN_CHAR",
    "position" : 3
  }, {
    "token" : "第一個",
    "start_offset" : 15,
    "end_offset" : 18,
    "type" : "CN_WORD",
    "position" : 4
  }, {
    "token" : "第一",
    "start_offset" : 15,
    "end_offset" : 17,
    "type" : "CN_WORD",
    "position" : 5
  }, {
    "token" : "一個",
    "start_offset" : 16,
    "end_offset" : 18,
    "type" : "CN_WORD",
    "position" : 6
  }, {
    "token" : "一",
    "start_offset" : 16,
    "end_offset" : 17,
    "type" : "TYPE_CNUM",
    "position" : 7
  }, {
    "token" : "個",
    "start_offset" : 17,
    "end_offset" : 18,
    "type" : "COUNT",
    "position" : 8
  }, {
    "token" : "elasticsearch",
    "start_offset" : 18,
    "end_offset" : 31,
    "type" : "ENGLISH",
    "position" : 9
  }, {
    "token" : "集群",
    "start_offset" : 31,
    "end_offset" : 33,
    "type" : "CN_WORD",
    "position" : 10
  } ]
}



 本文由用戶 yn6e 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!