摘要:全文索引主要用于搜索業(yè)務(wù)的索引,通過多種不同的查詢方式和條件進行全文索引,適合搜索引擎和站內(nèi)搜索業(yè)務(wù)。注全文索引全文索引目前不支持中文。
簡述
MongoDB中的索引其實類似于關(guān)系型數(shù)據(jù)庫,都是為了提高查詢和排序的效率的,并且實現(xiàn)原理也基本一致。由于集合中的鍵(字段)可以是普通數(shù)據(jù)類型,也可以是子文檔。MongoDB可以在各種類型的鍵上創(chuàng)建索引。
索引MongoDB的索引就是集合Collection里面的Key字段,一般默認都會有一個默認索引_id,這是唯一也是不能被刪除的索引。也可以自己手動給某個索引指定唯一性:
db.testCollection.ensureIndex({...},unique:ture) db.mycol.find().pretty()
說明:這是一段簡單的索引的建立代碼。
{ "_id":ObjectId(7df78ad8902c), "a":"職友集", "b":"廣州", "c":"招牌平臺", "d":"http://www.jonui.com", "e":["php","java","adriod"], "f":"50" }
說明:這是一個典型的MongoDB集合文檔的結(jié)構(gòu),其中我們可以看到集合有一個默認索引_id。
MongoDB索引分為7類:
[1]默認索引(_id索引):MongoDB有個默認的“_id”的鍵,他相當(dāng)于“主鍵”的角色。集合創(chuàng)建后系統(tǒng)會自動創(chuàng)建一個索引在“_id”鍵上,它是默認索引,索引名叫“_id_”,是無法被刪除的,_id值也是恒定不變的。 [2]單鍵索引:索引值為一個單一的值,比如字符串,更新日期等等。 [3]多建索引:索引值為多個值同時存在,例如數(shù)組。 [4]復(fù)合索引:單鍵索引和多建索引的結(jié)合。 [5]過期索引:在一段時間后會過期(自動銷毀記錄)的索引,適合用于處理用戶登錄信息等具有時間局限的記錄過期處理(比較多的做法是Session或者cookie),對一些存儲日志的過期處理等等用途。 [6]全文索引:主要用于搜索業(yè)務(wù)的索引,通過多種不同的查詢方式和條件進行MongoDB全文索引,適合搜索引擎和站內(nèi)搜索業(yè)務(wù)。 [7]地理位置索引:根據(jù)區(qū)間值進行范圍索引查詢,這種索引適合于當(dāng)前越來越流行的打車軟件查詢?nèi)塑囄恢脮r通過索引提升查詢效率,還有網(wǎng)購點餐時查詢距離自己范圍內(nèi)的餐廳地址等等。
注:索引的最終目標是提升查詢效率和速度,索引不能過多,需要理性創(chuàng)建最適合的。
注:過期索引 :存儲的字段值必須是指定的時間類型ISODate或者是ISODate數(shù)組,不能使用時間戳,否則索引會失效。
注:過期索引:記錄自動銷毀進程是每60S跑一次的后臺程序,并不是很準時的自動程序。
注:過期索引:如果指定了ISODate數(shù)組,那么程序會自動吧數(shù)組內(nèi)時間最早的那條記錄銷毀掉。
注:過期索引:過期索引不能被復(fù)合索引所引用。
注:全文索引:MongoDB全文索引目前不支持中文。
全文索引:在實際應(yīng)用上,MongoDB的全文索引由于不支持中文索引,因此單單依靠MongoDB進行全文索引支持搜索業(yè)務(wù)的效率和成本是很高的,一般來講業(yè)內(nèi)是不建議使用MongoDB進行全文索引的,除非MongoDB官方能增加對中文索引的支持,不然,MongoDB更多的還是停留在數(shù)據(jù)倉庫的角色。
注:全文索引:利用全文索引相似度可以實現(xiàn)對查詢結(jié)果進行相似度排序,從而實現(xiàn)一個簡單的小搜索相似度排序,類似于谷歌百度查詢相似度排序。
創(chuàng)建:
db.testCollection.ensureIndex({"content":text})
查詢:
db.testCollection.find({$test:{$search:"jobui.com"}},{score:{$meta:"textScore"}}).sort({score:{$meta:"textScore"}})
全文索引有四種查詢方式:
(1)查詢單條記錄:
db.testCollection.find({$text:{$search:"aaa"}})
(2)用空格隔開實現(xiàn)多字段索引查詢(或查詢):
db.testCollection.find({$text:{$search:"aa bb cc"}})
(3)-可以使得查詢結(jié)果不能含有指定字段:
db.testCollection.find({$test:{$search:"aa -bb"}})
(4)用"來實現(xiàn)“且”查詢(并列查詢):
db.testCollection.find({$text:{$search:""aa "bb "}})
注:MongoDB全文索引每次查詢只能指定一個$text查詢
注:地理位置索引:查詢距離某點的一定距離范圍內(nèi)的點;查找包含在某一區(qū)域所有點。
注:地理位置索引:有兩個子分類。
(1)2D索引:平面地理位置索引
(2)2Dsphere索引:球面地理位置索引
創(chuàng)建:
(1)2D索引:
db.a.ensureIndex({w:"2d"}) //*位置表示方式:經(jīng)緯度[經(jīng)度,緯度],取值范圍:經(jīng)度[-180,180]緯度[-90,90]
(2)2Dsphere索引:
db.a.ensureIndex({w:"2dsphere"}) //*位置表示方式:GeoJSON描述點、線、多邊形,格式:{type:"",coordinates:[]},支持$minDistance,$maxDistance
查詢:
(1)2D索引:
$Near查詢:查詢距離某個點最近的點。
例:
db.a.find({w:{$near:[1,1], $maxDistance:10}}) //*查詢在點[1,1]距離最近的10個點。
$geoWithin查詢:查詢某個形狀內(nèi)的點。
例1:
db.a.find({w:{$geowithin:{$box:[0,0], [3,3]}}}) //*查詢在左邊界[0,0],右邊界[3,3]的矩形范圍內(nèi)的所有點。
例2:
db.a.find({w:{$geowithin:{$center:[[0,0], 5]}}}) //*查詢在[0,0]為圓心,半徑為5的圓形區(qū)域內(nèi)的所有點。
例3:
db.a.find({w:{$geowithin:{$polygon:[[0,0], [1,2], [2,5], [6,1]]}}}) //*查詢在多個坐標點組成的多邊形范圍內(nèi)的所有點。
$geoNear查詢:查詢相近的點的數(shù)據(jù)。
例:
db.command({$geoNear:"a", near:[1,2], maxDistance:10, num:1})
(2)2Dsphere索引:略。
注:MongoDB自帶的庫狀態(tài)管理工具Mongostat:這個工具可以查看當(dāng)前MongoDB的數(shù)據(jù)讀取和索引命中情況:
命令:./mongostat -h 127.0.0.1:8080 可以查看MongoDB狀態(tài)信息。
其中請關(guān)注這些字段所給我們返回的信息:
qr : 讀隊列情況(實時查詢MongoDB情況)
qw : 寫隊列情況(實時寫入MongoDB情況)
idx miss : 索引命中情況
注:在find()后面加入explain()可以查看查詢的詳細信息
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/21258.html
摘要:全文索引主要用于搜索業(yè)務(wù)的索引,通過多種不同的查詢方式和條件進行全文索引,適合搜索引擎和站內(nèi)搜索業(yè)務(wù)。注全文索引全文索引目前不支持中文。 簡述 MongoDB中的索引其實類似于關(guān)系型數(shù)據(jù)庫,都是為了提高查詢和排序的效率的,并且實現(xiàn)原理也基本一致。由于集合中的鍵(字段)可以是普通數(shù)據(jù)類型,也可以是子文檔。MongoDB可以在各種類型的鍵上創(chuàng)建索引。 索引 MongoDB的索引就是集合Co...
閱讀 3869·2021-10-08 10:05
閱讀 2950·2021-09-27 13:57
閱讀 2685·2019-08-29 11:32
閱讀 1010·2019-08-28 18:18
閱讀 1292·2019-08-28 18:05
閱讀 1989·2019-08-26 13:39
閱讀 868·2019-08-26 11:37
閱讀 2047·2019-08-26 10:37