elasticsearch概念介紹01
阿新 • • 發佈:2020-08-10
Elasticsearch 學習
elasticsearch
是一個'實時分散式搜尋和分析引擎',它用於全文搜尋,結構化搜尋,分析
搜尋引擎原理就是建立反向索引
elasticsearch也是master-slave架構,也實現了資料的分片和備份
es所在主機記憶體做好是2G,1G用來給elasticsearch用。另外的1G用來給了lucene程序使用
一、生活中的資料
1.生活中的資料分類
1)結構化資料
行資料,以二維表的形式展示的資料,可以直接看到結構
2)非結構化資料
沒有具體結構,視訊,文字,音樂檔案
3)半結構化資料
xml表格辦公軟體,HTML
2.搜尋的種類
1)結構化資料搜尋
結構化資料有固定結構,我們會給他'建立關係'(key value),生成'二維表查詢'
結構化索引
select * from table_name where a=b
2)非結構化資料搜尋
1.順序掃描
2.全文搜尋
全文索引
將結構化資料中的一部分資訊提取出來,重新組織,使其變得有一定結構,然後對此有一定結構的資料進行搜尋,從而達到搜尋相對較快的目的
二、Elasticsearch介紹
1.什麼Elasticsearch?
是一個高度可擴充套件的開源'全文搜尋和分析引擎',它可實現資料的實時全文搜尋搜尋、支援分散式可實現高可用、提供API介面,'可以處理大規模日誌資料',比如Nginx、Tomcat、系統日誌等功能。 Elasticsearch是基於'lucene'開發而來的 Elasticsearch用處:1.日誌收集+kibana 2.搜尋引擎 #Elasticsearch不能'完全代替'資料庫,因為沒有使用者名稱和密碼的設定
2.ES和資料庫結構對比
mysql | ES |
---|---|
庫(database) | 索引(index) |
表(table) | 型別(type) |
列(欄位) | 項 (field) |
真實資料行 | 文件(doc)json格式 |
index(索引-資料庫)
索引包含一堆有相似結構的文件資料
type(型別-表)
每個索引都可以有一個或多個type,type是index中的一個邏輯資料分類,一個type下面的document,都有相同的field(欄位)
3.ES原理
1.儲存資料時進行'全文檢索' 2.全文檢索後建立'倒排索引' Elasticsearch資料分散式儲存: Elasticsearch也是會對資料進行切分,同時每一個'分片'會儲存多個副本 Elasticsearch中的資料也是備份儲存至多個節點中的 Elasticsearch中,'節點是對等的',節點間會通過自己的一些規則選取叢集的master,master會負責叢集狀態資訊的改變,並同步給其他節點 只有'建立'索引和型別需要經過master,'資料的寫入'有一個簡單的routing規則,可以route到叢集中的任意節點,所以資料寫入壓力是分散在整個叢集的。
4.全文檢索
將一個數據的內容轉化拆分
1.分詞 ('使用工具')
2.找到關鍵詞
3.搜尋索引
4.匹配,命中,計算'命中率'
5.根據命中率進行排序
5.倒排索引(反向索引)
java 是世界上最好的語言
php 是世界上最好的語言
python 是世界上最好的語言
#docer k8s都是使用go語言寫的
#網頁爬取
#停頓詞過濾,比如'的' '而',這些詞本身沒有意義,建立倒排索引的時候沒必要考慮他們
#Lucene可以很方便的建立倒排索引,Elasticsearch是對Lucene的封裝,提供restful的api,通過http請求就能對其進行操作
#Elasticsearch是一個分散式搜尋引擎
keyword型別是不會分詞的,直接根據字串內容建立反向索引,
text型別在存入elasticsearch的時候,會先分詞,然後根據分詞後的內容建立反向索引
分詞後的值(詞條) | 文件1 | 文件2 | 文件3 |
---|---|---|---|
java | 命中 | ||
是 | 命中 | 命中 | 命中 |
世界上 | 命中 | 命中 | 命中 |
最好的 | 命中 | 命中 | 命中 |
語言 | 命中 | 命中 | 命中 |
php | 命中 | ||
python | 命中 |
開發語言排行
6.倒排索引術語
1.詞條:索引'最小的儲存單位',拆分一組詞之後,每一個字或者詞
2.詞典:詞條儲存的地方,一般在'記憶體'中
3.'倒排表':記錄多個詞命中的次數和順序
4.倒排檔案:儲存倒排表的地方,一般在磁碟中
7.ES功能
1.分散式儲存
2.全文搜尋,結構化檢索,資料分析
全文搜尋:select * from table;
結構化檢索:select * from table where id > 1;
資料分析:select count(*) from table;
8.使用場景
1.大量資料儲存
2.搜尋資料
3.分析資料(ELK)
4.搜尋高亮顯示(百度)
9.ES特點
1.可以部署單點或者叢集(單點既是叢集)
2.高效能,百萬資料毫秒級查詢
3.支援分散式(容錯率)
4.不需要會java
5.功能豐富
6.部署簡單
三、部署ES
1.伺服器時間同步
[root@db01 ~]# yum install -y ntpdate
[root@db01 ~]# ntpdate time1.aliyun.com
#注意不同的elasticsearch伺服器的字符集一定要相同
2.安裝java環境
#上傳
[root@db01 ~]# rz jdk-8u181-linux-x64.rpm
#安裝
[root@db01 ~]# rpm -ivh jdk-8u181-linux-x64.rpm
3.安裝ES
1.上傳或下載包
[root@db01 ~]# rz elasticsearch-6.6.0.rpm
或
[root@db01 ~]# wget https://www.elastic.co/downloads/elasticsearch
2.安裝
[root@db01 ~]# rpm -ivh elasticsearch-6.6.0.rpm
3.根據提示繼續操作
[root@db01 ~]# systemctl daemon-reload
[root@db01 ~]# systemctl enable elasticsearch.service
[root@db01 ~]# systemctl start elasticsearch.service
4.驗證,es啟動過程有點慢,看情況判斷
[root@db01 ~]# netstat -lntp
tcp6 0 0 127.0.0.1:9200 :::* LISTEN 20040/java
tcp6 0 0 127.0.0.1:9300 :::* LISTEN 20040/java
[root@db01 ~]# curl 127.0.0.1:9200
{
"name" : "FIddisT",
"cluster_name" : "elasticsearch", #叢集的名字
"cluster_uuid" : "m8Y9neWHRxat7V1tVijMxA", #
"version" : {
"number" : "6.6.0",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "a9861f4",
"build_date" : "2019-01-24T11:27:09.439740Z",
"build_snapshot" : false,
"lucene_version" : "7.6.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
4.ES相關配置檔案
[root@db01 ~]# rpm -qc elasticsearch
/etc/elasticsearch/elasticsearch.yml #ES主配置檔案
/etc/elasticsearch/jvm.options #jvm虛擬記憶體配置
/etc/elasticsearch/log4j2.properties #日誌配置
/etc/elasticsearch/role_mapping.yml #規則配置
/etc/elasticsearch/roles.yml
/etc/elasticsearch/users
/etc/elasticsearch/users_roles
/etc/init.d/elasticsearch #啟動指令碼
/etc/sysconfig/elasticsearch #系統配置
/usr/lib/sysctl.d/elasticsearch.conf #引數配置
/usr/lib/systemd/system/elasticsearch.service #啟動程式
5.配置ES
[root@db01 ~]# vim /etc/elasticsearch/elasticsearch.yml
#叢集名稱(單點配置的話不要配置)
#cluster.name: my-application
#節點名稱,名字隨意
node.name: node-1
#指定資料目錄
path.data: /service/es/data
#指定日誌目錄
path.logs: /service/es/logs
#開啟記憶體鎖,c7才需要配置,c6不需要配置,配置了之後,'啟動指令碼'也要進行相應的配置
bootstrap.memory_lock: true
#ES監聽地址
network.host: 10.0.0.51,127.0.0.1
#ES埠
http.port: 9200
#叢集的地址
#discovery.zen.ping.unicast.hosts: ["host1", "host2"]
#叢集投票切換(最終決定票數)
#discovery.zen.minimum_master_nodes: x
#總配置
[root@db01 ~]# grep "^[a-z]" /etc/elasticsearch/elasticsearch.yml
#cluster.name: my-application
node.name: node-1
path.data: /service/es/data
path.logs: /service/es/logs
bootstrap.memory_lock: true
network.host: 10.0.0.51,127.0.0.1
http.port: 9200
#discovery.zen.ping.unicast.hosts: ["host1", "host2"]
#discovery.zen.minimum_master_nodes: x
6.根據配置檔案建立目錄
#建立資料目錄和日誌目錄
[root@db01 ~]# mkdir /service/es/{data,logs} -p
#授權
[root@db01 ~]# chown -R elasticsearch.elasticsearch /service/es/
7.重啟ES
#重啟ES
[root@db01 ~]# systemctl restart elasticsearch.service
#啟動失敗,檢視日誌
[2020-08-10T10:38:56,170][ERROR][o.e.b.Bootstrap ] [node-1] node validation exception
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked
#說明記憶體未鎖定
#配置啟動檔案中記憶體鎖
[root@db01 ~]# vim /usr/lib/systemd/system/elasticsearch.service
[Service]
... ...
LimitMEMLOCK=infinity
#再次啟動ES
[root@db01 ~]# systemctl daemon-reload
[root@db01 ~]# systemctl start elasticsearch.service
8.驗證
#瀏覽器訪問 http://10.0.0.51:9200/
{
#節點名稱
"name" : "node-1",
#叢集名稱
"cluster_name" : "elasticsearch",
#叢集的uuid
"cluster_uuid" : "KCRhZiS2QWSADsuDwwKC9g",
#版本資訊
"version" : {
"number" : "6.6.0",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "a9861f4",
"build_date" : "2019-01-24T11:27:09.439740Z",
"build_snapshot" : false,
"lucene_version" : "7.6.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
四、跟ES進行互動
1.curl命令的方式
1)特點
1.使用不方便,容易出錯,命令複雜
2.不需要要安裝任何服務,只需要curl命令
#ES不能完全代替資料庫原因
1.ES的庫不可修改,表修改屬性困難,容易出錯,_index _user欄位'不能修改'
2.ES沒有使用者驗證和許可權控制
es是非關係型資料庫
es資料的儲存不收欄位的限制
curl命令可以去跟開發要
2)使用方式
#建立索引(庫),?pretty以列格式顯示
[root@db01 ~]# curl -XPUT '10.0.0.51:9200/student?pretty'
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "student"
}
#新增資料(key value)
[root@db01 ~]# curl -XPUT '10.0.0.51:9200/student/user/1?pretty' -H 'Content-Type: application/json' -d '{"name": "lhd","sex":"man","age":"18","about":"good good study","interests":["chinese","english"]}'
{
"_index" : "student",
"_type" : "user",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
#檢視資料,索引 型別 以列顯示
[root@db01 ~]# curl -GET '10.0.0.51:9200/student/user/1?pretty'
{
"_index" : "student",
"_type" : "user",
"_id" : "1",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "lhd",
"sex" : "man",
"age" : "18",
"about" : "good good study",
"interests" : [
"chinese",
"english"
]
}
}
2.使用head外掛的方式
外掛是為了完成不同的功能,官方提供了一些外掛但大部分是收費的,另外也有一些開發愛好者提供的外掛,可以實現對elasticsearch叢集的狀態監控與管理配置等功能,我們現在要安裝的是Elasticsearch的'head外掛',此外掛提供elasticsearch的web介面功能。
安裝Elasticsearch的head外掛時,'要安裝npm',npm的全稱是Node Package Manager,是隨同NodeJS一起安裝的包管理和分發工具,它很方便讓JavaScript開發者下載、安裝、上傳以及管理已經安裝的包。
在Elasticsearch 5.x版本以後不再支援直接安裝head外掛,而是需要通過啟動一個服務方式。
Github地址:https://github.com/mobz/elasticsearch-head
1)特點
1.檢視資料簡單,操作簡單
2.需要安裝nodejs環境,安裝費時
2)安裝外掛方式一:
#安裝npm(只需要在一個節點安裝即可,如果前端還有nginx做反向代理可以每個節點都裝)
[root@elkstack01 ~]# yum install -y npm
#進入下載head外掛程式碼目錄
[root@elkstack01 src]# cd /usr/local/
#從GitHub上克隆程式碼到本地
[root@elkstack01 local]# git clone git://github.com/mobz/elasticsearch-head.git
#克隆完成後,進入elasticsearch外掛目錄
[root@elkstack01 local]# cd elasticsearch-head/
#清除快取
[root@elkstack01 elasticsearch-head]# npm cache clean -f
#使用npm安裝n模組(不同的專案js指令碼所需的node版本可能不同,所以就需要node版本管理工具)
[root@elkstack01 elasticsearch-head]# npm install -g n
#安裝最新版本n模組
[root@elkstack01 elasticsearch-head]# n stable
#生成grunt
[root@elkstack01 elasticsearch-head]# npm install grunt -save
#確認生成grunt檔案
[root@elkstack01 elasticsearch-head]# ll node_modules/grunt
#執行安裝grunt
[root@elkstack01 elasticsearch-head]# npm install
#後臺啟動head外掛(切記,必須在外掛目錄下執行啟動命令)
[root@elkstack01 elasticsearch-head]# npm run start &
#驗證埠是否啟動成功
[root@elkstack01 elasticsearch-head]# netstat -lntup
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 11293/grunt
#啟動成功後,修改elasticsearch配置檔案
[root@elkstack01 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml
#新增如下兩行,開啟跨域訪問支援(新增在配置檔案最後即可)
http.cors.enabled: true
http.cors.allow-origin: "*"
#重啟elasticsearch
[root@elkstack01 elasticsearch-head]# /etc/init.d/elasticsearch restart
3)安裝外掛方式二:
1.在'電腦上'解壓es-head-0.1.4_0.crx.zip,解壓到一個目錄
2.谷歌瀏覽器,右上角,三個點或者三個槓
3.更多工具--擴充套件程式
4.右上角開啟開發者模式
5.載入已解壓的擴充套件程式,選擇解壓問價你的目錄
6.右上角有個放大鏡或者拼圖,點選進去
3.使用kibana
作業:
1.恢復快照,三臺機器,2G記憶體
2.搭建ES
3.嘗試搭建叢集