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=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”
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章