51自学网 - 轻松自学从此开始!

51自学网

当前位置: 首页 > 自学教程 > 教程天下 >

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

时间:2017-01-11 21:53来源:网络整理 作者:51自学网
查询速度要够快。(理论上关键词检索比全文检索要快很多的) 在网上找了一大圈,就没有一个靠谱的方法,基本都是只能传入单词来检索,而且基本都没有提供C#驱动版本的代码,于是乎自己研究出了这个实现方案: 首先要求使用标签、分词、关键词提取组件对文

查询速度要够快。(理论上关键词检索比全文检索要快很多的)

在网上找了一大圈,就没有一个靠谱的方法,基本都是只能传入单词来检索,而且基本都没有提供C#驱动版本的代码,于是乎自己研究出了这个实现方案:

首先要求使用标签、分词、关键词提取组件对文章对应的关键词进行提取,然后作为数组格式,存入文章的Keywords字段中。

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

核心检索代码:

/// <summary> /// 根据关键词获取文章编号与标题映射。 /// 注意:此方法会返回最为匹配的若干个项目,并根据匹配程度降序排列,即使是没有任何关键词匹配项,也会返回若干个结果的。 /// 另需注意:如果是根据文章关键词来查询,一般来说其中一定包含原文章,所以应该把期望获得的数量加1,并在结果中移除原文。 /// </summary> /// <param>数量上限</param> /// <param>关键词集合</param> /// <returns>文章编号与标题映射字典</returns> public async Task<Dictionary<Guid, string>> GetArticleDicByKeywordsAsync(int limitNum, IEnumerable<string> keywords) { var list = await Database.GetCollection<Domain.Entity.Article>("Article").Aggregate() .Match(q => !q.IsDeleted && q.Keywords != null) .Project(q => new { q.Id, q.Title, Count = q.Keywords.Count(t => keywords.Contains(t)) }) .SortByDescending(q => q.Count) .Limit(limitNum) .ToListAsync(); return list.ToDictionary(f => f.Id, f => f.Title); }

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容