目錄
=== 1票渠、什么是elasticsearch
——1、搜索引擎干了什么
——2、elasticsearch 如何提供搜索服務(wù)
——3、elasticsearch 中的restful接口埠戳、索引、分詞器士葫、類型mapping
=== 2乞而、索引的操作
——1送悔、創(chuàng)建慢显、刪除索引
——2、索引對(duì)數(shù)據(jù)項(xiàng)的字段類型mapping
——3欠啤、在kibana中查看和管理索引
=== 3荚藻、數(shù)據(jù)的操作
——1、restfull接口的插入洁段、刪除數(shù)據(jù)項(xiàng)
——2应狱、restfull接口的查詢、批量查詢祠丝、聚合查詢疾呻、復(fù)合查詢、過(guò)濾查詢
——3写半、python的客戶端sdk 對(duì)數(shù)據(jù)條目的增岸蜗、刪、改叠蝇、查
=== 4璃岳、kibana的可視化數(shù)據(jù)
——1、kibana的功能簡(jiǎn)介
——2悔捶、kibana的索引管理和數(shù)據(jù)查詢
——3铃慷、kibana添加餅圖、柱狀圖蜕该、折線圖并選取數(shù)據(jù)
——4犁柜、kibana在dashboard中展示可視化統(tǒng)計(jì)數(shù)據(jù)
1、什么是elasticsearch
1堂淡、搜索引擎干了什么
思考一下:
(1)百度搜索赁温、谷歌搜索、必應(yīng)搜索淤齐,是怎么通過(guò)我們輸入的關(guān)鍵詞找到相關(guān)的文字鏈接的呢 股囊?
(2) 搜索引擎怎么知道哪些文章里有我想要的信息?
(3) 搜索引擎怎么去找到的這些文章更啄?
(4) 搜索引擎怎么在那么短(毫秒級(jí))時(shí)間內(nèi)檢索那么多文章稚疹?
我們不去做搜索引擎,也不必詳細(xì)知道百度內(nèi)部是什么架構(gòu),用的什么核心技術(shù)内狗。但是我們可以通過(guò)相關(guān)知識(shí)的探索大致知道怪嫌,搜索引擎實(shí)現(xiàn)的邏輯是怎么樣的,以百度為例:
首先柳沙,當(dāng)有新的網(wǎng)頁(yè)岩灭、博客、帖子被提交發(fā)布赂鲤,百度的爬蟲(chóng)服務(wù)器就把這些新的網(wǎng)頁(yè)信息下載到百度的云主機(jī)上噪径,這個(gè)動(dòng)作也可能是定期的,保障搜索的最新內(nèi)容数初。
然后找爱,下載下來(lái)的網(wǎng)頁(yè)內(nèi)容,根據(jù)標(biāo)題泡孩、主體內(nèi)容等文本信息车摄,提取分詞、關(guān)鍵詞仑鸥。并通過(guò)建立類似數(shù)據(jù)庫(kù)索引的方式吮播,提高這些關(guān)鍵詞的搜索效率。
最后眼俊,當(dāng)你在網(wǎng)頁(yè)輸入 要查找的關(guān)鍵詞意狠,百度的搜索服務(wù)器會(huì)根據(jù)關(guān)鍵詞檢索,所有有關(guān)的文檔泵琳,根據(jù)關(guān)鍵詞出現(xiàn)的頻率摄职、關(guān)鍵詞相似程度,給出排序后的文檔鏈接获列。
當(dāng)然谷市,百度也就可以修改排序置頂?shù)捻樞騺?lái)達(dá)到廣告植入的收益。
那么击孩,里面涉及到的幾個(gè)關(guān)鍵的地方:第一迫悠,定期爬取全網(wǎng)修改或者新發(fā)的文檔;第二巩梢,文檔內(nèi)容分詞和關(guān)鍵詞建立高速索引创泄;第三,通過(guò)關(guān)鍵詞查詢索引括蝠。
2鞠抑、elasticsearch 如何提供搜索服務(wù)
elasticsearch 的設(shè)計(jì)初始 根據(jù)搜索引擎lucence,據(jù)說(shuō)是一個(gè)外國(guó)佬為老婆簡(jiǎn)化查找菜譜做的(映像野史)忌警。
elasticsearch的內(nèi)部搁拙,也有分詞器,插件化的,有語(yǔ)法分詞器箕速、中文分詞器酪碘、特定語(yǔ)義分詞器等等,靈活的保留了文檔的關(guān)鍵字的意義盐茎。
elasticsearch的內(nèi)部兴垦,也有索引,類似于mysql的表結(jié)構(gòu)字柠,有索引名稱探越、索引類型、索引字段及類型募谎,也可以通過(guò)gmapping設(shè)定將某個(gè)值映射為某個(gè)類型扶关。
elasticsearch的內(nèi)部阴汇,有索引倒排数冬。大概就是說(shuō) 哪個(gè)條目有哪些索引,搜索的時(shí)候比重多少搀庶,主要是在對(duì)索引名稱查找到數(shù)據(jù)之后拐纱,根據(jù)各個(gè)字段來(lái)聚合或者過(guò)濾,具體不再展開(kāi)哥倔。
3秸架、elasticsearch 中的restful接口、索引咆蒿、分詞器东抹、類型mapping
滿足restful的接口規(guī)范,使用 put沃测、get缭黔、post、delete發(fā)送json格式的請(qǐng)求蒂破,并得到j(luò)son的響應(yīng)馏谨。
可以通過(guò)restful的接口,設(shè)置索引附迷,然后添加條目惧互。(可以理解創(chuàng)建表、插入表數(shù)據(jù)項(xiàng))
也有一個(gè)修改喇伯、刪除的接口喊儡。但不是我們關(guān)心的重點(diǎn),生產(chǎn)環(huán)境大多數(shù)不會(huì)去把他僅僅當(dāng)做數(shù)據(jù)庫(kù)使用稻据,那樣干嘛不直接選擇關(guān)系型數(shù)據(jù)庫(kù)或者k-v數(shù)據(jù)庫(kù)艾猜。
生產(chǎn)環(huán)境中,大家更加在意的是,elasticsearch集成了大規(guī)模數(shù)據(jù)存儲(chǔ)(分布式的)箩朴,索引查詢岗喉,kibana的可視化數(shù)據(jù)統(tǒng)計(jì)的功能。能夠很少工作量的情況下炸庞,拿到直觀的統(tǒng)計(jì)圖表信息钱床。
舉幾個(gè)例子:
淘寶網(wǎng)希望看看,全國(guó)在線銷售蘋果的銷量在各個(gè)地區(qū)的分別情況埠居,那么kibana的熱力圖可以直觀查看查牌。
淘寶網(wǎng)希望看看,近半年來(lái)蘋果手機(jī)在線成交情況的按半月統(tǒng)計(jì)的數(shù)據(jù)滥壕,那么kibana的柱狀圖能直接查詢到纸颜。
這些,只需要在產(chǎn)生數(shù)據(jù)的源頭绎橘,往elastic插入信息條目胁孙,然后通過(guò)查詢索引獲得圖表。
傳統(tǒng)的數(shù)據(jù)庫(kù)称鳞,需要建立復(fù)雜的關(guān)系表系統(tǒng)存儲(chǔ)數(shù)據(jù)涮较,查詢結(jié)果再單獨(dú)做一個(gè)chart的頁(yè)面來(lái)展示,費(fèi)時(shí)費(fèi)力冈止。
2狂票、索引的操作
https://www.elastic.co/guide/en/kibana/7.6/managing-indices.html
https://www.elastic.co/guide/en/elasticsearch/reference/7.6/indices.html
(版本差異很大,確定好自己用到版本再看api)
以下操作建議多在kibana的tools里面完成熙暴,或者postman闺属。
1、創(chuàng)建周霉、刪除索引
// 一般創(chuàng)建索引會(huì)指定 分片和副本數(shù)量掂器, 以及數(shù)據(jù)條目中字段的類型、分詞方式
PUT /my_index_name
{
settings:
{
"number_of_shards":3, // 分片
"number_of_replicas":0, // 副本
},
mappings:
{
“index_type1”:{"properties":{...}}
“index_type2”:{"properties":{...}}
}
}
GET /my_index_name/_settings // 查詢索引配置
GET _all/_settings // 查詢所有索引配置
DELETE /my_index_name // 刪除索引, 類似于刪除表(表項(xiàng)都會(huì)丟)
2诗眨、索引對(duì)數(shù)據(jù)項(xiàng)的字段類型mapping
主要是在指定條目的字段類型唉匾,默認(rèn)情況下,數(shù)字是long匠楚,帶小數(shù)是double巍膘,除了date外,其他的都是string芋簿。
其中string 分為text 和keyword 峡懈。區(qū)別在于 text 會(huì)被分詞,keyword 不會(huì)分詞与斤。影響檢索時(shí)的最小詞粒度肪康。
還有一些其他的mapping配置項(xiàng)荚恶,store選項(xiàng)、分詞器類型磷支、boost字段分?jǐn)?shù)加權(quán)谒撼、ignore_above超長(zhǎng)文本忽略分詞和索引、index可否索引選擇項(xiàng)等等雾狈。
進(jìn)階項(xiàng)為動(dòng)態(tài)mapping廓潜,此處不做展開(kāi)。我也不會(huì)善榛。
一個(gè)比較簡(jiǎn)單的例子辩蛋, ik中文分詞器的設(shè)置(ik_smart 分詞少,ik_max_word分詞多)移盆,keword和text的區(qū)別悼院,嵌套o(hù)bject的數(shù)據(jù)類型,日期的格式format
PUT books
{
"mappings": {
"properties":{
"title":{
"type":"text",
"analyzer": "ik_max_word"
},
"price":{
"type":"integer"
},
"addr":{
"type":"keyword"
},
"company":{
"properties":{
"name":{"type":"text"},
"company_addr":{"type":"text"},
"employee_count":{"type":"integer"}
}
},
"publish_date":{"type":"date","format":"yyy-MM-dd"}
}
}
}
直接插入咒循, 會(huì)自動(dòng)創(chuàng)建的mapping, 但是非常不推薦這樣做
PUT /lib/person/1
{
''name'':"tom",
"age":25,
"address":{
"country":"china",
"city":"wuhan"
}
} // 直接插入据途, 會(huì)自動(dòng)創(chuàng)建的mapping
GET /lib/persion/_mapping // 查詢索引的mapping
// 手動(dòng)創(chuàng)建mapping ,主要是date類型剑鞍, string的text昨凡,keyword區(qū)別
// 可以 根據(jù)查詢出來(lái)的mapping 拷貝出來(lái)爽醋,修改指定的字段類型
“properties”:{
"title":{"type":"text"},
"name":{"type":"text", "analyzer":"standard"}, // 標(biāo)準(zhǔn)分詞器
"date":{"type":"date", "index":false}, // 不會(huì)被索引蚁署, 默認(rèn)每個(gè)字段都會(huì)建立倒排索引。
}
3蚂四、在kibana中查看和管理索引
https://www.elastic.co/guide/en/kibana/7.6/managing-indices.html
kibana中的索引有索引模板光戈、索引的配置settings,索引的類型映射遂赠,索引的狀態(tài)和統(tǒng)計(jì)久妆。
提供了索引管理的API 和 索引模板的API,此處不再綴述跷睦。
3筷弦、數(shù)據(jù)的操作
1、restfull接口的插入抑诸、刪除數(shù)據(jù)項(xiàng)
PUT /my_index_name/my_index_type/index_id
{
} // 指定 _id 的情況下烂琴,用put是插入 ,或者覆蓋更新
POST /my_index_name/my_index_type
{
} // 不指定ID的情況下蜕乡,使用post插入奸绷,由es自動(dòng)生生成_id
GET /my_index_name/my_index_type/index_id // 已知id查詢
POST /my_index_name/my_index_type/index_id/_update
{
}// 對(duì)指定字段的更新
DELETE /my_index_name/my_index_type/index_id // 僅僅刪除已知id的條目
2、restfull接口的查詢层玲、批量查詢号醉、聚合查詢反症、復(fù)合查詢、過(guò)濾查詢
查詢操作是最核心的部分畔派,實(shí)際應(yīng)用中更新和刪除操作很少铅碍,主要就是插入大量數(shù)據(jù)后,做查詢和展示线椰。
// 基本查詢
// 索引和類型映射說(shuō)明
PUT /lib/user/2
{
"name":"zhangsan",
"age":24,
"birthday":"1998-12-12"
"interests":"guitar,baskitball,haking"
}
// query查詢(基本查詢)
GET /lib/user/_search?q+name:zhangsan
GET /lib/user/_search?+interests:guitar&sort=age:desc // 愛(ài)好有g(shù)uitar 该酗,按照age排序
// term terms 查詢, 不知道分詞器
GET /lib/user/_search {“query”:{"term":{"name":"zhangsan"}}}
GET /lib/user/_search {“query”:{"terms":{"interests":["guitar","haking"]}}}
// match match_phrase match_phrase_pretix查詢, 知道分詞器
GET /lib/user/_search {“query”:{"match":{"name":"zhangsan lisi"}}} // 會(huì)查出名字包含zhangsan 或者lisi的士嚎, 使用term/terms 查不到內(nèi)容
GET /lib/user/_search {"query":{"match_all":{}}} // 查詢所有記錄
GET /lib/user/_search {
“_source”:["name", "address"]呜魄, // 查詢結(jié)果帶哪些字段, 也可用 include exclude 控制。
"query":{"match_all":{}}莱衩,
"range":{"age":{"from":20, "to":25}}, // 查詢范圍
“sort”:{"age":{"order":"desc"}}, // 查詢結(jié)果根據(jù)字段排序
} // 查詢所有記錄
// 模糊查詢 通配符 fuzzy wildcard
.... 找些例子
// filter 過(guò)濾查詢
// filter 查詢不計(jì)算相關(guān)性爵嗅, 速度快于query。
1笨蚁、簡(jiǎn)單過(guò)濾查詢
2睹晒、bool過(guò)濾查詢、嵌套bool過(guò)濾
// 聚合查詢括细, 求平均值伪很、最大值、最小值奋单、sum锉试、count
GET /lib/iterms/_search
{
"eggs":{
"price_of_sum":{"sum":{"field":"price"}}
}
}
// 復(fù)合查詢
不例舉了,麻煩
3览濒、python的客戶端sdk 對(duì)數(shù)據(jù)條目的增呆盖、刪、改贷笛、查
pip install elasticsearch
import elasticsearch
...
4应又、kibana的可視化數(shù)據(jù)
1、kibana的功能簡(jiǎn)介
kibana 可以理解為 es的客戶端乏苦,es提供存儲(chǔ)和高效檢索數(shù)據(jù)的服務(wù)株扛,kibana將es的服務(wù)功能和配置可視化。
kibana 可以可視化配置索引:索引的mapping汇荐、setting洞就,可以查看索引的狀態(tài)和統(tǒng)計(jì)。
kibana 可以查詢數(shù)據(jù)拢驾,query查詢奖磁、filter查詢、聚合查詢等繁疤,tools工具欄能干幾乎所有restful接口的事情
kibana 可以可視化數(shù)據(jù)咖为, 將查詢的結(jié)果用圖標(biāo)展示秕狰,自定義dashboard顯示。
附加的其他功能躁染,大數(shù)據(jù)分析和集成了深度學(xué)習(xí)鸣哀,集成了監(jiān)控和告警,各種格式的生產(chǎn)日志的采集吞彤。還有些像APM我衬、SIEM一堆看似...看都不想看的功能(我理解不把東西做到平民化就是設(shè)計(jì)的根本缺陷,這個(gè)功能就廢了)
2饰恕、kibana的索引管理和數(shù)據(jù)查詢
3挠羔、kibana添加餅圖、柱狀圖埋嵌、折線圖并選取數(shù)據(jù)
查看官網(wǎng)教程
4破加、kibana在dashboard中展示可視化統(tǒng)計(jì)數(shù)據(jù)
查看官網(wǎng)教程