什么是ElasticSearch
? ? ? ? es是一個開源的分布式搜索引擎,可以用來實現(xiàn)搜索、日志統(tǒng)計、分析、系統(tǒng)監(jiān)控,es易于擴展,可以輕松擴展到上百臺服務器,處理PB(1PB=1024TB 1TB= 1024GB)級別的數(shù)據(jù),es自身攜帶分布式協(xié)調管理功能,但僅支持JSON文件格式
? ? ? ? Es理論:
? ? ? ? ? ? ? ? 1.索引:
????????????????????????在Es中一個索引對應一組相關文檔的存儲單元,可以被看作是一種類似于數(shù)據(jù)庫中的表結構,用于存儲相類似的文檔,每個文檔都屬于一個索引,索引中的文檔用于被搜索和分析。
? ? ? ? ? ? ? ? 2.索引分片:
? ? ? ? ? ? ? ? ? ? ? ?索引分片是將一個完整的索引分成多個的過程,每個分片本身是一個獨立的索引,擁有自己的設置、映射、文檔。Es通過將索引劃分為多個分片來允許大規(guī)模數(shù)據(jù)存儲,并且能夠水平擴張,每個分片可以分布在集群的不同節(jié)點上,默認情況下每個索引包含五個主分片。
? ? ? ? ? ? ? ? 3.索引副本:
? ? ? ? ? ? ? ? ? ? ? ? 索引副本是每個分片的一個復制品用于提供冗余和故障的回復副本分布在不同的節(jié)點上從而增加了系統(tǒng)的可靠性和容錯能力。
ElasticSearch核心概念
? ? ? ? 1.節(jié)點
? ? ? ? ? ? ? ? 節(jié)點是集群中的單個服務器,用于存儲數(shù)據(jù)并參與集群的索引和搜索功能。每個節(jié)點都有自己的名稱和唯一標識符。
? ? ? ? 2.集群
? ? ? ? ? ? ? ? 集群是由一個或多個節(jié)點組成的一組服務器,它們共同存儲項目的整個數(shù)據(jù),集群提供可高可用性和橫向擴展性。
? ? ? ? 3.分片和復制
? ? ? ? ? ? ? ? 分片是將索引中的數(shù)據(jù)分割成多個部分,用于提高性能和擴展性每個分片可以被存儲在集群中的一個或多個節(jié)點上。
? ? ? ? ? ? ? ? 復制是為了數(shù)據(jù)的高可用性和容錯性,每個分片都會有一個或多個副本分片,這些分片會被存儲在不同的節(jié)點上。
? ? ? ? 4.索引
????????????????索引是用于存儲數(shù)據(jù)的地方類似于關系型數(shù)據(jù)庫中的數(shù)據(jù)可以,它是一種用于存儲相似性質的文檔的數(shù)據(jù)結構。
? ? ? ? 5.類型
? ? ? ? ? ? ? ? 類型在ES6.0之前用于組織索引內部文檔的一種方式。在ES7.0之后已經被廢棄,推薦使用單一索引引用字段代替。
? ? ? ? 6.文檔
? ? ? ? ? ? ? ? 文檔是ES中的基本數(shù)據(jù)單元,類似于關系型數(shù)據(jù)庫中的行,每個文檔都是一個JSON對象,它們被存儲在索引中并可以被搜索。
? ? ? ? 7.字段
? ? ? ? ? ? ? ? 字段是ES中文檔的組成部分,類似于關系型數(shù)據(jù)庫中的列,每個字段都有自己的數(shù)據(jù)類型(文本型、數(shù)值型等),并且包含特定的數(shù)據(jù)。
? ? ? ? 8.映射
????????????????映射定義了索引中的,每個字段的數(shù)據(jù)類型和屬性,它相當于關系型數(shù)據(jù)庫中的模式,告訴ES如何處理索引的每個字段。
創(chuàng)建索引
PUT /baidu
{
"settings": {
"number_of_shards": 2,//主分片
"number_of_replicas": 2//副分片
},
"mappings": {
"properties": {
"title":{
"type": "text"
}
}
}
}
添加文檔
POST /my_es/_doc
{
"title":"震驚,某男子竟于小豬干這件事。。。。",
"content":"男子天天給小豬吃昂貴的水果,小豬更可愛了",
"author":"王五",
"time":"2023-12-18T11:44:20"
}
查詢所有
GET /my_es/_search
語法規(guī)則
? ? ? ? _doc:用于早期的ES版本中同一個索引中單獨集合映射類型。從8.x版本開始已全面廢棄。
? ? ? ? _index:創(chuàng)建新索引、是創(chuàng)建一個命名空間將相關文檔聚合在一起
? ? ? ? _create:創(chuàng)建新索引、是創(chuàng)建一個新的文檔并將其添加到指定索引中
? ? ? ? _update:用于更新文檔中的一部分類容
? ? ? ? _delete:刪除文檔
條件查詢
GET /my_es/_search
{
"query": {
"match": {
"title": "豬" //title帶有豬字的都查出來
}
}
}
? ? ? ? 返回結果
{
"took" : 1,//請求耗時
"timed_out" : false,//是否超時
"_shards" : {//分片信息(包含了成功的分片數(shù)量和失敗的分片數(shù)量)
"total" : 2,//總分片數(shù)(總命中數(shù))
"successful" : 2,//搜索成功的分片數(shù)
"skipped" : 0,//沒有搜索或跳過的分片數(shù)
"failed" : 0//搜索失敗的分片數(shù)
},
"hits" : {//搜索結果集
"total" : {//返回多少數(shù)據(jù)
"value" : 1,//一共一條數(shù)據(jù)
"relation" : "eq"http://過濾語法
},
"max_score" : 0.8630463,//最高匹配得分
"hits" : [
{
"_index" : "taobao_goods",//索引名
"_type" : "_doc",//文檔類型(8.X已棄用)
"_id" : "98PrgIwBM5jPvpt7_k_k",//唯一標識符
"_score" : 0.8630463,//匹配度得分
"_source" : {//實際內容
"id" : "1",
"name" : "康師傅酸菜牛肉",
"description" : "酸酸甜甜",
"price" : "5",
"stock" : "100"
}
}
]
}
}
多條件查詢
GET /taobao_goods/_search
{
"query": {
"bool": {//多條件查詢度一種方式
"must": [//必須滿足一下條件相當于sql中的and//查詢語氣
{
"match": {
"name": "康師傅"
}
},
{
"match": {
"description": "酸酸"
}
}
]
}
}
}
? ? ? ? 1.must鏡像:必須都匹配相當于邏輯的and
? ? ? ? 2.must_not:必須都不匹配相當于邏輯中的not
? ? ? ? 3.should:表示條件可以匹配,但不是必須,相當于邏輯上的or
? ? ? ? 4.filter:表示條件必須匹配常用語過濾操作
更新索引
? ? ? ? _doc:覆蓋方式完成更新(8.X版本之后移除)
POST /taobao_goods/_doc/-MPsgIwBM5jPvpt7k0-P //文檔的_id
{
"id": "2",
"name": "統(tǒng)一紅燒牛肉面",
"description": "好吃不上火",
"price": "5",
"stock": "70"
}//這種寫法會重寫原有數(shù)據(jù)結構(慎用)
?????????_update:非覆蓋方式完成更新,只有修改功能
POST /taobao_goods/_update/-MPsgIwBM5jPvpt7k0-P
{
"doc": {
"price": "5.5"
}
}//只會修改對應字段
//如果沒有這個字段會直接添加這個字段
刪除文檔
DELETE /taobao_goods/_doc/98PrgIwBM5jPvpt7_k_k//跟文檔_id
通過ES id刪除
條件刪除
POST /taobao_goods/_delete_by_query
{
"query":{
"match":{
"id":"2"
}
}
}//通過mysql id刪除
//刪除所有match_all
POST /taobao_goods/_delete_by_query
{
"query":{
"match_all":{
}
}
}
工作原理
es容器創(chuàng)建
????????1.拉取鏡像?
? ? ? ? docker pull elasticsearch:xx? #版本盡量大于7.12.1
????????2.創(chuàng)建es網絡
????????docker network create es-network
????????3.找到usr創(chuàng)建elasticsearch文件夾 在里面創(chuàng)建data和plugins文件夾
? ? ? ? cd usr
? ? ? ? mkdir elasticsearch?
? ? ? ? cd elasticsearch
? ? ? ? mkdir data
? ? ? ? mkdir plugins
#效果
????????4.修改掛載文件權限
????????chmod -R 777 elasticsearch
????????5.創(chuàng)建容器
docker run -d \
--name elasticsearch \
--net=es-network \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e xpack.security.authc.api_key.enabled=true \
-e "ES_JAVA_OPTS=-Xms50m -Xmx512m" \
-v es-data:/usr/elasticsearch/data \
-v es-plugins:/usr/elasticsearch/plugins \
docker.elastic.co/elasticsearch/elasticsearch:7.12.1
docker run -d \? ? ? ? 后臺運行
--name elasticsearch \? ? ? ? 給容器起一個別名
--net=es-network \? ? ? ? 指定容器連接到名為es-network的網絡上面
-p 9200:9200 \? ? ? ? 主機容器之間端口映射,9200用于程序調用使用
-p 9300:9300 \????????主機容器之間端口映射,9300用于es集群之間的通信
-e "discovery.type=single-node" \? ? ? ? 配置單節(jié)點啟動發(fā)現(xiàn)的環(huán)境變量
-e xpack.security.authc.api_key.enabled=true ?\? ? ? ? 啟動api秘鑰認證功能
-e "ES_JAVA_OPTS=-Xms50m -Xmx512m" \? ? ? ? 指定java虛擬機堆內存最小為50mb最大為512mb
-v es-data:/usr/elasticsearch/data \? ? ? ? 掛載數(shù)據(jù)目錄卷
-v es-plugins:/usr/elasticsearch/plugins \? ? ? ? 掛載插件目錄卷
docker.elastic.co/elasticsearch/elasticsearch:7.12.1? ? ? ? 指定運行的鏡像:版本
ps:如果運行不了查看是否有多余空格
? ? ? ? 6.查看安裝成功
curl http://localhost:9200
#返回
????????7.給es設置訪問密碼
? ? ? ??????????1.進入es容器
? ? ? ??????????2.進入/usr/share/elasticsearch/config路徑
? ? ? ? ? ? ? ? 3.編輯elasticsearch.yml配置文件
? ? ? ? ? ? ? ? ?vi elasticsearch.yml
加入
????????????????http.cors.enabled: true
????????????????http.cors.allow-origin: "*"
????????????????http.cors.allow-headers: Authorization
????????????????xpack.security.enabled: true
????????????????xpack.security.transport.ssl.enabled: true
? ? ? ? ??? ? ? 4.ctrl+qp
? ? ? ? ? ? ? ? 5.重啟es容器
? ? ? ? ? ? ? ? 6.再次進入容器
? ? ? ? ? ? ? ? 7.設置密碼
????????./bin/elasticsearch-setup-passwords interactive
? ? ? ? ? ? ? ??
????????????????8.退出,進入宿主機再次重啟容器,完成
? ? ? ? ? ? ? ? 9.驗證:使用瀏覽器訪問? ? ip:9200
? ? ? ? ? ? ? ? ? ? ? ? 彈出登錄框 用戶名默認 :elastic
最后返回值
? ? ? ? ? ?
安裝可視化工具kibana
? ? ? ? 1.拉取鏡像kibana 版本與es對應
docker pull kibana:7.12.1
? ? ? ? 2.創(chuàng)建kibana網絡
docker network create kibana-network
? ? ? ? 3.kibana容器創(chuàng)建
docker run -d \
--name kibana \
--net=kibana-network \
-e ELASTICSEARCH_HOSTS=http://es的服務器ip地址:9200 \
-p 5601:5601 \
docker.elastic.co/kibana/kibana:7.12.1
docker run -d \? ? ? ? 后臺運行
--name kibana \? ? ? ? 設置容器名
--net=kibana-network \? ? ? ? 設置kibana網絡
-e ELASTICSEARCH_HOSTS=http://es的服務器ip地址:9200 \????????
-p 5601:5601 \? ? ? ? 主機容器之間端口映射
docker.elastic.co/kibana/kibana:7.12.1? ? ? ? 運行的鏡像名:版本號
? ? ? ? 4.進入容器kibana 進入config
?bash-4.4$ pwd
/usr/share/kibana/config
? ? ? ? 5.更改kibana配置文件
vi kibana.yml?
加入
i18n.locale: "zh-CN"
elasticsearch.username: "elastic" #用戶名
elasticsearch.password: "xxxxx" #為es配置的密碼要相同
? ? ? ? 6.退出容器 重啟容器
? ? ? ? 7.瀏覽器訪問? ip:5601????????
? ? ? ? ? ? ? ? 輸入用戶名和密碼進入elastic文章來源:http://www.zghlxwxcb.cn/news/detail-761251.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-761251.html
到了這里,關于ElasticSearch配置及Kibana可視化配置的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!