Search - 一文入門ElasticSearch(節(jié)點(diǎn)、分片、CRUD、倒排索引、分詞)
ElasticSearch
ElasticSearch是非常重要的檢索工具,利用分詞、索引(倒排索引)、分詞從眾多檢索工具中脫穎而出,本章是入門基礎(chǔ)學(xué)習(xí)篇內(nèi)容。
(資料圖片)
基本概念:索引、文檔和REST Api
ElasticSearch是面向文檔的,文檔是所有可搜索數(shù)據(jù)的最小單位日志文件中的日志項(xiàng)一本電影的具體信息 / 一張唱片的詳細(xì)信息Mp3播放器的一首歌 / 一篇PDF文檔中的具體內(nèi)容文檔會(huì)被序列化成Josn格式,保存在ElasticSearch中Json對(duì)象由字段組成每個(gè)字段都有對(duì)應(yīng)的字段類型(字符串/數(shù)值/布爾/日期/二進(jìn)制/范圍類型)每個(gè)文檔都有一個(gè)UniqueID你可以自己指定ID或者通過ElasticSearch自動(dòng)生成Json文檔
一篇文檔包含了一系列的字段Json文檔,格式靈活,不需要預(yù)先定義格式字段的類型可以指定或通過ElasticSearch自動(dòng)推算支持?jǐn)?shù)組、支持嵌套文檔的元數(shù)據(jù)
{ "_index" : ".kibana_1", "_type" : "_doc", "_id" : "space:default", "_score" : 1.0, "_source" : { "space" : { "name" : "默認(rèn)值", "description" : "這是您的默認(rèn)空間!", "color" : "#00bfb3", "_reserved" : true }, "type" : "space", "references" : [ ], "updated_at" : "2022-05-13T09:16:16.465Z" }}
元數(shù)據(jù),用于標(biāo)注文檔的相關(guān)信息_index : 文檔所屬的索引名_type : 文檔所屬的類型名_id : 文檔唯一ID_source : 文檔的原始Json數(shù)據(jù)_version : 文檔的版本信息_score : 相關(guān)性打分索引
index :索引是文檔的容器,是一類文檔的結(jié)合index體現(xiàn)了邏輯空間的概念,每個(gè)索引都有自己的Mapping定義,用于定義包含的文檔的字段名和字段類型Shard 體現(xiàn)了物理空間的概念,索引中的數(shù)據(jù)分散在Shard上索引的Mapping與SettingsMapping定義文檔的字段類型Setting定義不同的數(shù)據(jù)分布//查看索引相關(guān)信息GET kibana_sample_data_ecommerce//查看索引的文檔總數(shù)GET kibana_sample_data_ecommerce/_count//查看前10條文檔,了解文檔格式POST kibana_sample_data_ecommerce/_search{}//_cat indices API//查看indicesGET /_cat/indices/kibana*?v&s=index//查看狀態(tài)為綠的索引GET /_cat/indices?v&health=green//按照文檔個(gè)數(shù)排序GET /_cat/indices?v&s=docs.count:desc//查看具體的字段GET /_cat/indices/kibana*?pri&v&h=health,index,pri,rep,docs.count,mt//How much memory is used per index?GET /_cat/indices?v&h=i,tm&s=tm:desc
分布式系統(tǒng)的可用性和擴(kuò)展性
高可用性服務(wù)可用性 :允許有節(jié)點(diǎn)停止服務(wù)數(shù)據(jù)可用性 :部分節(jié)點(diǎn)丟失,不會(huì)丟失數(shù)據(jù)可擴(kuò)展性請(qǐng)求量提升 / 數(shù)據(jù)的不斷增長(將數(shù)據(jù)分布都所有接點(diǎn)上)分布式特性
elasticsearch的分布式架構(gòu)的好處存儲(chǔ)的水平擴(kuò)容提高系統(tǒng)的可用性,部分節(jié)點(diǎn)停止服務(wù),整個(gè)集群的服務(wù)不受影響elasticsearch的分布式架構(gòu)不同的集群通過不同的名字來區(qū)分,默認(rèn)名字"elasticsearch"通過配置文件修改,或者在命令行中-E cluster.name=stark
進(jìn)行設(shè)定一個(gè)集群可以有一個(gè)或多個(gè)節(jié)點(diǎn)節(jié)點(diǎn)
節(jié)點(diǎn)是elasticsearch的實(shí)例本質(zhì)上就是一個(gè)Java進(jìn)程一臺(tái)機(jī)器上可以運(yùn)行多個(gè)elasticsearch進(jìn)程,但是生產(chǎn)環(huán)境一般建議一臺(tái)機(jī)器上只運(yùn)行一個(gè)elasticsearch實(shí)例每一個(gè)節(jié)點(diǎn)都有名字,通過配置文件配置,或者啟動(dòng)的時(shí)候-E node.name=node1指定
每一個(gè)節(jié)點(diǎn)在啟動(dòng)之后,會(huì)分配一個(gè)UID,保存在data目錄下分片
主分片,用以解決數(shù)據(jù)水平擴(kuò)展的問題。通過主分片,可以將數(shù)據(jù)分布到集群內(nèi)的所有節(jié)點(diǎn)之上一個(gè)分片是一個(gè)運(yùn)行的Lucene的實(shí)例主分片數(shù)在索引創(chuàng)建時(shí)指定,后續(xù)不允許修改,除非Reindex副本 ,用以解決數(shù)據(jù)高可用的問題,分片是主分片的拷貝副本分片數(shù),可以動(dòng)態(tài)調(diào)整增加副本數(shù),還可以在一定程度上提高服務(wù)的可用性{ "settings": { "number_of_shards": 1, "number_of_replicas": 1 }}
查看集群的健康狀況
Green - 主分片與副本都正常分配Yellow - 主分片全部正常分配,有副本分片未能正常分片Red - 有主分片未能分配CRUD
1.使用PostMan創(chuàng)建一個(gè)名字叫stark的索引
http://127.0.0.1:9200/stark?pretty// 返回值{ "acknowledged": true, "shards_acknowledged": true, "index": "stark"}
文檔的CRUD
Type名,約定都用_docCreate ,如果ID已經(jīng)存在,會(huì)失敗Index ,如果ID不存在,創(chuàng)建新的文檔。否則先刪除現(xiàn)有文檔,再創(chuàng)建新的文檔,版本會(huì)增加。Update ,文檔必須已經(jīng)存在,更新只會(huì)對(duì)相應(yīng)字段做增量修改。Create 一個(gè)文檔
支持自動(dòng)生成文檔ID和指定文檔ID兩種方式:
使用POST /indexName/_doc
,系統(tǒng)會(huì)自動(dòng)生成Document ID使用PUT /indexName/_create/ID
創(chuàng)建時(shí),URI中顯示指定_create
,此時(shí)如果該ID的文檔已經(jīng)存在,操作失敗GET 一個(gè)文檔
GET http://127.0.0.1:9200/IndexName/_doc/ID
Index 文檔
PUT IndexName/_doc/1{ "tags":["name","age","sex"]}
Index和Create不一樣的地方:如果文檔存在,就索引新的文檔。否則現(xiàn)有文檔會(huì)被刪除,新的文檔被索引,版本信息(Version) + 1。
Update 文檔
Update方法不會(huì)刪除原來的文檔,而是實(shí)現(xiàn)真正的數(shù)據(jù)更新,POST方法 ,Payload需要包含在doc中。
POST IndexNmae/_update/1{ "doc":{ "albums":["aaa","bbb"] }}
刪除文檔
DELETE IndexName/_doc/ID
Bulk API / 批量讀取 mGet / 批量查詢 msearch
Bulk Api 支持在一次Api調(diào)用中,對(duì)不同的索引進(jìn)行操作,支持四種類型操作,Index\Create\Update\Delete。
可以在URI中指定Index,也可以在請(qǐng)求的Payload中進(jìn)行,操作單挑操作失敗,并不影響其他操作,返回結(jié)果包括了每一條操作執(zhí)行的結(jié)果。
//對(duì)同一個(gè)索引進(jìn)行操作POST /IndexName/_doc/_bulk //對(duì)不同的索引進(jìn)行操作POST _bulk{ "index" : { "_index" : "test", "_id" : "1" } }{ "field1" : "value1" }{ "delete" : { "_index" : "test", "_id" : "2" } }{ "create" : { "_index" : "test2", "_id" : "3" } }{ "field1" : "value3" }{ "update" : {"_id" : "1", "_index" : "test"} }{ "doc" : {"field2" : "value2"} }
mGet批量操作,可以減少網(wǎng)絡(luò)鏈接所產(chǎn)生的開銷,提高性能。
#URI中指定indexGET /IndxName/_mget{ "docs" : [ { "_id" : "1" }, { "_id" : "2" } ]}//對(duì)不同的索引進(jìn)行操作GET /_mget{ "docs" : [ { "_index" : "test", "_id" : "1" }, { "_index" : "test", "_id" : "2" } ]}
批量查詢 msearch
// msearch 操作POST kibana_sample_data_ecommerce/_msearch{"query" : {"match_all" : {}},"size":1}{"index" : "kibana_sample_data_flights"}{"query" : {"match_all" : {}},"size":2}
倒排索引
倒排索引的核心組成
倒排索引包含兩個(gè)部分單詞詞典,記錄所有文檔的單詞,記錄單詞到倒排列表的關(guān)聯(lián)關(guān)系單詞詞典一般比較大,可以通過B+樹或哈希拉鏈法實(shí)現(xiàn),以滿足高性能的插入和查詢倒排列表,記錄了單詞對(duì)應(yīng)的文檔結(jié)合,由倒排索引組成倒排索引項(xiàng)文檔ID詞頻TF - 該單詞在文檔中出現(xiàn)的次數(shù),用于相關(guān)性評(píng)分位置,單詞在文檔中分詞的位置,用于語句搜索偏移,記錄單詞的開始結(jié)束位置,實(shí)現(xiàn)高亮顯示Es的倒排索引
Es的Json文檔中的每個(gè)字段,都有自己的倒排索引可以指定對(duì)某些字段不做索引優(yōu)點(diǎn):節(jié)省存儲(chǔ)空間缺點(diǎn):字段無法被搜索Analysis 與 Analyzer
Analysis,文本分析是把全文本轉(zhuǎn)換成一系列單詞(term / token)的過程,也叫分詞。Analysis 是通過 Analyzer 來實(shí)現(xiàn)的,可使用elasticsearch內(nèi)置的分析器 / 或者按需定制化分析器。除了在數(shù)據(jù)寫入時(shí)轉(zhuǎn)換詞條,匹配Query語句時(shí)候也需要用相同的分析器對(duì)查詢進(jìn)行查詢語句進(jìn)行分析。Analyzer的組成
分詞器是專門處理分詞的組件,Analyzer由三部分組成:① 針對(duì)原始文本處理,例如去除html② 按照規(guī)則切分單詞③ 將切分的單詞進(jìn)行加工,小寫,刪除stopworlds,增加同義詞Search Api
URI Search ,在URL中使用查詢參數(shù)Request Body Search ,使用es提供的,基于Json格式的更加完備的Query Domain Specific Language(DSL)1.指定查詢的索引
集群上所有的索引:
GET /_search //集群上所有的索引GET /Index1/_search //index1GET /Index1,Index2/_search //index1和index2GET /index*/_search //以index開頭的索引
2.URI查詢
使用"q",指定字符串查詢"query string syntax",KV鍵值對(duì)用q表示查詢內(nèi)容,搜索叫做stark的客戶GET /IndexName/_search?q=keyName:stark
3.Request Body
Request Body 支持 POST/GET兩種方法,-H代表的是header參數(shù) -d 代表的是body的請(qǐng)求參數(shù)。
curl -XGET "http://127.0.0.1:9200/IndexName/_search"-H "Content-Type:application/json" -d"{ "query":{ "match_all":{} } }"
4.搜索Response
搜索Response有幾個(gè)關(guān)鍵的描述需要在這里解釋一下:
took: 花費(fèi)的時(shí)間total: 符合條件的總文檔數(shù)hits:結(jié)果集,默認(rèn)前10個(gè)文檔_index:索引名_id:文檔的ID_score: 相關(guān)度評(píng)分_source:文檔原始信息URI Search詳解
指定字段查詢 Vs 泛查詢
q是關(guān)鍵字,df是指定字段,泛查詢就是查詢所有字段中包含關(guān)鍵字的結(jié)果
//指定字段GET /IndexName/_search?q=2020&df=titleGET /IndexName/_search?q=title:2020{ "profile":"true"}//泛查詢GET /IndexName/_search?q=2020{ "profile":"true"}
Term Vs Phrase
Hello World 等效于 Hello Or World "Hello World",等效于Hello AND World 。Phrase查詢,還要求前后順序保持一致分組和引號(hào)title:(Hello AND World) title = "Hello World"//分組,Bool查詢GET /IndexName/_search?q=title:(Hello World){ "profile":"true"}//泛查詢GET /IndexName/_search?q=title:Hello World{ "profile":"true"}
布爾操作 、分組
布爾操作AND / OR / NOT 或者 && / || / !必須大寫title:(Hello NOT World)分組表示 must表示 must_nottitle:(+Hello -World)//檢索title里有Hello ,沒有World的詞條GET /IndexName/_search?q=title:(Hello NOT World){ "profile":"true"}//檢索title里必須有Hello ,必須沒有World的詞條GET /IndexName/_search?q=title:(+Hello -World){ "profile":"true"}
范圍查詢 、算術(shù)符號(hào)
URI Search支持范圍查詢和算術(shù)符號(hào)查詢。
范圍查詢區(qū)間表示:[]閉區(qū)間,{}開區(qū)間year:{2019 TO 2020}year:* TO 2020算數(shù)符號(hào)year:> 2020year:(>2010 && < 2020)year:(+>2010 && +< 2020)GET /IndexName/_search?q=year:>2020{ "profile":"true"}
通配符查詢 、正則表達(dá)式 、模糊匹配與近似查詢
通配符查詢 、正則表達(dá)式 、模糊匹配與近似查詢效率低,占用內(nèi)存大,不建議使用,這部分大家有個(gè)了解就好。
關(guān)鍵詞:
上一篇:熱點(diǎn)聚焦:德丸元一
下一篇:最后一頁
文章推薦
上海游戲產(chǎn)業(yè)發(fā)展 元宇宙成為下一個(gè)關(guān)注重點(diǎn)
-
-
據(jù)最新發(fā)布的《2021—2022上海游戲出版產(chǎn)業(yè)報(bào)告》(以下簡(jiǎn)稱《報(bào)告》)顯示:2021年上海網(wǎng)絡(luò)游戲企業(yè)實(shí)現(xiàn)銷售收入1250 3億元,同比增長3 6%,
文匯報(bào) 2022-09-16
銳龍7000系列首發(fā)陣容曝光:核心數(shù)不變 功耗翻倍
-
-
不出意外的話,AMD將于本月底正式宣布Zen4架構(gòu)的銳龍7000系列處理器,9月15日上市開賣,搶先Intel 13代酷睿一步。今天,銳龍7000系列的首
快科技 2022-08-05
賞傳統(tǒng)年俗逛非遺廟會(huì) 銅官窯古鎮(zhèn)重溫傳統(tǒng)民俗年
-
-
中新網(wǎng)長沙2月6日電 (潘杏瓊)在多地倡導(dǎo)就地過年的環(huán)境下,位于長沙市城北的銅官窯古鎮(zhèn)景區(qū),從1月24日至2月15日舉行中國年·湖湘味·銅官
中新網(wǎng) 2022-02-07
哈爾濱鐵路迎節(jié)后返程高峰 推出復(fù)工專列服務(wù)
-
-
中新網(wǎng)哈爾濱2月6日電 (周曉舟 記者 史軼夫)中國鐵路哈爾濱局有限公司6日發(fā)布消息,哈爾濱鐵路迎來春節(jié)后返程客流高峰,6日至7日預(yù)
中新網(wǎng) 2022-02-07
冬奧動(dòng)車組設(shè)5G超高清演播室 “瑞雪迎春”號(hào)智能化人性化結(jié)合
-
-
中新網(wǎng)北京2月6日電 (記者 劉文曦)在時(shí)速350公里的高鐵列車上首設(shè)5G超高清演播室,為北京冬奧會(huì)量身定制的新型奧運(yùn)版智能復(fù)興號(hào)動(dòng)車組瑞
中新網(wǎng) 2022-02-07
廣告
X 關(guān)閉
- 大山深處的書香春節(jié)
- 天津:男子涂改核酸證明進(jìn)火車站被拘留
- 守護(hù)中國唯一國境“騎馬線”的“護(hù)路人”:保證中歐班列冬季運(yùn)輸安全
- 降雪致青海多條高速實(shí)行交通管制
- 廣州番禺部分區(qū)域被劃定為疫情防控管理區(qū)
- 新華全媒+|春節(jié)假期返程,請(qǐng)收下安全行車知識(shí)點(diǎn)!
- 錯(cuò)峰有序、防疫有力,暢通“最后一公里”——春運(yùn)返程交通運(yùn)輸疫情防控有保障
- 以“青春”之名——“疫”線志愿者的春節(jié)堅(jiān)守
- 暴雪來襲,@返程的你,請(qǐng)注意?。?/a>
- 【挑戰(zhàn)365天正能量速寫畫】第068期:高空巡線女漢子守護(hù)萬家燈火
- 【新春走基層】青海戈壁深處的小站
- 浙西深處的建設(shè)者:變“團(tuán)圓”為“堅(jiān)守” 他鄉(xiāng)亦故鄉(xiāng)
- 昔日“白頭山”今朝“綠巨人”:浙江長興礦業(yè)轉(zhuǎn)型記
- 杭州富陽今日16時(shí)起解除部分交通管制措施
- 廣州番禺報(bào)告一例新冠病毒核酸陽性病例
- 惠東教師志愿者投身抗疫一線 助力核酸檢測(cè)
- “北冰南展”:大別山里熱“雪”燃冬
- 大興安嶺塔河縣:狍子闖居民院“拜年” 民警送歸山林
- 春節(jié)海南“西游記”:賞木棉、探巖洞、觀日出
- 西南地區(qū)開行首趟定制務(wù)工人員返程專列
- 廣州即日起暫停往來廣西百色公路客運(yùn)班線
- 夜“聽”張家口:“說學(xué)逗唱”講述冬奧故事
X 關(guān)閉
-
-
Search - 一文入門ElasticSearch(節(jié)點(diǎn)、分片、CRUD、倒排索引、分詞)
ElasticSearch是非常重要的檢索工具,利用分詞、索引(倒排索引)、分詞從眾多檢索工具中脫穎而出,本章是入門基礎(chǔ)學(xué)習(xí)篇內(nèi)容。
-
-
熱點(diǎn)聚焦:德丸元一
1、德丸元一,《TOKYOMER~移動(dòng)緊急救命室~》中的角色,由佐野勇斗飾演。2、。本文到此分享完畢,希望對(duì)大家有
-
-
做言傳與身教的“師范”
良師小傳崔維友,中學(xué)正高級(jí)教師,山東省特級(jí)教師,現(xiàn)任山東省日照市莒縣教育教學(xué)研究中心黨總支書記、主任。在中學(xué)教學(xué)一線工
-
-
天天觀天下!久日新材變更投資項(xiàng)目 增加光固化產(chǎn)品競(jìng)爭(zhēng)力
伴隨國內(nèi)外宏觀政策及行業(yè)趨勢(shì)變化,久日新材(688199)及時(shí)調(diào)整了經(jīng)營策略,對(duì)旗下產(chǎn)能投資項(xiàng)目進(jìn)行了大舉調(diào)整,以期增加光固化產(chǎn)品競(jìng)爭(zhēng)力。3月
- 1、秦嶺深山守護(hù)大熊貓三十載:從“偶遇”到“定期相遇” 大熊貓“家園”越來越好
- 2、廣東惠州仲愷全力保障僑民與當(dāng)?shù)厝罕娚钗镔Y供應(yīng)
- 3、浙江多個(gè)重點(diǎn)交通項(xiàng)目建設(shè)春節(jié)不停工 協(xié)同蓄力奔共富
- 4、北京新增2例本土確診病例均來自管控人員 疫情防控形勢(shì)趨于穩(wěn)定
- 5、福建項(xiàng)目建設(shè)春節(jié)“不打烊” 力爭(zhēng)首季度“開門紅”
- 6、北京新增2例本土確診病例 市衛(wèi)健委發(fā)布節(jié)后健康防護(hù)提示
- 7、春節(jié)不停工 海南持續(xù)推進(jìn)重大水利項(xiàng)目建設(shè)
- 8、浙江船長沈華忠的新春期許:愿風(fēng)調(diào)雨順漁民滿載而歸
- 9、一個(gè)月走壞兩雙鞋的貨檢“老哨兵”
- 10、陜西本輪本土確診病例清零