天天看點

ElasticSearch實戰之基礎入門(一)ElasticSearch

ElasticSearch

1. 什麼是RestFul

REST : 表現層狀态轉化(Representational State Transfer),如果一個架構符合REST原則,就稱它為 RESTful 架構風格。

資源: 所謂"資源",就是網絡上的一個實體,或者說是網絡上的一個具體資訊

表現層 :我們把"資源"具體呈現出來的形式,叫做它的"表現層"(Representation)。

狀态轉化(State Transfer):如果用戶端想要操作伺服器,必須通過某種手段,讓伺服器端發生"狀态轉 化"(State Transfer)。而這種轉化是建立在表現層之上的,是以就是"表現層狀态轉化"。REST原則就是指一個URL代表一個唯一資源,并且通過HTTP協定裡面四個動詞:GET、POST、PUT、DELETE對應四種伺服器端的基本操作: GET用來擷取資源,POST用來添加資源(也可以用于更新資源),PUT用來更新資源,DELETE用來删除資源。

2. 什麼是全文檢索

全文檢索是計算機程式通過掃描文章中的每一個詞,對每一個詞建立一個索引,指明該詞在文章中出現的次數和位置。當使用者查詢時根據建立的索引查找,類似于通過字典的檢索字表查字的過程。

全文檢索(Full-Text Retrieval(檢索))以文本作為檢索對象,找出含有指定詞彙的文本。全面、準确和快速是衡量全文檢索系統的關鍵名額。

關于全文檢索,我們要知道:

1. 隻處理文本。

2. 不處理語義。

3. 搜尋時英文不區分大小寫。

4. 結果清單有相關度排序。

3. 什麼是ElasticSearch

ElasticSearch 簡稱 ES ,是基于Apache Lucene建構的開源搜尋引擎,是目前流行的企業級搜尋引擎。Lucene本身就可以被認為迄今為止性能最好的一款開源搜尋引擎工具包,但是lucene的API相對複雜,需要深厚的搜尋理論。很難內建到實際的應用中去。同時ES是采用java語言編寫,提供了簡單易用的RestFul API,開發者可以使用其簡單的RestFul API,開發相關的搜尋功能,進而避免lucene的複雜性。

4. ES的誕生

多年前,一個叫做Shay Banon的剛結婚不久的失業開發者,由于妻子要去倫敦學習廚師,他便跟着也去了。在他找工作的過程中,為了給妻子建構一個食譜的搜尋引擎,他開始建構一個早期版本的Lucene。

直接基于Lucene工作會比較困難,是以Shay開始抽象Lucene代碼以便Java程式員可以在應用中添加搜尋功能。他釋出了他的第一個開源項目,叫做“Compass”。

後來Shay找到一份工作,這份工作處在高性能和記憶體資料網格的分布式環境中,是以高性能的、實時的、分布式的搜尋引擎也是理所當然需要的。然後他決定重寫Compass庫使其成為一個獨立的服務叫做Elasticsearch。

第一個公開版本出現在2010年2月,在那之後Elasticsearch已經成為Github上最受歡迎的項目之一,代碼貢獻者超過300人。一家主營Elasticsearch的公司就此成立,他們一邊提供商業支援一邊開發新功能,不過Elasticsearch将永遠開源且對所有人可用。

Shay的妻子依舊等待着她的食譜搜尋……

5. ES的應用場景

Es主要以輕量級JSON作為資料存儲格式,這點與MongoDB有點類似,但它在讀寫性能上優于 MongoDB 。同時也支援地理位置查詢 ,還友善地理位置和文本混合查詢 。 以及在統計、日志類資料存儲和分析、可視化這方面是引領者。

國外:

​ Wikipedia(維基百科)使用ES提供全文搜尋并高亮關鍵字、StackOverflow(IT問答網站)結合全文搜尋與地理位置查詢、Github使用Elasticsearch檢索1300億行的代碼。

國内:

​ 百度(在雲分析、網盟、預測、文庫、錢包、風控等業務上都應用了ES,單叢集每天導入30TB+資料, 總共每天60TB+)、新浪 、阿裡巴巴、騰訊等公司均有對ES的使用。

使用比較廣泛的平台ELK(ElasticSearch, Logstash, Kibana)。

