
一、什么是 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"
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ]
? ? }
}
四、參考資料
?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 等方式告知,謝謝合作!