MongoDB的索引

来源:互联网 发布:lol防封源码 编辑:程序博客网 时间:2024/06/01 08:00

1._ id索引
_ id索引是绝大多数集合默认建立的索引,对于MongoDB每插入一条数据,都会自动生成一个_ id的索引。
db.west.getIndexes() 查看索引
这里写图片描述
- 单键索引
单键索引可以说是最简单普通的索引,他需要我们去创建,不会自动创建
db.west.ensureIndex({x:1}) 创建x为1的索引
这里写图片描述
- 多健索引
多键索引和单键索引创建的形式一样,只不过区别是字段的值
单键索引:值是单一的值,如字符串,时间等
下面就是添加一个x:为1-5的数组
这里写图片描述
- 复合索引
当我们的查询条件是不只是一个的时候,需要建立符合索引
例如:建立一个x:1,y:1,z:1的数据
当查询条件为x:1,y:1时,这时候需要建立索引给x和y
这里写图片描述
- 过期索引
过期索引顾名思义是在一段时间过后会字段删除数据的索引,相应的数据也会被删除。非常适合对于一些需要一段时间失效的数据,例如用户的信息。日志之类的
建立的命令是:db.west.ensureIndex({time:1},{expireAfterSeconds:60})
其中{time:1}代表要删除的数据
{expireAfterSeconds:60}是设置60s的过期时间
此时插入一条数据
db.west.insert({time:new Date()})
这里写图片描述
过60s我们再去查找数据的时候
db.west.find() 发现刚才插入的数据已被删除了
需要注意的是:
(1)存储在过期索引字段的值必须是指定的时间类型。
说明:必须是ISODate或者ISODate数组,不能是时间戳,否则不能被自动删除
(2)如果指定了ISODate数组,则按照最小的时间进行删除。
(3)过期索引不能是复合索引。
(4)删除时间不是精确的。
说明:删除过程是由后台程序每60s跑一次。而且删除也需要一些时间,所以会存在误差
6. 全文索引
对字符串与字符数组创建全文可搜索的索引
适用情况:
{author:”“,titile:”“,article:”“}

建立方法:
db.article.ensureIndex({key:”text”}) “text”是固定的
db.article.ensureIndex({key_1:”text”,key_2:”text”})
db.article.ensureIndex({“**":"text"})   有多个key时可以用**代替
如下图:我们创建索引,添加数据
这里写图片描述
如何使用全文索引查询
db.west.find({text:{search:”aa”}}) 查询包含aa的
db.west.find({text:{search:”aa bb cc”}}) 查询包含aa bb cc的–是或的关系
db.west.find({text:{search:”aa bb -cc”}}) 查询包含aa bb 但是不包含cc
db.west.find({text:{search:”\”aa\” \”bb\” \”cc\”“}}) 查询包含aa bb cc的–是与的关系
这里写图片描述
在百度中,我们查询一些东西时,常常会发现越相识度高的越排在前面。MongoDB也可以实现这种机制:全文索引相识度查询
全文索引相识度查询:
meta操作符:{score:{meta:”textScore”}}
写在查询条件后面可以返回返回结果的相识度
这里写图片描述
上图中:score的大小就是代表相识度
与sort一起使用,可以达到很好的排序的实用效果
这里写图片描述
加上一个排序
db.west.find({text:{search:"aa bb"}},{score:{meta:"textScore"}}).sort({score:{meta:”textScore”}})

原创粉丝点击