
ElasticSearch
一、ElasticSearch概述
1.ElasticSearch介紹
??ES 是一個開源的高擴展的分布式全文搜索引擎,是整個Elastic Stack技術堆疊的核心,它可以近乎實時的存盤,檢索資料;本身擴展性很好,可以擴展到上百臺服務器,處理PB級別的資料,
??ElasticSearch的底層是開源庫Lucene,但是你沒辦法直接用Lucene,必須自己寫代碼去呼叫它的介面,Elastic是Lucene的封裝,提供了REST API的操作介面,開箱即用,天然的跨平臺,
??全文檢索是我們在實際專案開發中最常見的需求了,而ElasticSearch是目前全文檢索引擎的首選,它可以快速的存盤,搜索和分析海量的資料,維基百科,GitHub,Stack Overflow都采用了ElasticSearch,
官方網站:https://www.elastic.co/cn/elasticsearch/
中文社區:https://elasticsearch.cn/explore/
2.ElasticSearch用途
- 搜索的資料物件是大量的非結構化的文本資料,
- 檔案記錄達到數十萬或數百萬個甚至更多,
- 支持大量基于互動式文本的查詢,
- 需求非常靈活的全文搜索查詢,
- 對高度相關的搜索結果的有特殊需求,但是沒有可用的關系資料庫可以滿足,
- 對不同記錄型別,非文本資料操作或安全事務處理的需求相對較少的情況,
3. ElasticSearch基本概念

3.1 索引
??索引(indices)在這兒很容易和MySQL資料庫中的索引產生混淆,其實是和MySQL資料庫中的Databases資料庫的概念是一致的,
3.2 型別
??型別(Type),對應的其實就是資料庫中的 Table(資料表),型別是模擬mysql中的table概念,一個索引庫下可以有不同型別的索引,比如商品索引,訂單索引,其資料格式不同,
3.3 檔案
??檔案(Document),對應的就是具體資料行(Row)
3.4 欄位
??欄位(field)相對于資料表中的列,也就是檔案中的屬性,
4. 倒排索引
??Elasticsearch是通過Lucene的倒排索引技術實作比關系型資料庫更快的過濾,特別是它對多條件的過濾支持非常好.
??倒排索引是搜索引擎的核心,搜索引擎的主要目標是在查找發生搜索條件的檔案時提供快速搜索,ES中的倒排索引其實就是 lucene 的倒排索引,區別于傳統的正向索引,倒排索引會再存盤資料時將關鍵詞和資料進行關聯,保存到倒排表中,然后查詢時,將查詢內容進行分詞后在倒排表中進行查詢,最后匹配資料即可,



具體拆解的案例
| 詞 | 記錄 |
|---|---|
| 紅海 | 1,2,3,4,5 |
| 行動 | 1,2,3 |
| 探索 | 2,5 |
| 特別 | 3,5 |
| 記錄篇 | 4 |
| 特工 | 5 |
保存的對應的記錄為
1-紅海行動
2-探索紅海行動
3-紅海特別行動
4-紅海記錄篇
5-特工紅海特別探索
分詞:將整句分拆為單詞
檢索資訊:
- 紅海特工行動?
- 紅海行動?
二、ElasticSearch相關安裝

1.Elasticsearch安裝
??ElasticSearch安裝就相當于安裝MySQL資料庫,
下載對應的鏡像檔案
docker pull elasticsearch:7.4.2
創建需要掛載的目錄
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
echo “http.host : 0.0.0.0” >> /mydata/elasticsearch/config/elasticsearch.yml
安裝ElasticSearch容器
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e “discovery.type=single-node” -e ES_JAVA_OPTS="-Xms64m -Xmx128m" -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins -d elasticsearch:7.4.2
啟動例外:
elasticsearch.yml組態檔的 : 兩邊需要添加空格
還有就是訪問的檔案權限問題:

沒有權限我們就添加權限就可以了
chmod -R 777 /mydata/elasticsearch/
然后我們就可以啟動容器了
docker start 容器編號

然后測驗訪問:http://192.168.56.100:9200

看到這個效果表示安裝成功!
2.Kibanan安裝
??Kibanan的安裝就相當于安裝MySQL的客戶端SQLYog,
下載鏡像檔案
docker pull kibana:7.4.2
啟動容器的命令
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.56.100:9200 -p 5601:5601 -d kibana:7.4.2
測驗訪問:http://192.168.56.100:5601

