Elasticsearch 基礎(chǔ)入門(mén)

一、什么是 ElasticSearch

ElasticSearch是一個(gè)基于 Lucene 的搜索服務(wù)器。它提供了一個(gè)分布式多用戶能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 開(kāi)發(fā)的,并作為 Apache 許可條款下的開(kāi)放源碼發(fā)布,是當(dāng)前流行的企業(yè)級(jí)搜索引擎。設(shè)計(jì)用于云計(jì)算中,能夠達(dá)到實(shí)時(shí)搜索,穩(wěn)定,可靠,快速,安裝使用方便。

#?1.1 基礎(chǔ)概念

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

類(lèi)型:索引可以定義一個(gè)或多個(gè)類(lèi)型,文檔必須屬于一個(gè)類(lèi)型

文檔:可以被索引的基礎(chǔ)數(shù)據(jù)單位

分片:每個(gè)索引都有多個(gè)分片,每個(gè)分片都是 Lucene 索引

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

形象比喻:

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

百貨大樓 --> ElasticSearch 數(shù)據(jù)庫(kù)

書(shū)籍 --> 索引

懸疑推理 --> 類(lèi)型

白夜行 --> 文檔

#?1.2 應(yīng)用場(chǎng)景

海量數(shù)據(jù)分析引擎

站內(nèi)搜索引擎

數(shù)據(jù)倉(cāng)庫(kù)

二、安裝和配置

本次測(cè)試使用一臺(tái) ip 為 192.168.2.41 的虛擬機(jī)(Centos7),建議使用 7.x 版本,筆者之前使用 6.x 啟動(dòng)服務(wù)時(shí)報(bào)出各種錯(cuò)誤

#?2.1 依賴環(huán)境

JDK 和 NodeJS

#?2.2 下載

登陸?elasticSearch?官網(wǎng)下載文件。

#?2.3 安裝

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

cdelasticsearch-5.6.1

elasticsearch 文件目錄如下圖:

#?2.4 啟動(dòng)

啟動(dòng)之前,請(qǐng)先查看“踩坑提醒”。

1)啟動(dòng)服務(wù):

bin/elasticsearch 或 bin/elasticsearch -d# -d 表示后臺(tái)啟動(dòng)

踩坑提醒 1:

因?yàn)?Elasticsearch 可以執(zhí)行腳本文件,為了安全性,默認(rèn)不允許通過(guò) root 用戶啟動(dòng)服務(wù)。我們需要新創(chuàng)建用戶名和用戶組啟動(dòng)服務(wù)

#增加 es 組

groupadd es

#增加 es 用戶并附加到 es 組

useradd es -g es -p es

#給目錄權(quán)限

chown -R es:es elasticsearch-5.6.1

#使用es用戶

su es

踩坑提醒 2:

默認(rèn)情況下,Elasticsearch 只允許本機(jī)訪問(wèn),如果需要遠(yuǎn)程訪問(wèn),需要修改其配置文件

vimconfig/elasticsearch.yml

# 去掉 network.host 前邊的注釋,將它的值改成0.0.0.0

network.host:0.0.0.0

踩坑提醒 3:

啟動(dòng)報(bào)錯(cuò):max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

命令行鍵入:

ulimit-n 65536

踩坑提醒 4:

啟動(dòng)報(bào)錯(cuò):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=262144

保存,并執(zhí)行 sysctl -p。

在啟動(dòng)過(guò)程中,Centos 環(huán)境下可能還會(huì)報(bào)錯(cuò),具體解決方案請(qǐng)參照文章末尾提供的資料

2)通過(guò)瀏覽器訪問(wèn) http://192.168.2.41:9200 ,當(dāng)出現(xiàn)如下內(nèi)容說(shuō)明啟動(dòng)成功:

