天天看點

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

1.Elasticsearch介紹和安裝

使用者通路我們的首頁,一般都會直接搜尋來尋找自己想要購買的商品。

而商品的數量非常多,而且分類繁雜。如果能正确的顯示出使用者想要的商品,并進行合理的過濾,盡快促成交易,是搜尋系統要研究的核心。

面對這樣複雜的搜尋業務和資料量,使用傳統資料庫搜尋就顯得力不從心,一般我們都會使用全文檢索技術,比如之前大家學習過的Solr。

不過今天,我們要講的是另一個全文檢索技術:Elasticsearch。

1.1.簡介

1.1.1.Elastic

Elastic官網:https://www.elastic.co/cn/

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

Elastic有一條完整的産品線及解決方案:Elasticsearch、Kibana、Logstash等,前面說的三個就是大家常說的ELK技術棧。

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

1.1.2.Elasticsearch

Elasticsearch官網:https://www.elastic.co/cn/products/elasticsearch

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

如上所述,Elasticsearch具備以下特點:

  • 分布式,無需人工搭建叢集(solr就需要人為配置,使用Zookeeper作為注冊中心)
  • Restful風格,一切API都遵循Rest原則,容易上手
  • 近實時搜尋,資料更新在Elasticsearch中幾乎是完全同步的。

1.1.3.版本

目前Elasticsearch最新的版本是6.3.1,我們就使用6.3.0

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

需要虛拟機JDK1.8及以上

1.2.安裝和配置

為了模拟真實場景,我們将在linux下安裝Elasticsearch。

1.2.1.建立一個使用者leyou

出于安全考慮,elasticsearch預設不允許以root賬号運作。

建立使用者:

useradd leyou           

複制

設定密碼:

passwd leyou           

複制

切換使用者:

su - leyou           

複制

1.2.2.上傳安裝包,并解壓

我們将安裝包上傳到:/home/leyou目錄

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝
快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

解壓縮:

tar -zxvf elasticsearch-6.2.4.tar.gz           

複制

我們把目錄重命名:

mv elasticsearch-6.2.4/ elasticsearch           

複制

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

進入,檢視目錄結構:

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

1.2.3.修改配置

我們進入config目錄:

cd config

需要修改的配置檔案有兩個:

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝
  1. jvm.options

Elasticsearch基于Lucene的,而Lucene底層是java實作,是以我們需要配置jvm參數。

編輯jvm.options:

vim jvm.options           

複制

預設配置如下:

-Xms1g
-Xmx1g           

複制

記憶體占用太多了,我們調小一些:

-Xms512m
-Xmx512m           

複制

  1. elasticsearch.yml
vim elasticsearch.yml           

複制

  • 修改資料和日志目錄:
path.data: /home/leyou/elasticsearch/data # 資料目錄位置
path.logs: /home/leyou/elasticsearch/logs # 日志目錄位置           

複制

我們把data和logs目錄修改指向了elasticsearch的安裝目錄。但是這兩個目錄并不存在,是以我們需要建立出來。

進入elasticsearch的根目錄,然後建立:

mkdir data
mkdir logs           

複制

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝
  • 修改綁定的ip:
network.host: 0.0.0.0 # 綁定到0.0.0.0,允許任何ip來通路           

複制

預設隻允許本機通路,修改為0.0.0.0後則可以遠端通路

目前我們是做的單機安裝,如果要做叢集,隻需要在這個配置檔案中添加其它節點資訊即可。

elasticsearch.yml的其它可配置資訊:
屬性名 說明
cluster.name 配置elasticsearch的叢集名稱,預設是elasticsearch。建議修改成一個有意義的名稱。
node.name 節點名,es會預設随機指定一個名字,建議指定一個有意義的名稱,友善管理
path.conf 設定配置檔案的存儲路徑,tar或zip包安裝預設在es根目錄下的config檔案夾,rpm安裝預設在/etc/ elasticsearch
path.data 設定索引資料的存儲路徑,預設是es根目錄下的data檔案夾,可以設定多個存儲路徑,用逗号隔開
path.logs 設定日志檔案的存儲路徑,預設是es根目錄下的logs檔案夾
path.plugins 設定插件的存放路徑,預設是es根目錄下的plugins檔案夾
bootstrap.memory_lock 設定為true可以鎖住ES使用的記憶體,避免記憶體進行swap
network.host 設定bind_host和publish_host,設定為0.0.0.0允許外網通路
http.port 設定對外服務的http端口,預設為9200。
transport.tcp.port 叢集結點之間通信端口
discovery.zen.ping.timeout 設定ES自動發現節點連接配接逾時的時間,預設為3秒,如果網絡延遲高可設定大些
discovery.zen.minimum_master_nodes 主結點數量的最少值 ,此值的公式為:(master_eligible_nodes / 2) + 1 ,比如:有3個符合要求的主結點,那麼這裡要設定為2

1.3.運作

進入elasticsearch/bin目錄,可以看到下面的執行檔案:

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

然後輸入指令:

./elasticsearch           

複制

發現報錯了,啟動失敗:

1.3.1.錯誤1:核心過低

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

我們使用的是centos6,其linux核心版本為2.6。而Elasticsearch的插件要求至少3.5以上版本。不過沒關系,我們禁用這個插件即可。

修改elasticsearch.yml檔案,在最下面添加如下配置:

