好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > MongoDB實現基于關鍵詞的文章檢索功能(C#版)

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

熱門標簽:機器人外呼系統軟件存在問題 智能電銷機器人銷售話術 福州電銷機器人源代碼 兗州電話外呼營銷系統 南京400電話怎樣辦理 徐州ai電銷機器人原理 沈陽營銷電銷機器人招商 企業智能外呼系統價格多少 高德地圖標注商戶位置

我的實現目標是:

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

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

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

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

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

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

核心檢索代碼:

/// summary>
/// 根據關鍵詞獲取文章編號與標題映射。
/// 注意:此方法會返回最為匹配的若干個項目,并根據匹配程度降序排列,即使是沒有任何關鍵詞匹配項,也會返回若干個結果的。
/// 另需注意:如果是根據文章關鍵詞來查詢,一般來說其中一定包含原文章,所以應該把期望獲得的數量加1,并在結果中移除原文。
/// /summary>
/// param name="limitNum">數量上限/param>
/// param name="keywords">關鍵詞集合/param>
/// returns>文章編號與標題映射字典/returns>
public async TaskDictionaryGuid, string>> GetArticleDicByKeywordsAsync(int limitNum, IEnumerablestring> keywords)
{
var list =
await
Database.GetCollectionDomain.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方法是為了以防你的原文沒出現在列表中,這概率極小但也是有的)。

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

var c=Database.GetCollectionDomain.Entity.Article>("Article");
c.Indexes.DropAll();
await c.Indexes.CreateOneAsync(
BuildersDomain.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

您可能感興趣的文章:
  • C#簡單操作MongoDB的步驟全紀錄
  • C#中如何將MongoDB->RunCommand結果映射到業務類的方法總結
  • Mongodb在CSharp里實現Aggregate實例
  • C#中使用1.7版本驅動操作MongoDB簡單例子
  • MongoDB入門教程之C#驅動操作實例
  • C# 對MongoDB 進行增刪改查的簡單操作實例
  • 關于C#生成MongoDB中ObjectId的實現方法
  • C#基于Mongo的官方驅動手擼一個Super簡易版MongoDB-ORM框架

標簽:景德鎮 大理 邯鄲 本溪 吉安 昭通 鶴崗 丹東

巨人網絡通訊聲明:本文標題《MongoDB實現基于關鍵詞的文章檢索功能(C#版)》,本文關鍵詞  MongoDB,實現,基于,關鍵詞,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MongoDB實現基于關鍵詞的文章檢索功能(C#版)》相關的同類信息!
  • 本頁收集關于MongoDB實現基于關鍵詞的文章檢索功能(C#版)的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 被猛男狂cao的小男生| 亚洲欧美日产精品久久久另类网站| 欧美肥婆性生活| 亚洲美女色图| 91麻豆精品国产自产在线观看,| 欧美一区二区三区成人久久片| 91精品无码久久久久久国产软件| 成人亚洲欧美激情在线电影| 免费一看一级毛片| 美女的隐私视频网站免费| 亚洲另类激情综合偷自拍图| 韩国日本理论片A片大全| 八戒八戒www手机观看| 新疆美女裸体做爰XXX| 美国nxgx| 亚洲欧美日韩高清一区二区三区| 熟女av人妻一区二区三四区| 欧洲色情老熟女XXXX| 公交车上~嗯啊被农民工| 俱乐部yin乱聚会小说| 黄色下载视频| 亚洲精品7777XXXX青睐| 女性露出奶头流出精子| www成人免费观看网站| 亚洲AV一区二区蜜美传媒| 麻豆18???小泬破白浆流啪啪| 双性大乳浪受各种play| 年轻的老师k8经典网| 亚洲一区二区三区| 中文在线免费视频| 4攻一受同时做宿舍文np| 男人扒开女人内裤亲里面| 成人??高潮片免费视频动 | 中国美女婬乱免费视频| 国产91精品秘?入口男同| 湿濡的女人免费观看| 女子被狂揉下部?羞羞| 嘟嘟嘟免费观看高清完整版| 影视大全在线看| 一区二区三区四区视频| jizjizjizjiz日本护士出水|