原文地址:Elasticsearch 基礎入門
博客地址:www.extlight.comhtml
ElasticSearch是一個基於 Lucene 的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於 RESTful web 接口。Elasticsearch 是用 Java 開發的,並做爲 Apache 許可條款下的開放源碼發佈,是當前流行的企業級搜索引擎。設計用於雲計算中,可以達到實時搜索,穩定,可靠,快速,安裝使用方便。git
索引:含有相同屬性的文檔集合github
類型:索引能夠定義一個或多個類型,文檔必須屬於一個類型web
文檔:能夠被索引的基礎數據單位數據庫
分片:每一個索引都有多個分片,每一個分片都是 Lucene 索引npm
備份:拷貝一份分片就完成分片的備份vim
形象比喻:瀏覽器
百貨大樓裏有各式各樣的商品,例如書籍、筆、水果等。書籍能夠根據內容劃分紅不一樣種類,如科技類、教育類、懸疑推理等。懸疑推理類的小說中比較有名氣的有《福爾摩斯探案集》、《白夜行》等。安全
百貨大樓 --> ElasticSearch 數據庫bash
書籍 --> 索引
懸疑推理 --> 類型
白夜行 --> 文檔
本次測試使用一臺 ip 爲 192.168.2.41 的虛擬機(Centos7),建議使用 7.x 版本,筆者以前使用 6.x 啓動服務時報出各類錯誤
JDK 和 NodeJS
登錄 elasticSearch 官網下載文件。
tar -zxvf elasticsearch-5.6.1.tar.gz -C /usr
cd elasticsearch-5.6.1複製代碼
elasticsearch 文件目錄以下圖:
踩坑提醒 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"
}複製代碼
訪問 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>複製代碼
爲了方便測試,咱們使用 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
}複製代碼
插入指定 ID 的數據,須要使用 PUT 請求。以下圖:
插入不指定 ID 的數據,須要使用 POST 請求。以下圖:
修改數據,須要使用 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
}
}複製代碼
修改數據,須要使用 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
}
}複製代碼
查詢指定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"
}
}
]
}
}複製代碼