bootstrap.system_call_filter: false           

複制

然後重新開機

1.3.2.錯誤2:檔案權限不足

再次啟動,又出錯了:

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝
[1]: max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]           

複制

我們用的是leyou使用者,而不是root,是以檔案權限不足。

首先用root使用者登入。

然後修改配置檔案:

vim /etc/security/limits.conf           

複制

添加下面的内容:

* soft nofile 65536

* hard nofile 131072

* soft nproc 4096

* hard nproc 4096           

複制

1.3.3.錯誤3:線程數不夠

剛才報錯中,還有一行:

[1]: max number of threads [1024] for user [leyou] is too low, increase to at least [4096]           

複制

這是線程數不夠。

繼續修改配置:

vim /etc/security/limits.d/90-nproc.conf            

複制

修改下面的内容:

* soft nproc 1024           

複制

改為:

* soft nproc 4096           

複制

1.3.4.錯誤4:程序虛拟記憶體

[3]: max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]           

複制

vm.max_map_count:限制一個程序可以擁有的VMA(虛拟記憶體區域)的數量,繼續修改配置檔案, :

vim /etc/sysctl.conf            

複制

添加下面内容:

vm.max_map_count=655360           

複制

然後執行指令:

sysctl -p           

複制

1.3.5.重新開機終端視窗

所有錯誤修改完畢,一定要重新開機你的 Xshell終端,否則配置無效。

1.3.6.啟動

再次啟動,終于成功了!

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

可以看到綁定了兩個端口:

  • 9300:叢集節點間通訊接口
  • 9200:用戶端通路接口

我們在浏覽器中通路:http://192.168.56.101:9200

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

1.4.安裝kibana

1.4.1.什麼是Kibana?

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

Kibana是一個基于Node.js的Elasticsearch索引庫資料統計工具,可以利用Elasticsearch的聚合功能,生成各種圖表,如柱形圖,線狀圖,餅圖等。

而且還提供了操作Elasticsearch索引資料的控制台,并且提供了一定的API提示,非常有利于我們學習Elasticsearch的文法。

1.4.2.安裝

因為Kibana依賴于node,我們的虛拟機沒有安裝node,而window中安裝過。是以我們選擇在window下使用kibana。

最新版本與elasticsearch保持一緻,也是6.3.0

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

解壓到特定目錄即可

1.4.3.配置運作

配置

進入安裝目錄下的config目錄,修改kibana.yml檔案:

修改elasticsearch伺服器的位址:

elasticsearch.url: "http://192.168.56.101:9200"           

複制

運作

進入安裝目錄下的bin目錄:

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

輕按兩下運作:

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

發現kibana的監聽端口是5601

我們通路:http://127.0.0.1:5601

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

1.4.4.控制台

選擇左側的DevTools菜單,即可進入控制台頁面:

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

在頁面右側,我們就可以輸入請求,通路Elasticsearch了。

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

1.5.安裝ik分詞器

Lucene的IK分詞器早在2012年已經沒有維護了,現在我們要使用的是在其基礎上維護更新的版本,并且開發為ElasticSearch的內建插件了,與Elasticsearch一起維護更新,版本也保持一緻,最新版本:6.3.0

1.5.1.安裝

上傳課前資料中的zip包,解壓到Elasticsearch目錄的plugins目錄中:

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

使用unzip指令解壓:

unzip elasticsearch-analysis-ik-6.3.0.zip -d ik-analyzer           

複制

然後重新開機elasticsearch:

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

1.5.2.測試

大家先不管文法,我們先測試一波。

在kibana控制台輸入下面的請求:

POST _analyze
{
  "analyzer": "ik_max_word",
  "text":     "我是中國人"
}           

複制

運作得到結果:

{
  "tokens": [
    {
      "token": "我",
      "start_offset": 0,
      "end_offset": 1,
      "type": "CN_CHAR",
      "position": 0
    },
    {
      "token": "是",
      "start_offset": 1,
      "end_offset": 2,
      "type": "CN_CHAR",
      "position": 1
    },
    {
      "token": "中國人",
      "start_offset": 2,
      "end_offset": 5,
      "type": "CN_WORD",
      "position": 2
    },
    {
      "token": "中國",
      "start_offset": 2,
      "end_offset": 4,
      "type": "CN_WORD",
      "position": 3
    },
    {
      "token": "國人",
      "start_offset": 3,
      "end_offset": 5,
      "type": "CN_WORD",
      "position": 4
    }
  ]
}           

複制

1.7.API

Elasticsearch提供了Rest風格的API,即http請求接口,而且也提供了各種語言的用戶端API

1.7.1.Rest風格API

文檔位址:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

1.7.2.用戶端API

Elasticsearch支援的用戶端非常多:https://www.elastic.co/guide/en/elasticsearch/client/index.html

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

點選Java Rest Client後,你會發現又有兩個:

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

Low Level Rest Client是低級别封裝,提供一些基礎功能,但更靈活

High Level Rest Client,是在Low Level Rest Client基礎上進行的進階别封裝,功能更豐富和完善,而且API會變的簡單

快速學習ES6-Elasticsearch介紹和安裝1.Elasticsearch介紹和安裝

1.7.3.如何學習

建議先學習Rest風格API,了解發起請求的底層實作,請求體格式等。