如果查看日志:docker logs 容器編號

那么我們就手動的進入容器中修改ElasticSearch的服務地址
docker exec -it 容器編號 /bin/bash
進入config目錄
cd config
修改kibana.yml檔案中的ElasticSearch的服務地址

然后我們重啟Kibana服務

看到如下界面表示安裝啟動成功

三、ElasticSearch入門
1._cat
| _cat介面 | 說明 |
|---|---|
| GET /_cat/nodes | 查看所有節點 |
| GET /_cat/health | 查看ES健康狀況 |
| GET /_cat/master | 查看主節點 |
| GET /_cat/indices | 查看所有索引資訊 |
/_cat/indices?v 查看所有的索引資訊

es 中會默認提供上面的幾個索引,表頭的含義為:
| 欄位名 | 含義說明 |
|---|---|
| health | green(集群完整) yellow(單點正常、集群不完整) red(單點不正常) |
| status | 是否能使用 |
| index | 索引名 |
| uuid | 索引統一編號 |
| pri | 主節點幾個 |
| rep | 從節點幾個 |
| docs.count | 檔案數 |
| docs.deleted | 檔案被刪了多少 |
| store.size | 整體占空間大小 |
| pri.store.size | 主節點占 |
2.索引操作
索引就相當于我們講的關系型資料庫MySQL中的 database
2.1 創建索引
PUT /索引名
引數可選:指定分片及副本,默認分片為3,副本為2,
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
}
}

2.2 查看索引資訊
GET /索引名

或者,我們可以使用*來查詢所有索引具體資訊

2.3 洗掉索引
DELETE /索引名稱

3.檔案操作
檔案相當于資料庫中的表結構中的Row記錄
3.1 創建檔案
PUT /索引名稱/型別名/編號
資料
{
"name":"bobo"
}

| 提交方式 | 描述 |
|---|---|
| PUT | 提交的id如果不存在就是新增操作,如果存在就是更新操作,id不能為空 |
| POST | 如果不提供id會自動生成一個id,如果id存在就更新,如果id不存在就新增 |
POST /索引名稱/型別名/編號


3.2 查詢檔案
GET /索引/型別/id

回傳欄位的含義
| 欄位 | 含義 |
|---|---|
| _index | 索引名稱 |
| _type | 型別名稱 |
| _id | 記錄id |
| _version | 版本號 |
| _seq_no | 并發控制欄位,每次更新都會+1,用來實作樂觀鎖 |
| _primary_term | 同上,主分片重新分配,如重啟,就會發生變化 |
| found | 找到結果 |
| _source | 真正的資料內容 |
樂觀鎖: ?if_seq_no=0&if_primary_term=1


3.3 更新檔案
??前面的POST和PUT添加資料的時候,如果id存在就會執行更新檔案的操作,當然我們也可以通過POST方式提交,然后顯示的跟上_update來實作更新
POST /索引/型別/id/_update
{
"doc":{
"name":"bobo666"
}
}
這種方式來更新,只是這種方式的更新如果資料沒有變化則不會操作,

如果更新的資料和檔案中的資料是一樣的,那么POST方式提交是不會有任何操作的

3.4 洗掉檔案
DELETE /索引/型別/id
DELETE /索引

3.5 測驗資料
_bulk批量操作,語法格式
{action:{metadata}}\n
{request body }\n
{action:{metadata}}\n
{request body }\n
案例
POST /bobo/system/_bulk
{"index":{"_id":"1"}}
{"name":"dpb"}
{"index":{"_id":"2"}}
{"name":"dpb2"}

復雜點的案例:
POST /_bulk
{"delete":{"_index":"website","_type":"blog","_id":"123"}}
{"create":{"_index":"website","_type":"blog","_id":"123"}}
{"title":"My first bolg post ..."}
{"index":{"_index":"website","_type":"blog"}}
{"title":"My second blog post ..."}
{"update":{"_index":"website","_type":"blog","_id":"123"}}
{"doc":{"title":"My updated blog post ..."}}
官方測驗資料:https://github.com/elastic/elasticsearch/blob/master/docs/src/test/resources/accounts.json
好了基礎篇就給大家介紹到這里了,后面我們繼續升入介紹!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/423969.html
標籤:其他
上一篇:tlinux 3.1 配置 docker / docker-compose 一鍵部署 redis,rabbitmq 容器
下一篇:SQL陳述句
