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. 获取多达 16GB 的 Dropbox 免费空间!

    Dropbox官网

  2. SQL中常见语句

    SQL中常见语句笔记: --替换字段中的回车符和换行符 ) ), '') --删除表命令 DROP TABLE [dbo].[MGoods_Test] --删除表中数据命令 DELETE FROM [ ...

  3. Summary: sorting Algorithms

    Insertion sort is a simple sorting algorithm that builds the final sorted array (or list) one item a ...

  4. SpringMVC学习笔记二第一个小的程序

    首先:我们要用springmvc来写一个helloworld的例子: 首先我们需要导入所需要的架包: /demo1/WebRoot/WEB-INF/lib/commons-logging-1.1.1. ...

  5. php hash算法

    任意长度的输入, 固定长度的输出 ,该输出就是hash值,这种转换就是一种压缩映射,也就是hash值的空间远远小于输入的空间, 不同的输入可能散列成相同的输出,而不能从hash值来唯一的确定输入值. ...

  6. sencha touch调试时Please close other application using ADB: Monitor, DDMS, Eclipse

    1.运行——cmd——  netstat -aon|findstr "5037"  2.打开任务管理器,查看所有进程 显示进程pid(文件-查看)--查找pid=7740的结束.

  7. Root :: AOAPC I: Beginning Algorithm Contests (Rujia Liu) Volume 5. Dynamic Programming

    10192 最长公共子序列 http://uva.onlinejudge.org/index.php?option=com_onlinejudge& Itemid=8&page=sho ...

  8. PHP读取sphinx 搜索返回结果完整实战实例

    PHP读取sphinx 搜索返回结果完整实战实例 网上搜索N久都没有一个正在读取返回sphinx结果的实例,都是到了matches那里就直接var_dump或者print_r了,没有读取到字段的例子, ...

  9. python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍

    python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍 IDLE默认不能显示行号,使用ALT+G 跳到对应行号,在右下角有显示光标所在行.列.pycharm免费社区版.Su ...

  10. JavaScript中几种 获取元素的方式

    1.根据id获取元素 document.getElementById("id属性的值"); 2.根据标签名字获取元素 document.getElementsByTagName(& ...