全文索引

建立方法:
--在articles集合的key字段上创建全文索引
db.articles.ensureIndex({key:"text"})
--在articles集合的key_1,key_2字段上创建全文索引
db.articles.ensuereIndex({key_1:"text",key_2:"text"})
--在articles集合的所有字段上创建全文索引
db.articles.ensuereIndex({"$**":"text"}) --在articles集合中的article字段上创建全文索引
> db.articles.ensureIndex({"article":"text"});
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
>
--插入演示数据
db.articles.insert({"article":"aa bb"})
db.articles.insert({"article":"aa bb cc "})
db.articles.insert({"article":"aa bb cc dd"})
db.articles.insert({"article":"aa bb cc rr"}) 使用全文索引查询
--查询包含aa 或 bb 或 cc的文档
db.articles.find({$text:{$search:"aa bb cc"}})
--查询包含aa 或 bb 但不包含 cc的文档
db.articles.find({$text:{$search:"aa bb -cc"}})
--查询包含aa 、bb 且包含cc的文档
db.articles.find({$text:{$search:"\"aa\" \"bb\" \"cc\""}}) 全文索引的相似度
$meta操作符:{score:{$meta:"textScore"}}
写在查询条件后面可以返回查询结果的相似度
经常与sort一起使用 --查询含有"aa bb"字段的文本,并返回查询结果的相似度
> db.articles.find({$text:{$search:"aa bb"}},{score:{$meta:"textScore"}});
{ "_id" : ObjectId("5798ad223206da9bc38b2370"), "article" : "aa bb cc dd", "score" : 1.25 }
{ "_id" : ObjectId("5798ad293206da9bc38b2371"), "article" : "aa bb cc rr", "score" : 1.25 }
{ "_id" : ObjectId("5798ad1b3206da9bc38b236f"), "article" : "aa bb cc ", "score" : 1.3333333333333333 }
{ "_id" : ObjectId("5798ad143206da9bc38b236e"), "article" : "aa bb", "score" : 1.5 }
{ "_id" : ObjectId("5798ae383206da9bc38b2372"), "article" : "aa", "score" : 1.1 }
--根据相似度排序
> db.articles.find({$text:{$search:"aa bb"}},{score:{$meta:"textScore"}}).sort({score:{$meta:"textScore"}});
{ "_id" : ObjectId("5798ad143206da9bc38b236e"), "article" : "aa bb", "score" : 1.5 }
{ "_id" : ObjectId("5798ad1b3206da9bc38b236f"), "article" : "aa bb cc ", "score" : 1.3333333333333333 }
{ "_id" : ObjectId("5798ad223206da9bc38b2370"), "article" : "aa bb cc dd", "score" : 1.25 }
{ "_id" : ObjectId("5798ad293206da9bc38b2371"), "article" : "aa bb cc rr", "score" : 1.25 }
{ "_id" : ObjectId("5798ae383206da9bc38b2372"), "article" : "aa", "score" : 1.1 }
> 全文索引使用的限制(版本2.6.5)
1.每次查询,只能指定一个$text查询(一个集合只能创建一个全文索引)
2.$text查询不能出现在$nor查询中
3.查询中如果包含$text,hint不在起作用
4.当前Mongodb的全文索引还不支持中文

索引属性

创建索引的格式:
db.collection.ensureIndex({indexValue},{indexProperty})
其中indexProperty比较重要的有:
1.名字,name指定:
db.collection.ensureIndex({},{name:""})
2.唯一性,unique指定:
db.collection.ensureIndex({},{unique:true/false})
3.稀疏性,sparse指定
稀疏性指是否为文档中不存在的字段创建索引
db.collection.ensureIndex({},{sparse:true/false})
4.是否定时删除,expireAfterSeconds指定:
TTL 过期索引

地理位置索引

地理位置索引
将一些点的位置存储到Mongodb中,创建索引后,可以按照位置来
查找其他点 子分类
2d索引:用于存储和查找平面上的点
2dsphere索引:用于存储和查找球面上的点 查找方式
1.查找距离某个点一定距离内的点
2.查找包含在某区域内的点 2d索引详解
1.创建索引方式
db.collection.ensureIndex({w:"2d"}) 2.位置表示方式
经纬度[经度,纬度] 3.取值范围
经度[-180,180] 纬度[-90,90] 4.插入位置数据
>db.location.insert({w:[1,1]})
>db.location.insert({w:[1,2]})
>db.location.insert({w:[5,6]})
>db.location.insert({w:[200,1]}) #Mongodb会直接报错,经度超出范围
>db.location.insert({w:[180,100]}) #纬度超出范围,Mongodb并没有报错,但是后期查询会出现不可预知的错误。
>db.location.insert({w:[79,76]}) 5.查询方式
$near查询 查询距离某个点的最近点
>db.location.find({w:{$near:[1,1]}}) #默认返回100个
--可通过$maxDistance来限制查找的最远距离
>db.location.find({w:{$near:[1,1],$maxDistance:10}}) #限制查找最远距离为10 $geoWithin查询 查询某个形状内的点
形状有三种表示方式
1)$box:矩形,使用{$box:[[<x1>,<y1>],[<x2>,<y2>]]}表示,内部是两个坐标,第一个代表左边界,第二个代表右边界。
>db.collection.find({w:{$geoWithin:{$box:[[0,0],[3,3]]}}})
2)$center:圆形,使用{$center:[[<x1>,<y1>],r]}表示,内部是圆心位置和半径。
>db.collection.find({w:{$geoWithin:{$center:[[0,0],5]}}})
3)$polygon:多边形,使用{$polygon:[[<x1>,<y1>],[<x2>,<y2>],[<x3>,<y3>]]}表示,内部是坐标点,坐标点围成一个多边形。
>db.collection.find({w:{$geoWithin:{$polygon:[[0,0],[0,1],[2,5],[6,1]]}}}) geoNear查询 是对$near查询的补充
db.runCommand({
getNear:<collection>,
near:[x,y],
minDistance:(对2d索引无效)
maxDistance:
num:
})

