国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術(shù)|

服務(wù)器之家 - 數(shù)據(jù)庫 - MongoDB - MongoDB實(shí)現(xiàn)基于關(guān)鍵詞的文章檢索功能(C#版)

MongoDB實(shí)現(xiàn)基于關(guān)鍵詞的文章檢索功能(C#版)

2020-05-05 17:24MRR MongoDB

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

我的實(shí)現(xiàn)目標(biāo)是:

可以通過一個(gè)或多個(gè)關(guān)鍵詞搜索到文章。

可以通過文章的關(guān)鍵詞列表查詢到其相關(guān)文章。

查詢到的結(jié)果依據(jù)相關(guān)程度降序排列。

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

在網(wǎng)上找了一大圈,就沒有一個(gè)靠譜的方法,基本都是只能傳入單詞來檢索,而且基本都沒有提供C#驅(qū)動(dòng)版本的代碼,于是乎自己研究出了這個(gè)實(shí)現(xiàn)方案:

首先要求使用標(biāo)簽、分詞、關(guān)鍵詞提取組件對(duì)文章對(duì)應(yīng)的關(guān)鍵詞進(jìn)行提取,然后作為數(shù)組格式,存入文章的Keywords字段中。

MongoDB實(shí)現(xiàn)基于關(guān)鍵詞的文章檢索功能(C#版)

核心檢索代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/// <summary>
/// 根據(jù)關(guān)鍵詞獲取文章編號(hào)與標(biāo)題映射。
/// 注意:此方法會(huì)返回最為匹配的若干個(gè)項(xiàng)目,并根據(jù)匹配程度降序排列,即使是沒有任何關(guān)鍵詞匹配項(xiàng),也會(huì)返回若干個(gè)結(jié)果的。
/// 另需注意:如果是根據(jù)文章關(guān)鍵詞來查詢,一般來說其中一定包含原文章,所以應(yīng)該把期望獲得的數(shù)量加1,并在結(jié)果中移除原文。
/// </summary>
/// <param name="limitNum">數(shù)量上限</param>
/// <param name="keywords">關(guān)鍵詞集合</param>
/// <returns>文章編號(hào)與標(biāo)題映射字典</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()方法做查詢,F(xiàn)ind()方法后面跟Project()方法也不會(huì)改變方法鏈中操作的對(duì)象類型,這樣后面的SortByDescending()方法的目標(biāo)對(duì)象還是Article類,而不是Project()方法中定義的匿名類,而SortByDescending()方法中傳入的表達(dá)式又僅允許用來選擇對(duì)象屬性,不允許進(jìn)行任何計(jì)算,所以就根本無法實(shí)現(xiàn)我們的需求,我在發(fā)現(xiàn)Aggregate()方法之前就在這里一直卡著很久~

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

用作相關(guān)文章搜索時(shí),直接把原文章的Keywords屬性值傳入,獲取數(shù)量要比你預(yù)計(jì)的數(shù)量多1,因?yàn)榉浅?赡苣愕脑恼戮驮讷@取到的列表中,而且是前列,獲取后濾掉原文章的ID,再執(zhí)行Take方法返回你需要數(shù)量的項(xiàng)目即可(執(zhí)行Take方法是為了以防你的原文沒出現(xiàn)在列表中,這概率極小但也是有的)。

為了增進(jìn)查詢效率,還可以預(yù)設(shè)好索引,代碼如下:

?
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#官方驅(qū)動(dòng)版本是:MongoDB.Driver.2.2.3

延伸 · 閱讀

精彩推薦
  • MongoDB遷移sqlserver數(shù)據(jù)到MongoDb的方法

    遷移sqlserver數(shù)據(jù)到MongoDb的方法

    這篇文章主要介紹了遷移sqlserver數(shù)據(jù)到MongoDb的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下...

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

    MongoDB中javascript腳本編程簡介和入門實(shí)例

    作為一個(gè)數(shù)據(jù)庫,MongoDB有一個(gè)很大的優(yōu)勢——它使用js管理數(shù)據(jù)庫,所以也能夠使用js腳本進(jìn)行復(fù)雜的管理——這種方法非常靈活 ...

    MongoDB教程網(wǎng)6982020-04-24
  • MongoDB分布式文檔存儲(chǔ)數(shù)據(jù)庫之MongoDB分片集群的問題

    分布式文檔存儲(chǔ)數(shù)據(jù)庫之MongoDB分片集群的問題

    這篇文章主要介紹了分布式文檔存儲(chǔ)數(shù)據(jù)庫之MongoDB分片集群的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋...

    Linux-18743072020-12-20
  • MongoDBMongodb實(shí)現(xiàn)定時(shí)備份與恢復(fù)的方法教程

    Mongodb實(shí)現(xiàn)定時(shí)備份與恢復(fù)的方法教程

    這篇文章主要給大家介紹了Mongodb實(shí)現(xiàn)定時(shí)備份與恢復(fù)的方法教程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面...

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

    MongoDB安裝圖文教程

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

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

    MongoDB憑什么躋身數(shù)據(jù)庫排行前五

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

    孫浩峰3892020-05-22
  • MongoDBMongoDB 內(nèi)存使用情況分析

    MongoDB 內(nèi)存使用情況分析

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

    MongoDB教程網(wǎng)10002020-09-29
  • MongoDBmongodb基本命令實(shí)例小結(jié)

    mongodb基本命令實(shí)例小結(jié)

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

    dawn-liu3652020-05-26
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 久久国产精品一区 | 黄a在线观看 | 成人精品福利视频 | 日韩成人在线播放 | av网站免费看 | 日韩欧美国产一区二区三区 | 国产精品成人久久久久 | 伊人一区二区三区 | 天天色天天色 | 成人av电影天堂 | 黄色毛片看看 | 韩日精品视频 | 久久国产福利 | 国产精品a久久久久 | 91久久国产综合久久91精品网站 | 亚洲美女久久 | 超碰中文字幕 | 天天影视网色香欲综合网无拦截 | 亚洲欧美一区二区三区久久 | 亚洲精品免费视频 | www午夜视频| 日韩精品在线播放 | 久久综合九色综合欧美狠狠 | 亚洲精品综合 | 欧洲一区二区三区精品 | 国产成人在线视频 | 91久久国产综合久久 | 国产精品久久久久久中文字 | 亚洲日本中文字幕 | 亚洲精品久久久久久久久久久 | 成人久久| 麻豆乱码国产一区二区三区 | 特黄特色的大片观看免费视频 | 日韩在线一区二区三区 | 日韩一区二区三区在线视频 | 99亚洲精品 | 欧美大片一区 | 亚洲第一视频网站 | 国产黄色在线观看 | 日韩视频免费 | 久久久久久久久久久久久九 |