6. ES的安裝

  1. 安裝前準備

    centos7 +

    java 8 +

    elastic 6.2.4+

  1. 在官方網站下載下傳ES

    wget http://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.1.tar.gz

  1. 安裝JDK(必須JDK1.8+)

    rpm -ivh jdk-8u181-linux-x64.rpm

    注意:預設安裝位置 /usr/java/jdk1.8.0_171-amd64

  1. 配置環境變量

    vim /etc/profile

    在檔案末尾加入:

    export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64

    export PATH= P A T H : PATH: PATH:JAVA_HOME/bin

  1. 重載系統配置

    source /etc/profile

  1. 安裝elasticsearche

    tar -zxvf elasticsearch-6.4.1.tar.gz

  1. elasticsearche的目錄結構

    bin 可執行的二進制檔案的目錄

    config 配置檔案的目錄

    lib 運作時依賴的庫

    logs modules 運作時日志檔案

    plugins es中提供的插件

  1. 運作es服務

    在bin目錄中執行 ./elasticsearch

    注意:root使用者啟動[2018-09-19T14:50:04,029][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root

  1. 不能以root使用者身份啟動

a.在linux系統中建立新的組

groupadd es

b.建立新的使用者es并将es使用者放入es組中

useradd es -g es

c.修改es使用者密碼

passwd es

d.将root使用者解壓的檔案移動到es使用者目錄中

mv /root/elasticsearch-6.2.4 /home/es/

f.改變檔案的所有者

chown -R es:es 目前es的安裝目錄(這裡是:/home/es/elasticsearch)

  1. 登入es使用者啟動ES

    ./elasticsearch 啟動ES

  1. 測試ES是否啟動成功

    在指令終端中執行: curl http://localhost:9200 出現以下資訊:

    {

    “name” : “xQK1cwT”,

    “cluster_name” : “elasticsearch”,

    “cluster_uuid” : “t7IYk7LKQ0mXcyyrdFWpLg”,

    “version” : {

    “number” : “6.2.4”,

    “build_hash” : “ccec39f”,

    “build_date” : “2018-04-12T20:37:28.497551Z”,

    “build_snapshot” : false,

    “lucene_version” : “7.2.1”,

    “minimum_wire_compatibility_version” : “5.6.0”,

    “minimum_index_compatibility_version” : “5.0.0”

    },

    “tagline” : “You Know, for Search”

    }

  1. 開啟ES遠端通路

    vim elasticsearch.yml 将原來network修改為以下配置:

    network.host: 0.0.0.0

  1. 啟動時錯誤解決方案
a.重新啟動es出現如下錯誤
	  **ERROR: bootstrap checks failed[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]**
      解決方案:
       # 切換到root使用者修改
        vim /etc/security/limits.conf
       # 在最後面追加下面内容
        *               soft    nofile          65536
        *               hard    nofile          65536
        *               soft    nproc           4096
        *               hard    nproc           4096
       # 退出重新登入檢測配置是否生效:
        ulimit -Hn
        ulimit -Sn
        ulimit -Hu
        ulimit -Su

	b.重新啟動出現如下錯誤
	  **ERROR: max number of threads [3802] for user [chenyn] is too low,increase to at least [4096]**
       解決方案:
       #進入limits.d目錄下修改配置檔案。
        vim /etc/security/limits.d/20-nproc.conf 
       # 修改為 啟動ES使用者名 soft nproc 4096
       
    c.重新啟動出現如下錯誤
	  **ERROR: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]**
       解決方案:
        vim /etc/sysctl.conf
        vm.max_map_count=655360
       #執行以下指令生效:
        sysctl -p
           
  1. 關閉網絡防火牆

    systemctl stop firewalld

    systemctl disable firewalld

  1. 外部浏覽器通路即可

    http://es的主機名:9200 出現如下資訊說明安裝成功:

    {

    “name” : “xQK1cwT”,

    “cluster_name” : “elasticsearch”,

    “cluster_uuid” : “t7IYk7LKQ0mXcyyrdFWpLg”,

    “version” : {

    “number” : “6.2.4”,

    “build_hash” : “ccec39f”,

    “build_date” : “2018-04-12T20:37:28.497551Z”,

    “build_snapshot” : false,

    “lucene_version” : “7.2.1”,

    “minimum_wire_compatibility_version” : “5.6.0”,

    “minimum_index_compatibility_version” : “5.0.0”

    },

    “tagline” : “You Know, for Search”

    }

繼續閱讀