Elasticsearch索引庫(kù)和文檔的相關(guān)操作詳細(xì)指南
前言:
最近一直在復(fù)習(xí)Elasticsearch相關(guān)的知識(shí),公司搜索相關(guān)的技術(shù)用到了這個(gè),用公司電腦配了環(huán)境,借鑒網(wǎng)上的課程進(jìn)行了總結(jié)。希望能夠加深自己的印象以及幫助到其他的小伙伴兒們????。
mapping映射屬性
前面說(shuō)到,Mapping映射是索引中對(duì)文檔的約束,類(lèi)似于數(shù)據(jù)庫(kù)表中對(duì)字段的約束。那么mapping都有哪些常見(jiàn)的屬性呢:
type:type屬性是用來(lái)定義字段數(shù)據(jù)類(lèi)型結(jié)構(gòu)的,常見(jiàn)的簡(jiǎn)單類(lèi)型有:
- 字符串:text(可以分詞的文本),keyword(精確值,不可分詞)
- 數(shù)值:byte,short,integer,long,float,double
- 布爾型:boolean
- 日期型:date
- 對(duì)象型:object
index:用來(lái)說(shuō)明是否創(chuàng)建索引,不設(shè)置時(shí)默認(rèn)為true(創(chuàng)建索引)
analyzer:使用哪種分詞器,ik_smart(最少切分,粗粒度),ik_max_word(最細(xì)切分,細(xì)粒度)
properties:字段中的子字
操作索引庫(kù)
操作索引庫(kù)和操作文檔的命令略微簡(jiǎn)單一些,以下簡(jiǎn)單做個(gè)概述吧。
創(chuàng)建索引庫(kù)
在我們學(xué)習(xí)ssm框架的時(shí)候,用到了restful請(qǐng)求風(fēng)格,在es中,也是通過(guò)restful請(qǐng)求來(lái)操作索引庫(kù)和文檔的。請(qǐng)求的內(nèi)容用DSL語(yǔ)句表示,創(chuàng)建索引庫(kù)的DSL語(yǔ)句如下:
由上可以看到,當(dāng)type類(lèi)型為"text"時(shí),才能設(shè)置分詞器類(lèi)型,當(dāng)字段類(lèi)型為“keyword”時(shí),不會(huì)設(shè)置。在字段的內(nèi)部可以有子字段的。
舉個(gè)栗子,我們對(duì)下面栗子編寫(xiě)DSL語(yǔ)句:
{ “info”: “小威要向諸佬學(xué)習(xí)”, “email”: “xiaoweibest.cn” “name”:{ “firstname”: “小”, “l(fā)astname”: “威” } }
分析:info中的內(nèi)容是需要分詞的,email中的內(nèi)容不需要,name中同時(shí)又有兩個(gè)子屬性:
PUT /xiaowei { "mappings":{ "properties":{ "info": { "type": "text", "analyzer": "ik_smart" }, "email": { "type": "keyword", "index": false }, "name": { "type": "object", "properties": { "firstname": { "type": "keyword" }, "lastname": { "type": "keyword" } } } } } }
運(yùn)行即可創(chuàng)建索引庫(kù):
查詢(xún),刪除索引庫(kù)
查看索引庫(kù)僅需要通過(guò)簡(jiǎn)單的Get命令,后面跟要查詢(xún)的索引庫(kù)名稱(chēng)即可,即Get 索引庫(kù)名。以剛創(chuàng)建的索引庫(kù)為例:
# 查看數(shù)據(jù)庫(kù) GET /xiaowei
想必很容易猜的出刪除索引庫(kù)的命令,佬想對(duì)了,刪除索引庫(kù)命令就是DELETE 索引庫(kù)名稱(chēng),即:
# 刪除索引庫(kù) DELETE /xiaowei
修改索引庫(kù)
在es中,索引庫(kù)和mapping映射創(chuàng)建后無(wú)法對(duì)其進(jìn)行修改,因?yàn)閯?chuàng)建后,es會(huì)根據(jù)映射為其創(chuàng)建倒排索引,一旦修改索引庫(kù)和mapping,倒排索引會(huì)失效,但是可以為索引庫(kù)添加新的字段:
添加類(lèi)型為long的年齡字段:
PUT /xiaowei/_mapping { "properties": { "age": { "type": "long" } } }
將年齡字段類(lèi)型修改為integer并運(yùn)行:
PUT /xiaowei/_mapping { "properties": { "age": { "type": "integer" } } }
運(yùn)行后會(huì)發(fā)現(xiàn)會(huì)提示不能修改索引庫(kù):
操作文檔
索引庫(kù)中文檔的操作DSL語(yǔ)法也比較簡(jiǎn)單,這里直接以例子的形式記錄知識(shí)
增刪查文檔
添加文檔的語(yǔ)法比較簡(jiǎn)單,和上面類(lèi)似:
#新增文檔 POST /xiaowei/_doc/1 { "info": "小威", "email": "xiaowei.cn", "name": { "firstname": "小", "lastname": "威" } }
由上圖可以看到創(chuàng)建文檔成功,并且會(huì)有版本號(hào)version,在每次改變文檔時(shí),版本號(hào)都會(huì)進(jìn)行+1操作。
當(dāng)然,查詢(xún)和刪除文檔和上面的例子命令一樣,查詢(xún)文檔GET/索引庫(kù)名稱(chēng)/_doc,刪除文檔DELECT/索引庫(kù)名稱(chēng)/_doc。
GET /xiaowei/_doc/1
DELECT /xiaowei/_doc/1
如上圖,每次操作文檔version的值都會(huì)進(jìn)行+1。
修改文檔
修改文檔有兩種方式,一種為PUT命令全量覆蓋,一種為POST命令局部修改。
使用PUT命令操作文檔時(shí),如果只是PUT了一個(gè)字段,其他的字段就被覆蓋了,相當(dāng)于刪除了之前舊的文檔,重新創(chuàng)建了一個(gè)新文檔。
而POST命令可以局部修改想要改變的值,即增量修改,修改指定字段的值。。
比如講剛才添加文檔的email值首字母大寫(xiě),DSL代碼如下:
POST /xiaowei/_update/1 { "doc": { "email": "XiaoWei.cn" } }
運(yùn)行結(jié)果:
總結(jié)
到此這篇關(guān)于Elasticsearch索引庫(kù)和文檔的相關(guān)操作的文章就介紹到這了,更多相關(guān)Elasticsearch索引庫(kù)和文檔內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決IDEA中 Ctrl+ALT+V這個(gè)快捷鍵無(wú)法使用的情況
這篇文章主要介紹了解決IDEA中 Ctrl+ALT+V這個(gè)快捷鍵無(wú)法使用的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02Java集合之Set、HashSet、LinkedHashSet和TreeSet深度解析
這篇文章主要介紹了Java集合之Set、HashSet、LinkedHashSet和TreeSet深度解析,List是有序集合的根接口,Set是無(wú)序集合的根接口,無(wú)序也就意味著元素不重復(fù),更嚴(yán)格地說(shuō),Set集合不包含一對(duì)元素e1和e2 ,使得e1.equals(e2) ,并且最多一個(gè)空元素,需要的朋友可以參考下2023-09-09java微信公眾號(hào)開(kāi)發(fā)第一步 公眾號(hào)接入和access_token管理
這篇文章主要為大家介紹了java微信公眾號(hào)開(kāi)發(fā),主要內(nèi)容包括公眾號(hào)接入和access_token管理,感興趣的小伙伴們可以參考一下2016-01-01基于A(yíng)pache組件分析對(duì)象池原理的實(shí)現(xiàn)案例分析
本文從對(duì)象池的一個(gè)簡(jiǎn)單案例切入,主要分析common-pool2組件關(guān)于:池、工廠(chǎng)、配置、對(duì)象管理幾個(gè)角色的源碼邏輯,并且參考其在Redis中的實(shí)踐,對(duì)Apache組件分析對(duì)象池原理相關(guān)知識(shí)感興趣的朋友一起看看吧2022-04-04Java 并發(fā)編程的可見(jiàn)性、有序性和原子性
這篇文章主要介紹了Java 并發(fā)編程的可見(jiàn)性、有序性和原子性的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java并發(fā)編程,感興趣的朋友可以了解下。2020-11-11三道java新手入門(mén)面試題,通往自由的道路--多線(xiàn)程
這篇文章主要為大家分享了最有價(jià)值的3道多線(xiàn)程面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,對(duì)hashCode方法的設(shè)計(jì)、垃圾收集的堆和代進(jìn)行剖析,感興趣的小伙伴們可以參考一下2021-07-07ArrayList和HashMap如何自己實(shí)現(xiàn)實(shí)例詳解
這篇文章主要介紹了 ArrayList和HashMap如何自己實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2016-12-12