ElasticSearch
一、ElasticSearch概述
1.ElasticSearch介紹
??ES 是一個(gè)開源的高擴(kuò)展的分布式全文搜索引擎,是整個(gè)Elastic Stack技術(shù)棧的核心。它可以近乎實(shí)時(shí)的存儲,檢索數(shù)據(jù);本身擴(kuò)展性很好,可以擴(kuò)展到上百臺服務(wù)器,處理PB級別的數(shù)據(jù)。
??ElasticSearch的底層是開源庫Lucene,但是你沒辦法直接用Lucene,必須自己寫代碼去調(diào)用它的接口,Elastic是Lucene的封裝,提供了REST API的操作接口,開箱即用。天然的跨平臺。
??全文檢索是我們在實(shí)際項(xiàng)目開發(fā)中最常見的需求了,而ElasticSearch是目前全文檢索引擎的首選,它可以快速的存儲,搜索和分析海量的數(shù)據(jù),維基百科,GitHub,Stack Overflow都采用了ElasticSearch。
官方網(wǎng)站:https://www.elastic.co/cn/elasticsearch/
中文社區(qū):https://elasticsearch.cn/explore/
2.ElasticSearch用途
- 搜索的數(shù)據(jù)對象是大量的非結(jié)構(gòu)化的文本數(shù)據(jù)。
- 文件記錄達(dá)到數(shù)十萬或數(shù)百萬個(gè)甚至更多。
- 支持大量基于交互式文本的查詢。
- 需求非常靈活的全文搜索查詢。
- 對高度相關(guān)的搜索結(jié)果的有特殊需求,但是沒有可用的關(guān)系數(shù)據(jù)庫可以滿足。
- 對不同記錄類型,非文本數(shù)據(jù)操作或安全事務(wù)處理的需求相對較少的情況。
3. ElasticSearch基本概念
3.1 索引
??索引(indices)在這兒很容易和MySQL數(shù)據(jù)庫中的索引產(chǎn)生混淆,其實(shí)是和MySQL數(shù)據(jù)庫中的Databases數(shù)據(jù)庫的概念是一致的。
3.2 類型
??類型(Type),對應(yīng)的其實(shí)就是數(shù)據(jù)庫中的 Table(數(shù)據(jù)表),類型是模擬mysql中的table概念,一個(gè)索引庫下可以有不同類型的索引,比如商品索引,訂單索引,其數(shù)據(jù)格式不同。
3.3 文檔
??文檔(Document),對應(yīng)的就是具體數(shù)據(jù)行(Row)
3.4 字段
??字段(field)相對于數(shù)據(jù)表中的列,也就是文檔中的屬性。
4. 倒排索引
??Elasticsearch是通過Lucene的倒排索引技術(shù)實(shí)現(xiàn)比關(guān)系型數(shù)據(jù)庫更快的過濾。特別是它對多條件的過濾支持非常好.
??倒排索引是搜索引擎的核心。搜索引擎的主要目標(biāo)是在查找發(fā)生搜索條件的文檔時(shí)提供快速搜索。ES中的倒排索引其實(shí)就是 lucene 的倒排索引,區(qū)別于傳統(tǒng)的正向索引,倒排索引會(huì)再存儲數(shù)據(jù)時(shí)將關(guān)鍵詞和數(shù)據(jù)進(jìn)行關(guān)聯(lián),保存到倒排表中,然后查詢時(shí),將查詢內(nèi)容進(jìn)行分詞后在倒排表中進(jìn)行查詢,最后匹配數(shù)據(jù)即可。
具體拆解的案例
詞 | 記錄 |
---|---|
紅海 | 1,2,3,4,5 |
行動(dòng) | 1,2,3 |
探索 | 2,5 |
特別 | 3,5 |
記錄篇 | 4 |
特工 | 5 |
保存的對應(yīng)的記錄為
1-紅海行動(dòng)
2-探索紅海行動(dòng)
3-紅海特別行動(dòng)
4-紅海記錄篇
5-特工紅海特別探索
分詞:將整句分拆為單詞
檢索信息:
- 紅海特工行動(dòng)?
- 紅海行動(dòng)?
二、ElasticSearch相關(guān)安裝
1.Elasticsearch安裝
??ElasticSearch安裝就相當(dāng)于安裝MySQL數(shù)據(jù)庫。
下載對應(yīng)的鏡像文件
docker pull elasticsearch:7.4.2
創(chuàng)建需要掛載的目錄
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
啟動(dòng)異常:
elasticsearch.yml配置文件的 :
兩邊需要添加空格
還有就是訪問的文件權(quán)限問題:
沒有權(quán)限我們就添加權(quán)限就可以了
chmod -R 777 /mydata/elasticsearch/
然后我們就可以啟動(dòng)容器了
docker start 容器編號
然后測試訪問:http://192.168.56.100:9200
看到這個(gè)效果表示安裝成功!
2.Kibana安裝
??Kibana的安裝就相當(dāng)于安裝MySQL的客戶端SQLYog。
下載鏡像文件
docker pull kibana:7.4.2
啟動(dòng)容器的命令
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 容器編號
那么我們就手動(dòng)的進(jìn)入容器中修改ElasticSearch的服務(wù)地址
docker exec -it 容器編號 /bin/bash
進(jìn)入config目錄
cd config
修改kibana.yml文件中的ElasticSearch的服務(wù)地址
然后我們重啟Kibana服務(wù)
看到如下界面表示安裝啟動(dòng)成功
三、ElasticSearch入門
1._cat
_cat接口 | 說明 |
---|---|
GET /_cat/nodes | 查看所有節(jié)點(diǎn) |
GET /_cat/health | 查看ES健康狀況 |
GET /_cat/master | 查看主節(jié)點(diǎn) |
GET /_cat/indices | 查看所有索引信息 |
/_cat/indices?v 查看所有的索引信息
es 中會(huì)默認(rèn)提供上面的幾個(gè)索引,表頭的含義為:
字段名 | 含義說明 |
---|---|
health | green(集群完整) yellow(單點(diǎn)正常、集群不完整) red(單點(diǎn)不正常) |
status | 是否能使用 |
index | 索引名 |
uuid | 索引統(tǒng)一編號 |
pri | 主節(jié)點(diǎn)幾個(gè) |
rep | 從節(jié)點(diǎn)幾個(gè) |
docs.count | 文檔數(shù) |
docs.deleted | 文檔被刪了多少 |
store.size | 整體占空間大小 |
pri.store.size | 主節(jié)點(diǎn)占 |
2.索引操作
索引就相當(dāng)于我們講的關(guān)系型數(shù)據(jù)庫MySQL中的 database
2.1 創(chuàng)建索引
PUT /索引名
參數(shù)可選:指定分片及副本,默認(rèn)分片為3,副本為2。
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
}
}
2.2 查看索引信息
GET /索引名
或者,我們可以使用*來查詢所有索引具體信息
2.3 刪除索引
DELETE /索引名稱
3.文檔操作
文檔相當(dāng)于數(shù)據(jù)庫中的表結(jié)構(gòu)中的Row記錄
3.1 創(chuàng)建文檔
PUT /索引名稱/類型名/編號
數(shù)據(jù)
{
"name":"bobo"
}
提交方式 | 描述 |
---|---|
PUT | 提交的id如果不存在就是新增操作,如果存在就是更新操作,id不能為空 |
POST | 如果不提供id會(huì)自動(dòng)生成一個(gè)id,如果id存在就更新,如果id不存在就新增 |
POST /索引名稱/類型名/編號
3.2 查詢文檔
GET /索引/類型/id
返回字段的含義
字段 | 含義 |
---|---|
_index | 索引名稱 |
_type | 類型名稱 |
_id | 記錄id |
_version | 版本號 |
_seq_no | 并發(fā)控制字段,每次更新都會(huì)+1,用來實(shí)現(xiàn)樂觀鎖 |
_primary_term | 同上,主分片重新分配,如重啟,就會(huì)發(fā)生變化 |
found | 找到結(jié)果 |
_source | 真正的數(shù)據(jù)內(nèi)容 |
樂觀鎖: ?if_seq_no=0&if_primary_term=1
3.3 更新文檔
??前面的POST和PUT添加數(shù)據(jù)的時(shí)候,如果id存在就會(huì)執(zhí)行更新文檔的操作,當(dāng)然我們也可以通過POST方式提交,然后顯示的跟上_update來實(shí)現(xiàn)更新
POST /索引/類型/id/_update
{
"doc":{
"name":"bobo666"
}
}
這種方式來更新,只是這種方式的更新如果數(shù)據(jù)沒有變化則不會(huì)操作。
如果更新的數(shù)據(jù)和文檔中的數(shù)據(jù)是一樣的,那么POST方式提交是不會(huì)有任何操作的
3.4 刪除文檔
DELETE /索引/類型/id
DELETE /索引
3.5 測試數(shù)據(jù)
_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"}
復(fù)雜點(diǎn)的案例:文章來源:http://www.zghlxwxcb.cn/news/detail-671982.html
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 ..."}}
官方測試數(shù)據(jù):https://github.com/elastic/elasticsearch/blob/master/docs/src/test/resources/accounts.json文章來源地址http://www.zghlxwxcb.cn/news/detail-671982.html
到了這里,關(guān)于【業(yè)務(wù)功能篇81】微服務(wù)SpringCloud-ElasticSearch-Kibanan-docke安裝-入門實(shí)戰(zhàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!