摘要:在研究的索引是發(fā)現(xiàn)一個(gè)奇怪的問題,給一個(gè)類型的設(shè)置索引,但是在查詢的時(shí)候并沒有使用索引。建立了索引后,只能對(duì)索引包含的所有字段進(jìn)行全文搜索,無法對(duì)某個(gè)字段進(jìn)行搜索一般索引和索引可以同時(shí)建立,以滿足不同查詢需求
在研究MongoDB的索引是發(fā)現(xiàn)一個(gè)奇怪的問題,給一個(gè)string類型的field設(shè)置text索引,但是在查詢的時(shí)候并沒有使用索引。比如:
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()的結(jié)果可以發(fā)現(xiàn),在查詢的時(shí)候只用了BasicCursor,也就是說沒有使用索引。
后發(fā)現(xiàn)只有當(dāng)使用$text查詢的時(shí)候才會(huì)用到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, ... }
只不過這樣的話,就沒有辦法針對(duì)某個(gè)特定field進(jìn)行查詢了,因?yàn)?b>$text是對(duì)所有text索引的field進(jìn)行的全文搜索。此時(shí)只需要做一般的索引即可:
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.*/ ] ] }, ... }總結(jié)
使用db.collection.find( { url : "1"} )或者db.collection.find( { url : /.*a.*/} ),不會(huì)使用的text索引,而是一般索引。
建立了text索引后,只能對(duì)text索引包含的所有字段進(jìn)行全文搜索,無法對(duì)某個(gè)字段進(jìn)行搜索
一般索引和text索引可以同時(shí)建立,以滿足不同查詢需求
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/18863.html
摘要:此文成于年月現(xiàn)狀目前的穩(wěn)定版本為目前對(duì)英文等字母語言采用空格分詞故其對(duì)中文分詞支持不好目前官方中文分詞方案僅支持按單字分詞在基礎(chǔ)上目前國內(nèi)有兩個(gè)中文分詞解決方案一個(gè)是一個(gè)是沒有官網(wǎng)文檔較少可查到的最新版本可支持官方還在維護(hù)但貌似不打 NOTE : 此文成于 2017 年 3 月. 現(xiàn)狀: Sphinx 目前的穩(wěn)定版本為 2.2.11.Sphinx 目前對(duì)英文等字母語言采用空格分詞,故...
摘要:此文成于年月現(xiàn)狀目前的穩(wěn)定版本為目前對(duì)英文等字母語言采用空格分詞故其對(duì)中文分詞支持不好目前官方中文分詞方案僅支持按單字分詞在基礎(chǔ)上目前國內(nèi)有兩個(gè)中文分詞解決方案一個(gè)是一個(gè)是沒有官網(wǎng)文檔較少可查到的最新版本可支持官方還在維護(hù)但貌似不打 NOTE : 此文成于 2017 年 3 月. 現(xiàn)狀: Sphinx 目前的穩(wěn)定版本為 2.2.11.Sphinx 目前對(duì)英文等字母語言采用空格分詞,故...
摘要:用于存儲(chǔ)布爾值真假。將一個(gè)值與二進(jìn)制的元素的最低值和最高值相對(duì)比??蛇x,拋出異常的級(jí)別。在建立唯一索引時(shí)是否刪除重復(fù)記錄指定創(chuàng)建唯一索引。索引權(quán)重值,數(shù)值在到之間,表示該索引相對(duì)于其他索引字段的得分權(quán)重。 Robo 3T -< 可視化工具 http://blog.csdn.net/i_vic/ar... [Unit] Description=mongodb After=networ...
摘要:一般我們都知道不給選擇性低的字段添加索引,因?yàn)檫@個(gè)不能提高效率。即選擇性高的字段選擇性低的字段方案一添加組合索引此圖索引為從圖上看出,還是索引沒有起作用,這是因?yàn)榻M合索引中,用右邊的字段索引,索引不起作用。 今天在開發(fā)公司評(píng)論系統(tǒng)的新需求時(shí),碰到一個(gè)關(guān)于mongo sort排序的問題 條件: 1. 評(píng)論表comment中包含兩個(gè)字段 ctime(添加時(shí)間),like(點(diǎn)贊的人數(shù)) ...
摘要:指定為創(chuàng)建唯一索引。默認(rèn)值為索引的名稱。在建立唯一索引時(shí)是否刪除重復(fù)記錄指定創(chuàng)建唯一索引。索引權(quán)重值,數(shù)值在到之間,表示該索引相對(duì)于其他索引字段的得分權(quán)重。對(duì)于文本索引,該參數(shù)決定了停用詞及詞干和詞器的規(guī)則的列表。 索引通常能夠極大的提高查詢的效率,如果沒有索引,MongoDB在讀取數(shù)據(jù)時(shí)必須掃描集合中的每個(gè)文件并選取那些符合查詢條件的記錄。 這種掃描全集合的查詢效率是非常低的,特別在...
閱讀 2026·2021-11-24 09:39
閱讀 1169·2021-09-10 11:25
閱讀 1798·2021-09-08 10:42
閱讀 3761·2021-09-06 15:00
閱讀 2514·2019-08-30 15:54
閱讀 3129·2019-08-29 17:08
閱讀 3288·2019-08-29 11:26
閱讀 2851·2019-08-28 18:27