{

"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 安裝插件

訪問(wèn) http://192.168.2.41:9200 查看內(nèi)容顯示效果不友好,因此,我們需要安裝一個(gè)名為 elasticsearch-head 的插件,讓內(nèi)容顯示效果比較舒適。

登陸?GitHub?網(wǎng)站,搜索 mobz/elasticsearch-head ,將其下載到本地。

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

unzip master.zip

cd elasticsearch-head-master

npm install

npm run start

通過(guò)上述命令的操作,我們已經(jīng)安裝好 elasticsearch-head 插件。通過(guò)瀏覽器訪問(wèn) http://192.168.2.41:9100,如下圖:

圖中我們發(fā)現(xiàn) elasticsearch-head 插件和 Elasticsearch 服務(wù)并沒(méi)有建立連接,所以我們還需要修改 Elasticsearch 的配置文件:

cdelasticsearch-5.6.1

vim config/elasticsearch.yml

# 在文件末尾添加 2 段配置

http.cors.enabled:true

http.cors.allow-origin:"*"

保存文件后,分別起來(lái) 2 個(gè)程序:

cdelasticsearch-5.6.1

# 后臺(tái)啟動(dòng) elasticSearch 服務(wù)

bin/elasticsearch -d

cdelasticsearch-head-master

npm run start

通過(guò)瀏覽器訪問(wèn) http://192.168.2.41:9100,如下圖:

通過(guò)插件創(chuàng)建索引

查看索引基本情況

該插件能直接對(duì) Elasticsearch 的數(shù)據(jù)進(jìn)行增刪改查,因此存在安全性的問(wèn)題。建議生產(chǎn)環(huán)境下不要使用該插件!

三、使用

Elasticsearch 支持 RESTFUL 風(fēng)格 API,其 API 基本格式如下:

http://:/<索引>/<類(lèi)型>/<文檔id>

#?3.1 創(chuàng)建/刪除索引

為了方便測(cè)試,我們使用 POSTMAN 工具進(jìn)行接口的請(qǐng)求。

創(chuàng)建一個(gè)非結(jié)構(gòu)化的索引,需要使用?PUT?請(qǐng)求。例如創(chuàng)建一個(gè)名為 book 的索引。

執(zhí)行:

[PUT] http://192.168.2.41:9200/book

返回結(jié)果:

{

"acknowledged":true,

"shards_acknowledged":true,

"index":"book"

}

創(chuàng)建一個(gè)結(jié)構(gòu)化的索引,如下圖:

刪除一個(gè)索引,需要使用?DELETE?請(qǐng)求。

執(zhí)行:

[DELETE] http://192.168.2.41:9200/book

返回結(jié)果:

{

"acknowledged":true

}

#?3.2 插入數(shù)據(jù)

插入指定 ID 的數(shù)據(jù),需要使用?PUT?請(qǐng)求。如下圖:

插入不指定 ID 的數(shù)據(jù),需要使用?POST?請(qǐng)求。如下圖:

#?3.3 修改數(shù)據(jù)

修改數(shù)據(jù),需要使用?POST?請(qǐng)求,且 URL 需要添加 _update

執(zhí)行:

[POST] http://192.168.2.41:9200/fruit/apple/1/_update

請(qǐng)求參數(shù)(修改顏色):

{

"doc": {

"color":"black"

? ? }

}

返回結(jié)果:

{

"_index":"fruit",

"_type":"apple",

"_id":"1",

"_version":7,

"result":"updated",

"_shards": {

"total":2,

"successful":1,

"failed":0

? ? }

}

#?3.4 刪除數(shù)據(jù)

修改數(shù)據(jù),需要使用?DELETE?請(qǐng)求。

執(zhí)行:

[DELETE] http://192.168.2.41:9200/fruit/apple/1

返回結(jié)果:

{

"found":true,

"_index":"fruit",

"_type":"apple",

"_id":"1",

"_version":8,

"result":"deleted",

"_shards": {

"total":2,

"successful":1,

"failed":0

? ? }

}

#?3.5 查找數(shù)據(jù)

查詢指定ID的數(shù)據(jù),需要使用?GET?請(qǐng)求。

執(zhí)行:

[GET] http://192.168.2.41:9200/fruit/apple/AV69_4DDdZbC-YBdV-U3

返回結(jié)果:

{

"_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?請(qǐng)求。

執(zhí)行:

[POST] http://192.168.2.41:9200/fruit/apple/_search

請(qǐng)求參數(shù)(查找 color = "green"):

{

"query": {

"match":{

"color":"green"

? ? ? ? }

? ? }

}

返回結(jié)果:

{

"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"

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ]

? ? }

}

四、參考資料

解決問(wèn)題方案1

解決問(wèn)題方案2

解決問(wèn)題方案3

官方文檔

Elasticsearch 其他查詢

?3??分享

本文作者:?MoonlightL

本文鏈接:?https://www.extlight.com/2017/09/27/Elasticsearch-基礎(chǔ)入門(mén)/

版權(quán)聲明:?本博客所有文章除特別聲明外均為原創(chuàng),采用?CC BY-NC-SA 4.0?許可協(xié)議。轉(zhuǎn)載請(qǐng)?jiān)谖恼麻_(kāi)頭明顯位置注明原文鏈接和作者等相關(guān)信息,明確指出修改(如有),并通過(guò) E-mail 等方式告知,謝謝合作!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容