3.6.3 全文索引

在一些信息管理平台上经常需要进行信息模糊查询,最早的时候是利用了某个字段上实现的模糊查询,但这个时候返回的信息并不会很准确,因为只能够查A字段或B字段,而在MongoDB里面实现了非常简单的全文检索。

范例:定义一个新的集合

db.news.insert({"title" : "wangke", "content" : "lol"})

db.news.insert({"title" : "wangyan", "content" : "heshui"})

db.news.insert({"title" : "wangying", "content" : "cf"})

db.news.insert({"title" : "wangyanjun", "content" : "shuijiao"})

db.news.insert({"title" : "wangyan wangying", "content" : "heshui"})

范例:设置全文检索

db.news.ensureIndex({"title" : "text", "content" : "text"})

范例:实现数据的模糊查询

如果想表示出全文检索,则使用"$text"判断符,而想进行数据的查询则使用"$search"运算符:

查询指定关键字:{"$search" : "查询关键字"}

查询多个关键字(或关系):{"$search" : "查询关键字 查询关键字 ......"}

查询多个关键字(与关系):{"$search" : "\"查询关键字\" \"查询关键字\" ......"}  # \"转义字符

排除多个关键字(排除某一个):{"$search" : "\"查询关键字\" \"查询关键字\"...... - 排除关键字"}

范例:查询单个内容(全文检索)

db.news.find({"$text" : {"$search" : "wangke"}})

范例:包含有"wangke"或"wangyanjun"的信息

db.news.find({"$text" : {"$search" : "wangke wangyanjun"}})

范例: 同时包含有“wangyan wagnying”的信息

db.news.find({"$text" : {"$search" : "\"wangyan\" \"wangying\""}})

范例:包含有"wangyan","wangying"没有"wangke"的信息

db.news.find({"$text" : {"$search" : "\"wangyan\" \"wangying\" - wangke"}})

在进行全文检索操作的时候还可以使用相似度的打分来判断检索成果。

范例:为结果打分

db.news.find({"$text" : {"$search" : "wangyan"}}, {"score" : {"$meta" : "textScore"}})

分数越高表示越接近最完美的查询结果,打分操作可以使用户更好地区分查询准确度。

db.news.find({"$text" : {"$search" : "wangyan"}}, {"score" : {"$meta" : "textScore"}}).sort({"score" : {"$meta" : "textScore"}})

按照打分的成绩进行排列,实际上就可以实现更加准确的信息搜索。

但是在这里还有一个小问题,如果一个集合的字段太多,那么每一个字段都分别设置全文检索比较麻烦,这种情况可以为所有的字段设置全文检索。

范例:为所有字段设置全文检索

先将前面的索引删除:

db.news.ensureIndex({"$**" : "text"})

这是一种最简单的设置全文索引的方式,但是尽可能别用,一个字:慢。(索引越多,操作越慢)

MongoDB(课时24 全文索引)的更多相关文章

  1. 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时24&&25

    课时24 深度学习开源库使用介绍(上) Caffe 被用于重新实现AlexNet,然后用AlexNet的特征来解决其他事情 用C++书写的,可以去GitHub上面读取源代码 主要四个类: Blob可以 ...

  2. MongoDB 中文的全文索引

    MongoDB 从3.2 版本以后添加了对中文索引的支持: 官网链接:https://docs.mongodb.com/manual/reference/text-search-languages/ ...

  3. MongoDB (课时1,2)

    1.数据库之中支持的的SQL语句是由IBM开发出来的,使用并不麻烦,就是几个简单的单词:select, from, where,  group by, having, order by.目前最流行的数 ...

  4. 面向对象程序设计-C++_课时24多态的实现

    所有带virtual的类的对象,里面最上面有一个隐藏的指针vptr,指向一张表vtable #include <iostream> using namespace std; class A ...

  5. mongodb 索引,全文索引与唯一索引

    唯一索引创建: db.createIndex({name: 1}, {unique: true})

  6. MongoDB小结24 - 索引简介2

    索引的名字 集合中每个索引都有一个字符串类型的名字,来唯一标识索引. 服务器通过名字来操作或者删除索引. 要注意的是,索引名有字符个数限制,所以索引创建时一定要用自定义的名字,如 db.user.en ...

  7. MongoDB的全文索引

    ​ Table of Contents 背景 如何使用 准备工作:插入数据 建立全局索引 查询结果 使用中存在哪些问题? 英文存在停止词 中文无法采用全文索引 前面了解了多种索引方式,比如单键索引,多 ...

  8. Mongodb 学习笔记简介

    目录 1       准备工作... 5 1.1        相关网址... 6 1.1        下载安装... 6 1.1.1         下载:... 6 1.1.2         ...

  9. 重磅 | 阿里云与MongoDB达成战略合作,成为全球唯一提供最新版MongoDB的云厂商

    MongoDB是业界最受欢迎的开源数据库之一,2019年一份面向开发者的数据库调查报告中,MongoDB以 24.6%的使用率占据次席. 阿里云是国内最早提供MongoDB服务的云厂商,提供完全兼容M ...

随机推荐

  1. 使用HttpClient进行远程接口测试

    前两天在工作中,项目组长给我了一个远程接口让我给测一下,因为是http协议,所以我首先想到了用httpClient工具类来测试,网上一查,找到了好多示例代码,随便复制了一个demo进行了简单的修改,结 ...

  2. iOS 网易彩票-5设置模块二

    产品推荐 产品推荐使用的是UICollectionView控件,UICollectionView 和 UICollectionViewController 类是iOS6 新引进的API,用于展示集合视 ...

  3. git的使用(包括创建远程仓库到上传代码到git的详细步骤以及git的一些常用命令)

    A创建远程仓库到上传代码到git 1)登陆或这注册git账号 https://github.com 2)创建远程仓库 3)打开终端输入命令 cd到你的本地项目根目录下,执行如下git命令 git in ...

  4. Bootstrap3-文字样式

    Bootstrap将全局font-size设置为14px,line-height为1.428.这些属性直接赋给<body>和所有段落元素.另外,<p>(段落)还被设置了等于1/ ...

  5. swift 错误集锦

    1.注册 NIB 出现错误 // error:'registerNib(_:forCellReuseIdentifier:)' has been renamed to 'register' (_:fo ...

  6. JavaScript实现功能全集

    JavaScript就这么回事1:基础知识 1 创建脚本块 <script language="JavaScript">JavaScript code goes her ...

  7. 在Java中使用Sqlite数据库

    一.安装 下载最新的 Sqlite Jdbc 驱动程序jar文件,并添加到Java工程的class路径下: 二.使用 以 sqlite Jdbc 驱动版本为 sqlitejdbc-v56.jar 为例 ...

  8. HDFS文件操作

    hadoop装好后,文件系统中没有任何目录与文件 1. 创建文件夹 hadoop fs -mkdir -p /hkx/learn 参数-p表示递归创建文件夹 2. 浏览文件 hadoop fs -ls ...

  9. Filter过滤器与Session会话跟踪技术

    Filter过滤器 适用场景 1.为web应用程序的新功能建立模型(可被添加到web应用程序中或者从web应用程序中删除而不需要重写基层应用程序代码)2.用户授权Filter:负责检查用户请求,根据请 ...

  10. 为自己的网站添加Markdown功能 markedjs

    Markdown几个简单的标记可以实现轻量级的代替Word方案 不多说,引入开源库js https://github.com/chjj/marked使用方式简单,如下实例代码: <!DOCTYP ...