Elasticsearch 基礎入門

moonlightL發表於2019-03-04

原文地址:Elasticsearch 基礎入門
部落格地址:www.extlight.com

一、什麼是 ElasticSearch

ElasticSearch是一個基於 Lucene 的搜尋伺服器。它提供了一個分散式多使用者能力的全文搜尋引擎,基於 RESTful web 介面。Elasticsearch 是用 Java 開發的,並作為 Apache 許可條款下的開放原始碼釋出,是當前流行的企業級搜尋引擎。設計用於雲端計算中,能夠達到實時搜尋,穩定,可靠,快速,安裝使用方便。

1.1 基礎概念

索引:含有相同屬性的文件集合

型別:索引可以定義一個或多個型別,文件必須屬於一個型別

文件:可以被索引的基礎資料單位

分片:每個索引都有多個分片,每個分片都是 Lucene 索引

備份:拷貝一份分片就完成分片的備份

形象比喻:

百貨大樓裡有各式各樣的商品,例如書籍、筆、水果等。書籍可以根據內容劃分成不同種類,如科技類、教育類、懸疑推理等。懸疑推理類的小說中比較有名氣的有《福爾摩斯探案集》、《白夜行》等。

百貨大樓 –> ElasticSearch 資料庫

書籍 –> 索引

懸疑推理 –> 型別

白夜行 –> 文件

1.2 應用場景

  • 海量資料分析引擎
  • 站內搜尋引擎
  • 資料倉儲

二、安裝和配置

本次測試使用一臺 ip 為 192.168.2.41 的虛擬機器(Centos7),建議使用 7.x 版本,筆者之前使用 6.x 啟動服務時報出各種錯誤

2.1 依賴環境

JDK 和 NodeJS

2.2 下載

登陸 elasticSearch 官網下載檔案。

2.3 安裝

tar -zxvf elasticsearch-5.6.1.tar.gz -C /usr

cd elasticsearch-5.6.1複製程式碼

elasticsearch 檔案目錄如下圖:

2.4 啟動

踩坑提醒 1:

因為 Elasticsearch 可以執行指令碼檔案,為了安全性,預設不允許通過 root 使用者啟動服務。我們需要新建立使用者名稱和使用者組啟動服務

#增加 es 組
groupadd es    

#增加 es 使用者並附加到 es 組
useradd es -g es -p es       

#給目錄許可權
chown -R es:es elasticsearch-5.6.1    

#使用es使用者
su es複製程式碼

踩坑提醒 2:

預設情況下,Elasticsearch 只允許本機訪問,如果需要遠端訪問,需要修改其配置檔案

vim config/elasticsearch.yml 

# 去掉 network.host 前邊的註釋,將它的值改成0.0.0.0
network.host: 0.0.0.0複製程式碼

踩坑提醒 3:

在啟動過程中,Centos 環境下可能還會報錯,具體解決方案請參照文章末尾提供的資料

啟動服務

bin/elasticsearch複製程式碼

通過瀏覽器訪問 http://192.168.2.41:9200 ,當出現如下內容說明啟動成功:

{
  "name" : "OwUwJe-",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "vanzxnpaRumdRKiYic3f5A",
  "version" : {
    "number" : "5.6.1",
    "build_hash" : "667b497",
    "build_date" : "2017-09-14T19:22:05.189Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}複製程式碼

2.5 安裝外掛

訪問 http://192.168.2.41:9200 檢視內容顯示效果不友好,因此,我們需要安裝一個名為 elasticsearch-head 的外掛,讓內容顯示效果比較舒適。

登陸 GitHub 網站,搜尋 mobz/elasticsearch-head ,將其下載到本地。

wget https://github.com/mobz/elasticsearch-head/archive/master.zip

unzip master.zip

cd elasticsearch-head-master

npm install

npm run start複製程式碼

通過上述命令的操作,我們已經安裝好 elasticsearch-head 外掛。通過瀏覽器訪問 http://192.168.2.41:9100,如下圖:

圖中我們發現 elasticsearch-head 外掛和 Elasticsearch 服務並沒有建立連線,所以我們還需要修改 Elasticsearch 的配置檔案:

cd elasticsearch-5.6.1

vim config/elasticsearch.yml

# 在檔案末尾新增 2 段配置

http.cors.enabled: true
http.cors.allow-origin: "*"複製程式碼

儲存檔案後,分別起來 2 個程式:


cd elasticsearch-5.6.1

# 後臺啟動 elasticSearch 服務
bin/elasticsearch -d

cd elasticsearch-head-master

npm run start複製程式碼

通過瀏覽器訪問 http://192.168.2.41:9100,如下圖:

通過外掛建立索引

檢視索引基本情況

該外掛能直接對 Elasticsearch 的資料進行增刪改查,因此存在安全性的問題。建議生產環境下不要使用該外掛!

三、使用

Elasticsearch 支援 RESTFUL 風格 API,其 API 基本格式如下:

http://<ip>:<port>/<索引>/<型別>/<文件id>複製程式碼

3.1 建立/刪除索引

為了方便測試,我們使用 POSTMAN 工具進行介面的請求。

建立一個非結構化的索引,需要使用 PUT 請求。例如建立一個名為 book 的索引。

執行:

[PUT] http://192.168.2.41:9200/book複製程式碼

返回結果:

{
    "acknowledged": true,
    "shards_acknowledged": true,
    "index": "book"
}複製程式碼

建立一個結構化的索引,如下圖:

刪除一個索引,需要使用 DELETE 請求。

執行:

[DELETE] http://192.168.2.41:9200/book複製程式碼

返回結果:

{
    "acknowledged": true
}複製程式碼

3.2 插入資料

插入指定 ID 的資料,需要使用 PUT 請求。如下圖:

插入不指定 ID 的資料,需要使用 POST 請求。如下圖:

3.3 修改資料

修改資料,需要使用 POST 請求,且 URL 需要新增 _update

執行:

[POST] http://192.168.2.41:9200/fruit/apple/1/_update複製程式碼

請求引數(修改顏色):

{
    "doc": {
        "color": "black"
    }
}複製程式碼

返回結果:

{
    "_index": "fruit",
    "_type": "apple",
    "_id": "1",
    "_version": 7,
    "result": "updated",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    }
}複製程式碼

3.4 刪除資料

修改資料,需要使用 DELETE 請求。

執行:

[DELETE] http://192.168.2.41:9200/fruit/apple/1複製程式碼

返回結果:

{
    "found": true,
    "_index": "fruit",
    "_type": "apple",
    "_id": "1",
    "_version": 8,
    "result": "deleted",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    }
}複製程式碼

3.5 查詢資料

查詢指定ID的資料,需要使用 GET 請求。

執行:

[GET] http://192.168.2.41:9200/fruit/apple/AV69_4DDdZbC-YBdV-U3複製程式碼

返回結果:

{
    "_index": "fruit",
    "_type": "apple",
    "_id": "AV69_4DDdZbC-YBdV-U3",
    "_version": 1,
    "found": true,
    "_source": {
        "color": "green",
        "weight": 1,
        "createTime": "2017-09-26 19:05:26"
    }
}複製程式碼

條件查詢,需要使用 POST 請求。

執行:

[POST] http://192.168.2.41:9200/fruit/apple/_search複製程式碼

請求引數(查詢 color = “green”):

{
    "query": {
        "match":{
            "color": "green"
        }
    }
}複製程式碼

返回結果:

{
    "took": 8,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 1,
        "max_score": 0.2876821,
        "hits": [
            {
                "_index": "fruit",
                "_type": "apple",
                "_id": "AV69_4DDdZbC-YBdV-U3",
                "_score": 0.2876821,
                "_source": {
                    "color": "green",
                    "weight": 1,
                    "createTime": "2017-09-26 19:05:26"
                }
            }
        ]
    }
}複製程式碼

參考資料

相關文章