Mongodb的索引--学习笔记(未完)的更多相关文章

  1. Go web编程学习笔记——未完待续

    1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...

  2. linux学习笔记---未完待续,缓慢更新

    做为linux菜鸟,由于work的需要,慢慢的开始接触学习linux. <鸟哥的linux私房菜>学习笔记. 一.基础命令操作 1.显示日期的命令 date 执行date命令后,显示结果为 ...

  3. jQuery 学习笔记(未完待续)

    一.jQuery概述    宗旨: Write Less, Do More.    基础知识:        1.符号$代替document.getElementById()函数        2.使 ...

  4. oracle-绑定变量学习笔记(未完待续)

    --定义变量SQL> var a number; --给绑定变量赋值SQL> exec :a :=123; PL/SQL procedure successfully completed. ...

  5. sql语句学习及索引学习,未完待续,补充增删改查

    1,查询出last_name 为 'Chen' 的 manager 的信息.  select * fromwhere employee_id = ( selectfrom employees wher ...

  6. Scrapy 爬虫框架学习笔记(未完,持续更新)

    Scrapy 爬虫框架 Scrapy 是一个用 Python 写的 Crawler Framework .它使用 Twisted 这个异步网络库来处理网络通信. Scrapy 框架的主要架构 根据它官 ...

  7. Java学习笔记(未完待续)

    变量的作用域(scope)是指变量可以在程序中引用的范围.在方法中定义的变量称为局部变量(local variable).局部变量的作用域从声明变量的地方开始,直到包含该变量的块结束为止.局部变量都必 ...

  8. Greys学习笔记(未完待续)

    Greys介绍 greys-anatomy是一个Java线上诊断工具,取名来自美剧<实习医生格雷>,由菜鸟-杜琨同学开发维护.比我们常用的脚本工具btrace提供更多的功能,greys采用 ...

  9. mongodb常用命令学习笔记

    mongodb常用命令学习笔记 创建数据库 use DATABASE_NAME eg: use users; 如果数据库不存在,则创建数据库,否则切换到指定数据库.要显示刚刚创建的数据库,需要向数据库 ...

随机推荐

  1. Android——android:gravity 和 android:layout_Gravity

    LinearLayout有两个非常相似的属性: android:gravity与android:layout_gravity. 他们的区别在于: android:gravity 属性是对该view中内 ...

  2. [转] iOS开发之使用lipo命令制作模拟器与真机通用静态库

    转自 http://blog.csdn.net/jinglijun/article/details/8276089 通常在项目中使用静态库的时候都会有两个版本,一个用于模拟器,一个用于真机,因为Mac ...

  3. windows server 2008 IP安全策略关闭端口,禁止ping,修改远程连接3389端口,开放指定端口

    windows server 2008 IP安全策略关闭端口:      Tomcat服务访问不了情况解决.    Windows默认情况下有很多端口是开放的,在你上网的时候,网络病毒和黑客可以通过这 ...

  4. python 2.7.10 找不到 libmysqlclient.18.dylib 解决方案

    Mac os x 升级到最新版后出现 python MysqlDB 无法找到 libmysqlclient.18.dylib 的问题,尝试的解决方案如下: 1.  升级更新 mysql 到最新版,无效 ...

  5. Ant 脚本打印系统属性变量、ant内置属性

    Ant 脚本打印系统属性变量.ant内置属性 作用 编写ant脚本的时候,经常会引用到系统属性,本脚本用于打印系统常用属性(System.getProperties)与环境变量(Environment ...

  6. socket学习笔记——线程(聊天程序)

    server.c #include <stdio.h> #include <pthread.h> #include <semaphore.h> #include & ...

  7. 使用CORS:跨域两三事

    本文为译文. 简介 APIS是可以将富网页应用串连在一起的线程.但是这个应用难以转给浏览器,跨域请求技术的选择被限制了,类似JSONP(由于安全考虑,使用会被限制),或者配置代理(设置和维护都比较头痛 ...

  8. cordova local notification plugin

    cordova plugin add org.apache.cordova.device cordova plugin add https://github.com/katzer/cordova-pl ...

  9. JS常用的设计模式(8)——访问者模式

    GOF官方定义: 访问者模式是表示一个作用于某个对象结构中的各元素的操作.它使可以在不改变各元素的类的前提下定义作用于这些元素的新操作.我们在使用一些操作对不同的 对象进行处理时,往往会根据不同的对象 ...

  10. SQL2005中使用identity_insert向自动增量字段中写入内

    摘自: http://www.aspbc.com/tech/showtech.asp?id=1117 SQL2005以前的数据库是不允许向自动增量字段中写入内容的,ACCESS也不行,但在SQL200 ...