摘要:在研究的索引是發現一個奇怪的問題,給一個類型的設置索引,但是在查詢的時候并沒有使用索引。建立了索引后,只能對索引包含的所有字段進行全文搜索,無法對某個字段進行搜索一般索引和索引可以同時建立,以滿足不同查詢需求
在研究MongoDB的索引是發現一個奇怪的問題,給一個string類型的field設置text索引,但是在查詢的時候并沒有使用索引。比如:
db.tomcat_access_logs.ensureIndex( { url : "text" }); db.tomcat_access.logs.find( { url : "1" } ).explain(); db.tomcat_access_logs.find( { url : /1/ } ).explain(); { "cursor" : "BasicCursor", "isMultiKey" : false, "n" : 0, "nscannedObjects" : 100, "nscanned" : 100, "nscannedObjectsAllPlans" : 100, "nscannedAllPlans" : 100, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 0, "nChunkSkips" : 0, "millis" : 0, ... }
從explain()的結果可以發現,在查詢的時候只用了BasicCursor,也就是說沒有使用索引。
后發現只有當使用$text查詢的時候才會用到text索引:
db.tomcat_access_logs.find( { $text : { $search : "1"} } ).explain(); { "cursor" : "TextCursor", "n" : 0, "nscannedObjects" : 0, "nscanned" : 0, "nscannedObjectsAllPlans" : 0, "nscannedAllPlans" : 0, "scanAndOrder" : false, "nYields" : 0, "nChunkSkips" : 0, "millis" : 0, ... }
只不過這樣的話,就沒有辦法針對某個特定field進行查詢了,因為$text是對所有text索引的field進行的全文搜索。此時只需要做一般的索引即可:
db.tomcat_access_logs.ensureIndex( { url : 1 } ); db.tomcat_access.logs.find( { url : "1" } ).explain(); db.tomcat_access.logs.find( { url : /.*1.*/g } ).explain(); { "cursor" : "BtreeCursor url_1", "isMultiKey" : false, "n" : 0, "nscannedObjects" : 0, "nscanned" : 100, "nscannedObjectsAllPlans" : 0, "nscannedAllPlans" : 100, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 0, "nChunkSkips" : 0, "millis" : 1, "indexBounds" : { "url" : [ [ "", { } ], [ /.*1.*/, /.*1.*/ ] ] }, ... }總結
使用db.collection.find( { url : "1"} )或者db.collection.find( { url : /.*a.*/} ),不會使用的text索引,而是一般索引。
建立了text索引后,只能對text索引包含的所有字段進行全文搜索,無法對某個字段進行搜索
一般索引和text索引可以同時建立,以滿足不同查詢需求
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/18863.html
摘要:此文成于年月現狀目前的穩定版本為目前對英文等字母語言采用空格分詞故其對中文分詞支持不好目前官方中文分詞方案僅支持按單字分詞在基礎上目前國內有兩個中文分詞解決方案一個是一個是沒有官網文檔較少可查到的最新版本可支持官方還在維護但貌似不打 NOTE : 此文成于 2017 年 3 月. 現狀: Sphinx 目前的穩定版本為 2.2.11.Sphinx 目前對英文等字母語言采用空格分詞,故...
摘要:此文成于年月現狀目前的穩定版本為目前對英文等字母語言采用空格分詞故其對中文分詞支持不好目前官方中文分詞方案僅支持按單字分詞在基礎上目前國內有兩個中文分詞解決方案一個是一個是沒有官網文檔較少可查到的最新版本可支持官方還在維護但貌似不打 NOTE : 此文成于 2017 年 3 月. 現狀: Sphinx 目前的穩定版本為 2.2.11.Sphinx 目前對英文等字母語言采用空格分詞,故...
摘要:用于存儲布爾值真假。將一個值與二進制的元素的最低值和最高值相對比。可選,拋出異常的級別。在建立唯一索引時是否刪除重復記錄指定創建唯一索引。索引權重值,數值在到之間,表示該索引相對于其他索引字段的得分權重。 Robo 3T -< 可視化工具 http://blog.csdn.net/i_vic/ar... [Unit] Description=mongodb After=networ...
摘要:一般我們都知道不給選擇性低的字段添加索引,因為這個不能提高效率。即選擇性高的字段選擇性低的字段方案一添加組合索引此圖索引為從圖上看出,還是索引沒有起作用,這是因為組合索引中,用右邊的字段索引,索引不起作用。 今天在開發公司評論系統的新需求時,碰到一個關于mongo sort排序的問題 條件: 1. 評論表comment中包含兩個字段 ctime(添加時間),like(點贊的人數) ...
摘要:指定為創建唯一索引。默認值為索引的名稱。在建立唯一索引時是否刪除重復記錄指定創建唯一索引。索引權重值,數值在到之間,表示該索引相對于其他索引字段的得分權重。對于文本索引,該參數決定了停用詞及詞干和詞器的規則的列表。 索引通常能夠極大的提高查詢的效率,如果沒有索引,MongoDB在讀取數據時必須掃描集合中的每個文件并選取那些符合查詢條件的記錄。 這種掃描全集合的查詢效率是非常低的,特別在...
閱讀 2008·2021-11-24 09:39
閱讀 1143·2021-09-10 11:25
閱讀 1769·2021-09-08 10:42
閱讀 3733·2021-09-06 15:00
閱讀 2498·2019-08-30 15:54
閱讀 3117·2019-08-29 17:08
閱讀 3272·2019-08-29 11:26
閱讀 2840·2019-08-28 18:27