摘要:全文索引主要用于搜索業務的索引,通過多種不同的查詢方式和條件進行全文索引,適合搜索引擎和站內搜索業務。注全文索引全文索引目前不支持中文。
簡述
MongoDB中的索引其實類似于關系型數據庫,都是為了提高查詢和排序的效率的,并且實現原理也基本一致。由于集合中的鍵(字段)可以是普通數據類型,也可以是子文檔。MongoDB可以在各種類型的鍵上創建索引。
索引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集合文檔的結構,其中我們可以看到集合有一個默認索引_id。
MongoDB索引分為7類:
[1]默認索引(_id索引):MongoDB有個默認的“_id”的鍵,他相當于“主鍵”的角色。集合創建后系統會自動創建一個索引在“_id”鍵上,它是默認索引,索引名叫“_id_”,是無法被刪除的,_id值也是恒定不變的。 [2]單鍵索引:索引值為一個單一的值,比如字符串,更新日期等等。 [3]多建索引:索引值為多個值同時存在,例如數組。 [4]復合索引:單鍵索引和多建索引的結合。 [5]過期索引:在一段時間后會過期(自動銷毀記錄)的索引,適合用于處理用戶登錄信息等具有時間局限的記錄過期處理(比較多的做法是Session或者cookie),對一些存儲日志的過期處理等等用途。 [6]全文索引:主要用于搜索業務的索引,通過多種不同的查詢方式和條件進行MongoDB全文索引,適合搜索引擎和站內搜索業務。 [7]地理位置索引:根據區間值進行范圍索引查詢,這種索引適合于當前越來越流行的打車軟件查詢人車位置時通過索引提升查詢效率,還有網購點餐時查詢距離自己范圍內的餐廳地址等等。
注:索引的最終目標是提升查詢效率和速度,索引不能過多,需要理性創建最適合的。
注:過期索引 :存儲的字段值必須是指定的時間類型ISODate或者是ISODate數組,不能使用時間戳,否則索引會失效。
注:過期索引:記錄自動銷毀進程是每60S跑一次的后臺程序,并不是很準時的自動程序。
注:過期索引:如果指定了ISODate數組,那么程序會自動吧數組內時間最早的那條記錄銷毀掉。
注:過期索引:過期索引不能被復合索引所引用。
注:全文索引:MongoDB全文索引目前不支持中文。
全文索引:在實際應用上,MongoDB的全文索引由于不支持中文索引,因此單單依靠MongoDB進行全文索引支持搜索業務的效率和成本是很高的,一般來講業內是不建議使用MongoDB進行全文索引的,除非MongoDB官方能增加對中文索引的支持,不然,MongoDB更多的還是停留在數據倉庫的角色。
注:全文索引:利用全文索引相似度可以實現對查詢結果進行相似度排序,從而實現一個簡單的小搜索相似度排序,類似于谷歌百度查詢相似度排序。
創建:
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)用空格隔開實現多字段索引查詢(或查詢):
db.testCollection.find({$text:{$search:"aa bb cc"}})
(3)-可以使得查詢結果不能含有指定字段:
db.testCollection.find({$test:{$search:"aa -bb"}})
(4)用"來實現“且”查詢(并列查詢):
db.testCollection.find({$text:{$search:""aa "bb "}})
注:MongoDB全文索引每次查詢只能指定一個$text查詢
注:地理位置索引:查詢距離某點的一定距離范圍內的點;查找包含在某一區域所有點。
注:地理位置索引:有兩個子分類。
(1)2D索引:平面地理位置索引
(2)2Dsphere索引:球面地理位置索引
創建:
(1)2D索引:
db.a.ensureIndex({w:"2d"}) //*位置表示方式:經緯度[經度,緯度],取值范圍:經度[-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查詢:查詢某個形狀內的點。
例1:
db.a.find({w:{$geowithin:{$box:[0,0], [3,3]}}}) //*查詢在左邊界[0,0],右邊界[3,3]的矩形范圍內的所有點。
例2:
db.a.find({w:{$geowithin:{$center:[[0,0], 5]}}}) //*查詢在[0,0]為圓心,半徑為5的圓形區域內的所有點。
例3:
db.a.find({w:{$geowithin:{$polygon:[[0,0], [1,2], [2,5], [6,1]]}}}) //*查詢在多個坐標點組成的多邊形范圍內的所有點。
$geoNear查詢:查詢相近的點的數據。
例:
db.command({$geoNear:"a", near:[1,2], maxDistance:10, num:1})
(2)2Dsphere索引:略。
注:MongoDB自帶的庫狀態管理工具Mongostat:這個工具可以查看當前MongoDB的數據讀取和索引命中情況:
命令:./mongostat -h 127.0.0.1:8080 可以查看MongoDB狀態信息。
其中請關注這些字段所給我們返回的信息:
qr : 讀隊列情況(實時查詢MongoDB情況)
qw : 寫隊列情況(實時寫入MongoDB情況)
idx miss : 索引命中情況
注:在find()后面加入explain()可以查看查詢的詳細信息
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/18790.html
摘要:全文索引主要用于搜索業務的索引,通過多種不同的查詢方式和條件進行全文索引,適合搜索引擎和站內搜索業務。注全文索引全文索引目前不支持中文。 簡述 MongoDB中的索引其實類似于關系型數據庫,都是為了提高查詢和排序的效率的,并且實現原理也基本一致。由于集合中的鍵(字段)可以是普通數據類型,也可以是子文檔。MongoDB可以在各種類型的鍵上創建索引。 索引 MongoDB的索引就是集合Co...
閱讀 1155·2021-11-24 10:43
閱讀 3112·2021-11-22 09:34
閱讀 3553·2021-10-08 10:04
閱讀 3936·2021-09-23 11:58
閱讀 3119·2019-08-30 15:44
閱讀 489·2019-08-30 13:01
閱讀 1163·2019-08-28 18:07
閱讀 1452·2019-08-26 13:42