MongoDB 全文检索

MongoDB 全文检索

全文检索对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。

这个过程类似于通过字典中的检索字表查字的过程。

MongoDB 从 2.4 版本开始支持全文检索,目前支持15种语言的全文索引。

danish

dutch

english

finnish

french

german

hungarian

italian

norwegian

portuguese

romanian

russian

spanish

swedish

turkish

启用全文检索

MongoDB 在 2.6 版本以后是默认开启全文检索的,如果你使用之前的版本,你需要使用以下代码来启用全文检索:

bash 复制代码
>db.adminCommand({setParameter:true,textSearchEnabled:true})

或者使用命令:

bash 复制代码
mongod --setParameter textSearchEnabled=true

创建全文索引

考虑以下 posts 集合的文档数据,包含了文章内容(post_text)及标签(tags):

bash 复制代码
{
   "post_text": "enjoy the mongodb articles on Caiyuan",
   "tags": [
      "mongodb",
      "caiyuan"
   ]
}

我们可以对 post_text 字段建立全文索引,这样我们可以搜索文章内的内容:

bash 复制代码
>db.posts.ensureIndex({post_text:"text"})

使用全文索引

现在我们已经对 post_text 建立了全文索引,我们可以搜索文章中的关键词 caiyuan:

bash 复制代码
>db.posts.find({$text:{$search:"caiyuan"}})

以下命令返回了如下包含 caiyuan关键词的文档数据:

bash 复制代码
{ 
   "_id" : ObjectId("53493d14d852429c10000009"), 
   "post_text" : "enjoy the mongodb articles on Caiyuan", 
   "tags" : [ "mongodb", "caiyuan" ]
}

如果你使用的是旧版本的 MongoDB,你可以使用以下命令:

bash 复制代码
>db.posts.runCommand("text",{search:"caiyuan"})

使用全文索引可以提高搜索效率。

删除全文索引

删除已存在的全文索引,可以使用 find 命令查找索引名:

bash 复制代码
>db.posts.getIndexes()

通过以上命令获取索引名,本例的索引名为post_text_text,执行以下命令来删除索引:

bash 复制代码
>db.posts.dropIndex("post_text_text")
相关推荐
noravinsc1 小时前
e.g. ‘django.db.models.BigAutoField‘.
数据库·django
Q_Q19632884751 小时前
python的漫画网站管理系统
开发语言·spring boot·python·django·flask·node.js·php
yuanpan3 小时前
MongoDB与PostgreSQL两个数据库的特点详细对比
数据库·mongodb·postgresql
白露与泡影3 小时前
基于Mongodb的分布式文件存储实现
分布式·mongodb·wpf
孤的心了不冷3 小时前
【Linux】Linux安装并配置MongoDB
linux·运维·mongodb·容器
noravinsc15 小时前
redis是内存级缓存吗
后端·python·django
百锦再15 小时前
大数据技术的主要方向及其应用详解
大数据·linux·网络·python·django·pygame
noravinsc16 小时前
django中用 InforSuite RDS 替代memcache
后端·python·django
好吃的肘子20 小时前
MongoDB 应用实战
大数据·开发语言·数据库·算法·mongodb·全文检索
独泪了无痕21 小时前
MongoTemplate 基础使用帮助手册
spring boot·mongodb