2017-12-20

全文索引

mongodb 中 每个集合只允许创建一个全文索引

// "text"是固定的, key代表字段名
// articles集合上
db.articles.ensureUndex({key:'text'})
db.articles.ensureIndex({key_1:"text",key_2:"text"})
db.articles.ensureIndex({"$**":"text"}) // 对所有字段创建全文索引

全文索引 查询

db.articles.find({ $text: {$search: "coffee"} }) // 查询包含 coffee字符串的集合中所有文件
db.articles.find( { $text: {$search: "aa bb cc" } } ) // 查询带空格隔开的aa bb cc
db.articles.find( { $text: {$search: "aa bb -cc" } } ) //-cc 代表不带cc的字符串 
db.articles.find( $text: { $search: " \"aa\" \" bb\" \"cc\"" } ) // 既包含aa,有包含bb,还包含cc  &&与的关系
use test
db.test.ensureIndex({ "article": "text" }) // 创建全文索引
// 返回 
{
  "createdCollectionAutomatically": true,
  "numIndexesBefore":1,
  "numIndexesAfter": 2,
  "ok": 1
}
db.test.insert({"article":"aa bb cc dd "})
db.test.insert({"article":"aa bb dd jj "})
db.test.insert({"article":"aa bb cxdgsdd "})
db.test.find({ $text :{$search: "aa bb"}})
全文索引相似度
$meta操作符:{ score: { $meta: "textScore" } }//查询结果与查询条件相似度
// 写在查询条件后面可以返回结果的相似度
// 与sort一起使用,可以达到较好效果
db.test.find( {$text:{$search: "aa bb"}},{score:{$meta:"textScore"}} )
// 可以查出 与 aa bb 相似度,查出的结果在 score中
{"_id": .., "article":"aa bb rr","score": 1.5} // 类似这样可以对score排序
db.test.find( {$text:{$search: "aa bb"}},{score:{$meta:"textScore"}} ).sort( {score: {$meta: "textScore"} } )

全文索引的限制

1. 每次查询 只能指定一个 $text 查询
2. $text查询不能出现在$nor查询中
3. 查询中若包含了$text,hint不在起作用
4. MongoDB 全文索引还不支持中文

创建索引格式
db.collection.ensureIndex({param},{param})
第二个参数是 索引属性
**重要的属性
1. 名字 
db.collection.ensureIndex({},{name:" "})
db.collectionName.getIndexes()
// 比如创建一个 
db.test.ensureIndex({x: 1}) // 创建单键索引 x_1
db.test.ensureIndex({y: -1}) // 创建单键索引 y_-1 +-1 代表索引排序方向
db.test.getIndexes() // 查看单键的 索引name x_1
// 创建多个键值索引, 可以使用别名
db.test.ensureIndex({x:1,y:1,z:1},{name:"normal_index"}) // 索引重命名
db.test.dropIndex("normal_index") // 删除时容易些
2. 唯一性 unique 指定
db.collection.ensureIndex({},{unique:true/false})
db.collection.ensureIndex({m: 1,n:1},{unique: true})
// 插入第一条 db.test.insert({m: 1, n: 2})
// 插入第二条 db.test.insert({m: 1, n: 2}) // 插入相同的 报错
3. 稀疏性 sparse 指定
db.collection.ensureIndex({}, {sparse: true/false})

db.test.insert({"m":1})   db.test.insert({"n":1})
db.test.find({m:{$exists: true}}) // 返回的是 m 所在记录
// 加索引 m
db.test.ensureIndex({m:1},{sparse:true})
// 查找时能把n查出来
db.test.find({m:{$exists: false}}) // 全局稀疏索引查找时,查不到就不会用这个全局索引
db.test.find({m:{$exists: false}}).hint("m_1") // 强制使用稀疏索引 就会查不到
4. 是否定时删除
expireAfterSecond(秒) 一般60s 左右会清一次 

mongostat 查看mongo运行状态使用命令介绍

  1. ./bin/mongostat -h 127.0.0.1.12345 -u -p //若有用户名,密码的话加上-u -p
// 打印出详细信息 cursor isMultiKey n nscanned millis /等参数
db.test.find({x:1}).explain()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容