1. 程式人生 > 實用技巧 >elasticsearch概念介紹01

elasticsearch概念介紹01

Elasticsearch 學習

jdk下載

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.嘗試搭建叢集