MongoDB的全文索引
Table of Contents
前面了解了多种索引方式,比如单键索引,多键索引,复合索引等,这些感觉都太空,咱今天学习一下实用的索引——全文索引。
背景
比如我们在慕课中搜索一个内容mongodb,他是在全局搜索,包括课程,猿问,手记等。如果这个时候我们通过常见的查询,要写多个模糊查询,并且性能很慢,比如有些课程的题目中并没有mongodb,但是课程的简介中有mongodb,也需要查询出来。这个对性能的要求就太高了,有可能查询出来的时间根本忍受不了,就要砸电脑啦。
这个时候我们就可以使用MongoDB的全文索引功能。
如何使用
准备工作:插入数据
我们先做好准备工作,往数据库里面插入四条数据,如下图
建立全局索引
下图的意思是在name字段上建立全局索引,注意index type为text,意思是建立全局索引。
如果字段选择了$**,即表示全部字段。下面都是用了在name字段上加了全局索引。
查询结果
我们查询name为zhangsan的数据,如下图。
我们查询name为zhangsan或lisi的数据,如下图,空格连接,即空格表示或关系。
我们查询name为zhangsan,排除为lisi的数据,如下图,横杠表示非的关系。
我们查询name为zhangsan且name为one的数据,如下图,转义字符表示引号,如果字符加了引号即表示且的关系。
使用中存在哪些问题?
英文存在停止词
上面的查询虽然查询出来挺好的,但是下面我们将找找他的问题。
比如现在数据库中的数据如下。
我们要查询name包含is的数据,按道理来说,我们应该查出两条数据,可是执行结果如下。
一条数据都没查出来,这是因为is为停止词,具体原因:(该段取自https://www.cnblogs.com/yako/p/6805717.html)。
原来在英语里面会遇到很多a,the,or等使用频率很多的字或词,常为冠词、介词、副词或连词等。如果搜索引擎要将这些词都索引的话,那么几乎每个网站都会被索引,也就是说工作量巨大。可以毫不夸张的说句,只要是个英文网站都会用到a或者是the。那么这些英文的词跟我们中文有什么关系呢? 在中文网站里面其实也存在大量的stopword,我们称它为停止词。比如,我们前面这句话,“在”、“里面”、“也”、“的”、“它”、“为”这些词都是停止词。这些词因为使用频率过高,几乎每个网页上都存在,所以搜索引擎开发人员都将这一类词语全部忽略掉。如果我们的网站上存在大量这样的词语,那么相当于浪费了很多资源。
中文无法采用全文索引
最大的问题来了,这货居然不支持中文。啊啊啊,是不是要疯啦。准确的来说,支持中文的能力没有想象中强大。
比如数据如下,
我想查询名称中包含张的数据,结果是查询不出来。
但我要查询名称中包含李的数据,结果却有。
这说明MongoDB中文全文索引建立方式与英文几乎相同 是根据词(英文单词)的方式建立的。
如果一个值里面有多个值 则需要按空格方式隔开,”李 四” 系统则认为是两个词。
感觉MongodB的中文全文索引沒有想象中的强大。
最新文章
- JQuery的无缝滚动
- swift复合类型
- linux .net mono方案测试记录与报告(一)
- 转载-- C/S 与 B/S 区别
- Mysqldb连接Mysql数据库(转)
- 使用iText生成带底图的PDF
- 初学 Play Framework 以及可能遇到的问题
- Webservice WCF WebApi
- OPENWRT make menuconfig错误之一
- WEB中会话跟踪
- 屌丝就爱尝鲜头——java8再判断
- 部署OpenStack问题汇总(三)--Failed to add image
- 哈夫曼编码(Huffman coding)的那些事,(编码技术介绍和程序实现)
- HTTP2 概述
- Centos7环境下消息队列之ActiveMQ实战
- (转)什么?你还不会写JQuery 插件
- Nginx配置文档具体解释
- activiti自己定义流程之Spring整合activiti-modeler实例(六):启动流程
- python反编译之字节码
- SQL Server 2016,2014 “无法找到数据库引擎启动句柄”
热门文章
- HDU-4027-Can you answer these queries?线段树+区间根号+剪枝
- 牛客小白月赛6 B 范围 数学
- CodeForces Round 525
- 【Offer】[60] 【n个骰子的点数】
- css 实现居中的五种方式
- Python网络爬虫实战(一)快速入门
- Docker Compose基本使用-使用Compose启动Tomcat为例
- hbase 修复 hbase hbck
- 重学Java(一):与《Java编程思想》的不解之缘
- C++输入输出常用格式(cin,cout,stringstream)