一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - MongoDB - MongoDB實現基于關鍵詞的文章檢索功能(C#版)

MongoDB實現基于關鍵詞的文章檢索功能(C#版)

2020-05-05 17:24MRR MongoDB

這篇文章主要介紹了MongoDB實現基于關鍵詞的文章檢索功能(C#版)的相關資料,需要的朋友可以參考下

我的實現目標是:

可以通過一個或多個關鍵詞搜索到文章。

可以通過文章的關鍵詞列表查詢到其相關文章。

查詢到的結果依據相關程度降序排列。

查詢速度要夠快。(理論上關鍵詞檢索比全文檢索要快很多的)

在網上找了一大圈,就沒有一個靠譜的方法,基本都是只能傳入單詞來檢索,而且基本都沒有提供C#驅動版本的代碼,于是乎自己研究出了這個實現方案:

首先要求使用標簽、分詞、關鍵詞提取組件對文章對應的關鍵詞進行提取,然后作為數組格式,存入文章的Keywords字段中。

MongoDB實現基于關鍵詞的文章檢索功能(C#版)

核心檢索代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/// <summary>
/// 根據關鍵詞獲取文章編號與標題映射。
/// 注意:此方法會返回最為匹配的若干個項目,并根據匹配程度降序排列,即使是沒有任何關鍵詞匹配項,也會返回若干個結果的。
/// 另需注意:如果是根據文章關鍵詞來查詢,一般來說其中一定包含原文章,所以應該把期望獲得的數量加1,并在結果中移除原文。
/// </summary>
/// <param name="limitNum">數量上限</param>
/// <param name="keywords">關鍵詞集合</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);
}

注意:這里一定要用Aggregate()方法做聚合,而不是常用的Find()方法做查詢,Find()方法后面跟Project()方法也不會改變方法鏈中操作的對象類型,這樣后面的SortByDescending()方法的目標對象還是Article類,而不是Project()方法中定義的匿名類,而SortByDescending()方法中傳入的表達式又僅允許用來選擇對象屬性,不允許進行任何計算,所以就根本無法實現我們的需求,我在發現Aggregate()方法之前就在這里一直卡著很久~

用作關鍵詞搜索時一般就是把關鍵詞傳入就可以了,不過傳回的結果也有可能壓根沒有匹配到任何關鍵詞,所以最好在發給用戶前再檢查一遍項目的匹配程度,把沒有任何匹配的結果濾掉。

用作相關文章搜索時,直接把原文章的Keywords屬性值傳入,獲取數量要比你預計的數量多1,因為非常可能你的原文章就在獲取到的列表中,而且是前列,獲取后濾掉原文章的ID,再執行Take方法返回你需要數量的項目即可(執行Take方法是為了以防你的原文沒出現在列表中,這概率極小但也是有的)。

為了增進查詢效率,還可以預設好索引,代碼如下:

?
1
2
3
4
5
var c=Database.GetCollection<Domain.Entity.Article>("Article");
c.Indexes.DropAll();
await c.Indexes.CreateOneAsync(
Builders<Domain.Entity.Article>.IndexKeys.Ascending(q => q.Keywords));
//參考自:http://mongodb.github.io/mongo-csharp-driver/2.2/reference/driver/admin/#creating-an-index

所使用的C#官方驅動版本是:MongoDB.Driver.2.2.3

延伸 · 閱讀

精彩推薦
  • MongoDB遷移sqlserver數據到MongoDb的方法

    遷移sqlserver數據到MongoDb的方法

    這篇文章主要介紹了遷移sqlserver數據到MongoDb的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下...

    聽楓xl9682021-01-03
  • MongoDBMongoDB中javascript腳本編程簡介和入門實例

    MongoDB中javascript腳本編程簡介和入門實例

    作為一個數據庫,MongoDB有一個很大的優勢——它使用js管理數據庫,所以也能夠使用js腳本進行復雜的管理——這種方法非常靈活 ...

    MongoDB教程網6982020-04-24
  • MongoDB分布式文檔存儲數據庫之MongoDB分片集群的問題

    分布式文檔存儲數據庫之MongoDB分片集群的問題

    這篇文章主要介紹了分布式文檔存儲數據庫之MongoDB分片集群的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋...

    Linux-18743072020-12-20
  • MongoDBMongodb實現定時備份與恢復的方法教程

    Mongodb實現定時備份與恢復的方法教程

    這篇文章主要給大家介紹了Mongodb實現定時備份與恢復的方法教程,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面...

    chenjsh364522020-05-13
  • MongoDBMongoDB安裝圖文教程

    MongoDB安裝圖文教程

    這篇文章主要為大家詳細介紹了MongoDB安裝圖文教程,分為兩大部分為大家介紹下載MongoDB和安裝MongoDB的方法,感興趣的小伙伴們可以參考一下 ...

    Yangyi.He6132020-05-07
  • MongoDBMongoDB憑什么躋身數據庫排行前五

    MongoDB憑什么躋身數據庫排行前五

    MongoDB以比去年同期超出65.96分的成績繼續雄踞榜單前五,這個增幅在全榜僅次于PostgreSQL的77.99,而其相對于4月份的6.10分的增長也是僅次于微軟SQL Server排名...

    孫浩峰3892020-05-22
  • MongoDBMongoDB 內存使用情況分析

    MongoDB 內存使用情況分析

    都說 MongoDB 是個內存大戶,但是怎么知道它到底用了多少內存呢...

    MongoDB教程網10002020-09-29
  • MongoDBmongodb基本命令實例小結

    mongodb基本命令實例小結

    這篇文章主要介紹了mongodb基本命令,結合實例形式總結分析了MongoDB數據庫切換、查看、刪除、查詢等基本命令用法與操作注意事項,需要的朋友可以參考下...

    dawn-liu3652020-05-26
主站蜘蛛池模板: 国产chinese男同gay | aⅴ视频在线免播放观看 | 成人中文字幕在线观看 | 亚洲第一网色综合久久 | 欧美午夜性春猛交bbb | avtt在线| 亚洲 欧美 另类 中文 在线 | 91精品啪在线观看国产老湿机 | 范冰冰特黄xx大片 | 性夜影院午夜看片 | 欧美日韩亚洲另类人人澡 | 97影院伦理 | 污小说| 国产欧美日韩不卡 | 国产视频99 | 人与动人物性行为zozo共患病 | 男人和女人全黄一级毛片 | 秋霞午夜视频 | 午夜伦伦电影理论片大片 | 91久久国产成人免费观看资源 | 亚洲国产精品福利片在线观看 | 欧美影院天天5g天天爽 | 无码爽死成人777在线观看网站 | 99久久精品国产一区二区 | 国产特黄一级一片免费 | 91制片厂制作传媒破解版免费 | 2021国产麻豆剧传媒剧情动漫 | 久青草国产观看在线视频 | 国产一区风间由美在线观看 | 亚洲欧美韩国日产综合在线 | 国产福利视频一区二区微拍 | 我把校花黑色蕾丝胸罩脱了 | 成人影院入口 | 免费视频精品一区二区三区 | blackedhd 18sex | 我的家教老师 | 免费二级毛片免费完整视频 | 国产欧美日韩精品高清二区综合区 | 男人的天堂视频 | 免费特黄视频 | 好妈妈7在线观看高清 |