分类: MongoDB

MongoDB实现基于关键词的文章检索功能(C#)

我的实现目标是: 可以通过一个或多个关键词搜索到文章。 可以通过文章的关键词列表查询到其相关文章。 查询到的结果依据相关程度降序排列。 查询速度要够快。(理论上关键词检索比全文检索要快很多的) 在网上找了一大圈,就没有一个靠谱的方法,基本都是只能传入单词来检索,而且基本都没有提供C#驱动版本的代码,于是乎自己研究出了这个实现方案: 首先要求使用标签、分词、关键词提取组件对文章对应的关键词进行提取,然后作为数组格式,存入文章的Keywords字段中。 核心检索代码: /// <summary> /// 根据关键词获取文章编号与标题映射。 /// 注意:此方法会返回最为匹配的若干个项目,并根据匹配程度降序排列,即使是没有任何关键词匹配项,也会返回若干个结果的。 /// 另需注意:如果是根据文章关键词来查询,一般来说其中一定包含原文章,所以应该把期望获得的数量加1,并在结果中移除原文。 /// </summary> /// <param name=”limitNum”>数量上限</param> /// <param name=”keywo...

更多

.Net实现Log4Net记录日志到MongoDB的源码分享

Log4Net是个很方便的日志记录工具,起初我是用txt形式记录日志的,这种方式简单、直接,非常方便。 但考虑到将来可能会有大量的日志,或者说还需要做一些日志查询功能,那么txt形式显然就不合适了。 于是就要考虑用数据库来记录日志,鉴于我常用的数据库为MongoDB,而Log4Net默认是不支持MongoDB的,又不想为个日志再装新数据库,便开始寻找解决方法。 所幸我找到了这样一个开源项目—— log4mongo:https://github.com/log4mongo/log4mongo-net 不过它存在两个问题: 目前支持的MongoDB官方C#驱动版本为1.8.2,而目前的官方驱动已经更新到2.0+了,新版发生了一些变化,旧代码已经不能用了。 并不是以强类型存入数据库,而是自定义的BsonDocument,这在C#中查询和使用起来非常不方便。 这样只能自己动手改造一下了。 首先我将官方驱动版本升到了2.0.0.828,并且修正了原来跑不通的旧代码。 其次构建了Log、LocationInformation、ExceptionInformation三个实体类,来保存完整的日志信息...

更多

虚拟机乌班图系统安装和配置 MongoDB 3.05 详解

MongoDB的3.0及以后的版本和之前的2.6版是不兼容的,系统里已经有2.6版了,而且也经常需要用到,但最近又想尝试用最新版本做新项目的开发,于是考虑以虚拟机作为MongoDB数据库服务器,宿主机开发时只要访问虚拟机存取数据即可。 仅用于做数据库服务器的话,操作系统当然以轻量为优,Linux自然是优选,不过本人乃Linux苦手,所以最好还是整个有UI的,乌班图(Ubuntu)一直以来都很合我意,以下详尽记录整个安装过程: 虚拟机使用VMware,乌班图使用的是 Kylin 版 14.04 64位,从乌班图的中国官网下载到的:http://cn.ubuntu.com/download 下载好ISO后创建新虚拟机: 设置主机名和密码: 设置虚拟机名称: 设置磁盘容量: 确认创建: 创建后会开始自动安装操作系统: 等待安装完毕后,输入刚才设置的密码登录: PS:我进系统第一件事就是把娘炮向的壁纸和主题给换了…… 登入之后默认连不上网: 进行虚拟机设置,网络连接改为“桥接模式”: 等一会就连网成功了,如果不成功就检查你的路由器设置吧,是不是没开启DHCP服务什么的,或者是否对MAC地址有什...

更多

ABP结合MongoDB的使用范例

ASP.NET Boilerplate官方的范例都是基于Entity Framework和NHibernate的,说是支持MangoDB,源码中也确实有MangoDB,但用Google寻遍世界也没找到任何说明或范例,无奈只有自己摸索了。 由于是刚刚接触ABP,测试时举步维艰,总算是得以达成,以下总结记录下这得来不易的成果: 首先前往官网去下载模板: http://www.aspnetboilerplate.com/Templates 选项如下: 下载好之后解压缩,用VS打开。 这时管理解决方案的NuGet包: 执行还原命令: 慢慢等待其自动下载和安装。 下好之后关闭NuGet窗口,执行重新生成解决方案操作,全部编译成功即可。 然后去其github空间: https://github.com/aspnetboilerplate 使用Git下载 aspnetboilerplate 项目的源码到本地,其地址为:https://github.com/aspnetboilerplate/aspnetboilerplate.git 下载好源码之后,添加现有项目: 选取这个 Abp.MongoDB ...

更多

正则表达式匹配“特定字符或开头或结尾”的方法

这个需求在标签搜索中常要用到,假设数据库中有类似以下标签字段字符串: 红色,樱桃红色,红色,玫红色,红宝石,红色尖晶石,玫红色石榴石,红色 这里我们要找完全匹配于“红色”的标签,为了方便测试准确性,我们使“红色”出现在了最前面、中间、最后面。 “红色”两个字前面可能是“,”或字符串开头,后面可能是“,”或字符串结尾,起先我想到的就是方括号匹配“[,^]”和”[,$]”,然而这根本不管用(C#、Mongodb和Javascript中都无效),原因不明,后来琢磨了半天,只能采用这样的形式才能匹配成功:”(^|,)”和”(,|$)” 最终的表达式为:(^|,)s*红色s*(,|$) 我们来检验一下: 替换后的结果: 分享或转载本博客站点内的所有原创内容时,都必须遵循此协议: 姓名标示-非商业性-相同方式分享 4.0 国际 (CC BY-NC-SA 4.0) 同时必须附加指向本文页面或本博客首页的超链接。 除此之外的转载、分享方式都必须征得本博客作者的授权,否则将会诉诸法律。

更多

MongoDB官方驱动的日期时间问题

默认存储到数据库的都是世界标准时间,使用时还需要进行转换,不过可以通过特性指定属性自动转换为本地时间,代码示例如下: [MongoDB.Bson.Serialization.Attributes.BsonDateTimeOptions(Kind = DateTimeKind.Local)] public DateTime CreateTime { get; set; } 这样数据库完全不受任何影响: 但我们在程序中取回的数据已经正确转换为了本地时间: 分享或转载本博客站点内的所有原创内容时,都必须遵循此协议: 姓名标示-非商业性-相同方式分享 4.0 国际 (CC BY-NC-SA 4.0) 同时必须附加指向本文页面或本博客首页的超链接。 除此之外的转载、分享方式都必须征得本博客作者的授权,否则将会诉诸法律。

更多

MongoDB2.6安装及添加为服务的方法

系统环境: msi文件,安装到默认目录,我的是:C:Program FilesMongoDB 2.6 Standard。 在安装目录下新建data和log目录。 运行测试 以管理员模式运行cmd.exe,切换到安装目录中的bin目录下,执行以下命令: mongod.exe –dbpath “C:Program FilesMongoDB 2.6 Standarddata” 注意路径两侧一定要加引号,因为默认安装目录的路径中包含空格。 成功后显示: 此时浏览器访问http://localhost:27017/,显示如下: 此时data目录内将会自动生成一些数据: 添加为Windows服务 还是使用管理员模式运行cmd.exe,切换到bin目录,执行如下命令: mongod.exe –logpath “C:Program FilesMongoDB 2.6 Standardlogmongodb.log” –logappend –dbpath “C:Program FilesMongoDB 2.6 Standarddata” –directoryperdb –serviceName ...

更多

开发高性能的MongoDB应用—浅谈MongoDB性能优化

进阶级的数据库优化技巧,讲得简明透彻,值得推荐。 分享或转载本博客站点内的所有原创内容时,都必须遵循此协议: 姓名标示-非商业性-相同方式分享 4.0 国际 (CC BY-NC-SA 4.0) 同时必须附加指向本文页面或本博客首页的超链接。 除此之外的转载、分享方式都必须征得本博客作者的授权,否则将会诉诸法律。

更多

在MongoDB中查询GUID类型数据的方法

MongoDB不支持GUID,存入数据库的GUID通常是这样表示的: /* 0 */ { “_id” : new BinData(3, “Fl109F7FZkOeJN9eq8Hsvw==”), “_t” : “源文件”, “创建时间” : ISODate(“2014-07-15T08:46:30.115Z”), “创建者用户名” : “hekang”, “最后修改时间” : ISODate(“2014-07-15T08:46:30.115Z”), “最后修改者用户名” : “hekang”, “名称” : “z.jcd”, “说明” : null, “容量” : 125105, “原扩展名” : “.jcd”, “文件编号” : ObjectId(“53eeccfc06cb1957149829b0”), “主校验编码” : “1aacb589cb9d4ca65fafef4cec54e22c”, “辅校验编码” : “22556785” } 第三行所显示的即是我们的GUID类型的名为“Id”的属性通过C#官方驱动存入数据库后的形式。 这是Base64类型的值,通过下面这段Javascri...

更多

实用的Mongodb官方驱动辅助扩展方法

因为实测使用Lambda表达式查询的效率并不比标准Api差,所以我希望尽可能地使用Lambda表达式来完成Mongodb的查询工作。 这些扩展方法能够实现便捷的Lambda查询,例如: c.Find(q => !q.性别 && q.身高 > 1.8 && q.存款 > 5000) 当然有些地方还是会需要用到标准Api的,这里也为多条件过滤式查询提供了更方便的调用方式: c.Find(Query<数据>.EQ(q => q.性别, false), Query<数据>.GTE(q => q.身高, 1.8)) 另外也对Javascript代码方式的查询调用方式做了优化,这也是很常用的使用方式,适合于在后台让管理员自定义查询代码进行查询: c.Find(“this.性别==false&&this.身高>=1.89&&this.生日.getFullYear()>=1995”) 但须注意,Javascript使用的是$where方式查询,速度比较慢,上述查询在10万条...

更多