浅析MongoDB 全文检索_MongoDB

来源:脚本之家  责任编辑:小易  

我用的是mongoose,不过也可以直接写mongodb的查询var GoodSchema=new Schema({ name:String});var ShopSchema=new Schema({userId:Schema.ObjectId,name:String,point:{type:[Number],index:'2d'},goods:[GoodSchema],tags:{},categorys:[String]});现在我想要根据给定的point 和商品名称,查找某个点附近的店家里面谁有卖这里商品的原先查询语句是写成var userPoint=[118.4444,24.4444]var content="耳机var regexp=new Regexp(content);ShopModel.find({point:{$near:userPoint},goods:{$elemMatch:{name:regexp}}}).limit(100).exec(cb)然后发现返回过来的商店里面带有的商品信息(goods)是所有的商品信息,不是我想要的只有匹配的商品的信息(mongodb 默认返回整个文档,除非你提供了projection)接着去看了下mongodb的官方文档的projection里面的$,$elemMatch但是根据官方文档里面讲的,无论$,还是$elemMatch都是返回数组里面第一个匹配元素,并不能像我所需要的返回所有匹配的元素然后还大概了解了下 map/reduce,但是不知道是不是该用它,还是有其他什么解决方案(主要是性能考虑,如果采用map/reduce 显然对数组里面的每个元素都进行了一次过滤,然后如果说商家数量多点,商品数量多点,会不会死的比较惨。还是说我这个数据结构设计不合理,把商品单独出来var GoodSchema=new Schema({ name:String,shopPoint:{type:[Number],index:'2d'},shopId:Schema.ObjectId});var ShopSchema=new Schema({userId:Schema.ObjectId,name:String,point:{type:[Number],index:'2d'},tags:{},categorys:[String]});www.zgxue.com防采集请勿采集本网。

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

var mongoose=require('mongoose'), DB_URL='mongodb:/localhost:27017/mongoosesample';mongoose.connection.on('connected',function(){ console.log('Mongoose connection open to '+DB_URL);

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

用mongodb做模糊搜索是作死。hash结构对于模糊查询无能为力,除非你搜索特定的词,然后做相关索引可以增加效率,但是收益还是小,建议上Lucence或者Sphinx来配合mongodb来做搜索。

MongoDB 从 2.4 版本开始支持全文检索,目前支持15种语言的全文索引。 danish dutch english finnish french german hungarian italian norwegian portuguese romanian russian spanish swedish turkish

var mongoose=require('mongoose'), DB_URL='mongodb:/localhost:27017/mongoosesample';mongoose.connection.on('connected',function(){ console.log('Mongoose connection open to '+DB_URL);

MongoDB是文档型的行存储,行存储的读写过程是一致的,都是从第一列开始,到最后一列结束。行存储的写入是一次性完成,消耗的时间百比列存储少,并且能够保证数据的完整性,缺点是数度据读取过程

启用全文检索

你需要有一个字段标示写入数据库的时间,然后查询的时候,设定查询时间段: db.things.find({\"createTime\":{\"$gt\":\"2014-10-29 0:0:0\"}})/大于某个时间 db.things.find({\"createTime\":{\"$lt\":

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

>db.adminCommand({setParameter:true,textSearchEnabled:true})

或者使用命令:

mongod --setParameter textSearchEnabled=true

创建全文索引

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

{ "post_text": "enjoy the mongodb articles on Runoob", "tags": [ "mongodb", "runoob" ]}

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

>db.posts.ensureIndex({post_text:"text"})

使用全文索引

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

>db.posts.find({$text:{$search:"runoob"}})

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

{ "_id" : ObjectId("53493d14d852429c10000002"), "post_text" : "enjoy the mongodb articles on Runoob", "tags" : [ "mongodb", "runoob" ]}

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

>db.posts.runCommand("text",{search:"runoob"})

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

删除全文索引

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

>db.posts.getIndexes()

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

>db.posts.dropIndex("post_text_text")

以上就是浅析MongoDB 全文检索的详细内容,更多关于MongoDB 全文检索的资料请关注真格学网其它相关文章!

您好2113,很高兴为您解答。这是可以的,官方文档说了怎么操作:找一个中文5261分词库,把分词存到类似 tags 的数据中如若4102满意1653,请点回击右侧【采纳答案】,如若还有问题,请点击【追问】希望我的回答对您有所帮助,望采纳!答 O(∩_∩)O~内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • mongodb实现基于关键词的文章检索功能(c#版)
  • 深入了解mongodb 分布式集群
  • 开源 5 款超好用的数据库 gui 带你玩转 mongodb、redis、sql 数据库(推荐)
  • java代码实现mongodb动态条件之分页查询
  • mongodb设计方法以及技巧示例详解
  • mongodb数据库基础操作总结
  • express+mongoose实现对mongodb增删改查操作详解
  • win7平台快速安装、启动mongodb的方法
  • 使用mongodb实现打卡签到系统的实例代码
  • centos7安装和卸载mongodb数据库的方法
  • 关于单台mongodb实例开启oplog的过程详解
  • 记一次mongodb中admin数据库导致的事故
  • mongodb 语法使用小结
  • windows下mongodb配置用户权限实例
  • mongodb 添加用户及权限设置详解
  • mongodb数据库foreach循环遍历用法
  • mongodb常用操作命令大全
  • mongodb如何开启用户访问控制详解
  • mongodb中mapreduce编程模型使用实例
  • mongoDB可以中文全文检索吗
  • mongodb如何对含有内嵌数组的集合进行检索
  • mongodb 检索 1000万条记录 需要多少时间
  • 怎么在js中用正则表达式搜索mongodb数据库
  • 如何利用mongodb+node.js完成一个搜索的功能
  • 如何利用mongodb+node.js完成一个搜索的功能
  • 如何利用mongodb+node.js完成一个搜索的功能
  • mongodb用什么格式存储数据
  • mongodb数据库怎么查询出某一段时间内的数据
  • mongodb查询中的null和存在不存在
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页mongodb实现基于关键词的文章检索功能(c#版)深入了解mongodb 分布式集群开源 5 款超好用的数据库 gui 带你玩转 mongodb、redis、sql 数据库(推荐)java代码实现mongodb动态条件之分页查询mongodb设计方法以及技巧示例详解mongodb数据库基础操作总结express+mongoose实现对mongodb增删改查操作详解win7平台快速安装、启动mongodb的方法使用mongodb实现打卡签到系统的实例代码centos7安装和卸载mongodb数据库的方法关于单台mongodb实例开启oplog的过程详解记一次mongodb中admin数据库导致的事故mongodb 语法使用小结windows下mongodb配置用户权限实例mongodb 添加用户及权限设置详解mongodb数据库foreach循环遍历用法mongodb常用操作命令大全mongodb如何开启用户访问控制详解mongodb中mapreduce编程模型使用实例mongodb常用操作命令大全mongodb各种查询操作详解mongodb数据库插入、更新和删除操mongodb 数据库操作--备份 还原 mongodb插入数据的3种方法mongodb中使用distinct去重的简单mongodb整库备份与还原以及单个cmongodb查询操作限制返回字段的方浅谈mysql和mariadb区别(mariadbmongodb 实现远程连接windows10安装mongodb4.0详细步骤及启动配mongodb使用c#驱动数据插入demomongodb优化心得分享浅谈mysql和mariadb区别(mariadb和mysql的28个mongodb经典面试题详解mongodb shell 命令实例总结【进阶篇】mongodb的"not master and slaveok=falsemongodb快速入门笔记(六)之mongodb的文档修复 mac brew 安装 mongodb 报 error: nmongodb特点与体系结构等简介
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved