精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

重寫 StarBlog 的搜索功能和頁面,支持權重設置和結果高亮

開發 前端
按理說這些應該得加入全文檢索引擎,Elasticsearch、MeiliSearch[2]?之類的來實現。但這些需要額外的服務,太重了。再不濟也要用?Lucene.NET[3]?這種,這是 Elasticsearch 的基礎,但不需要額外服務,純本地嵌入式,支持權重控制、高亮、分詞等功能。

前言

最近在整理本地的一些筆記。

有些日期不太對的,我的博客上有記錄發布和更新時間,所以我去搜索了一下。

這時候發現 StarBlog 的搜索功能太簡陋了。

雖然上次更新增加了一大波功能,也優化了一下搜索功能,之前只能搜索標題,現在可以搜索正文內容了。

不過有個問題是沒有權重,標題的權重應該比正文更高的。

按理說這些應該得加入全文檢索引擎,Elasticsearch、MeiliSearch[2] 之類的來實現。但這些需要額外的服務,太重了。

再不濟也要用 Lucene.NET[3] 這種,這是 Elasticsearch 的基礎,但不需要額外服務,純本地嵌入式,支持權重控制、高亮、分詞等功能。

但為了快速實現,這些我都不想用,先用最簡單的方式來改進。

同時我也重寫了搜索結果頁面,之前的頁面太業余了。

極簡實現

最終我的方案是:在內存里手動算權重 + Regex 實現結果高亮。

成本非常低,效果也不錯。

實現效果

來看看效果吧。

這套 StarBlog 的前端是 Bootstrap,樣式都得靠 CSS,相對于我現在用的 Tailwind CSS、Shadcn/ui、Magic UI 之類的,太原始了,重寫這個界面已經盡力了hhh??

image-20250902212504494image-20250902212504494

代碼

OK,接下來是大家不感興趣的代碼環節。

模型

先定義搜索結果模型。

public classSearchPost {
    public Post Post { get; set; }
    publicint TitleScore { get; set; }

    publicint ContentScore { get; set; }

    // 標題每命中一次+100分
    // 內容命中+1分
    publicint Score => TitleScore * 100 + ContentScore;
    publicstring HighlightedTitle { get; set; }
    publicstring HighlightedSnippet { get; set; }
}

搜索邏輯

搜索功能邏輯都在 src/StarBlog.Web/Controllers/SearchController.cs 文件里。

在內村里計算權重,從數據庫查詢出來后,用 Linq 計算權重,關鍵詞出現一次為一分;總分是在 SearchPost 里計算的,標題每命中一次+100分,內容命中+1分。

var searchPosts = _postRepo
    .Where(a => a.IsPublish)
    .Where(a =>
           a.Title!.Contains(keyword) ||
           a.Content.Contains(keyword)
          )
    .Include(a => a.Category)
    .ToList()
    .Select(p => new SearchPost {
        Post = p,
        TitleScore = p.Title.ToLower().Split(keyword).Length - 1,
        ContentScore = p.Content?.ToLower().Split(keyword).Length - 1 ?? 0,
    })
    .OrderByDescending(x => x.Score)
    .ToList();

搜索結果高亮

使用正則表達式來實現結果高亮。

var regex = new Regex(Regex.Escape(keyword), RegexOptions.IgnoreCase);
foreach (var item in searchPosts) {
    item.HighlightedTitle = regex.Replace(item.Post.Title, m => $"<mark>{m.Value}</mark>");
    item.HighlightedSnippet = GetHighlightedSnippet(item.Post.Content, keyword);
}

生成高亮片段摘要

思路很簡單:

  • 找到第一個命中的位置
  • 截取前后一定長度的內容(比如前后各 50 個字符)
  • 再用 Regex 替換加 <mark> 高亮
  • 最后拼上 ... 作為省略號
public static string GetHighlightedSnippet(string content, string keyword, int snippetLength = 100) {
    if (string.IsNullOrEmpty(content) || string.IsNullOrEmpty(keyword))
        returnstring.Empty;

    var regex = new Regex(Regex.Escape(keyword), RegexOptions.IgnoreCase);
    var match = regex.Match(content);

    if (!match.Success) {
        // 沒匹配到,直接取前 snippetLength*2 個字符作為摘要
        return content.Length > snippetLength * 2
            ? content.Substring(0, snippetLength * 2) + "..."
            : content;
    }

    // 計算截取范圍(匹配位置前后各 snippetLength)
    int start = Math.Max(0, match.Index - snippetLength);
    int length = Math.Min(content.Length - start, match.Length + snippetLength * 2);

    string snippet = content.Substring(start, length);

    // 高亮處理
    snippet = regex.Replace(snippet, m => $"<mark>{m.Value}</mark>");

    // 前后補省略號(如果不是全文開頭或結尾)
    if (start > 0) snippet = "..." + snippet;
    if (start + length < content.Length) snippet += "...";

    return snippet;
}

小結

重構之后體驗更上一層,不過在老架構上修修補補終究不是長久之計,等有空就得趕緊開始 v2 新版的開發。

參考資料

[1] StarBlog v1.3.0 新版本,一大波更新以及遷移服務器部署: https://blog.deali.cn/p/starblog-v130-updates-server-migration

[2] MeiliSearch: https://www.meilisearch.com/

[3] Lucene.NET: https://lucenenet.apache.org/

責任編輯:武曉燕 來源: 程序設計實驗室
相關推薦

2025-01-06 09:03:41

2020-06-15 13:49:41

語音技能指標

2012-05-15 09:26:09

Google測試

2010-06-05 21:30:57

2013-06-28 10:37:57

Google EartiOS

2021-03-25 14:45:57

EdgeLinux賬戶登陸

2009-04-30 08:42:23

微軟手機語音搜索移動OS

2017-06-05 14:27:56

MyCLIMySQLMariaDB

2025-02-10 08:19:09

2016-11-24 16:48:41

搜索廣告展示廣告Adobe

2010-08-12 11:21:30

重寫Flex組件

2021-06-10 18:59:41

Java編程語言

2009-07-31 09:39:59

ASP.NET和URL

2010-07-08 13:42:36

UDPClient

2021-09-11 19:46:14

配置

2009-03-13 08:37:35

GoogleAndroidiPhone

2011-12-13 20:33:42

Lumia 800

2010-08-27 10:49:38

DIVtable

2023-08-04 19:26:38

谷歌AI
點贊
收藏

51CTO技術棧公眾號

亚洲国产精品推荐| 欧美日韩综合视频| av在线不卡一区| 男女啊啊啊视频| 不卡在线一区二区| 欧美成人一区二区三区片免费| 国产男女免费视频| 国产三级视频在线播放线观看| 国模无码大尺度一区二区三区| 欧美激情国内偷拍| 日本爱爱爱视频| 欧美特黄不卡| 在线观看一区二区精品视频| 4444亚洲人成无码网在线观看| 男人久久精品| 国产一区二区剧情av在线| 欧美一级视频免费在线观看| 疯狂撞击丝袜人妻| 国产成人精品免费视| 欧美一二三区在线| 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 日韩一级二级三级精品视频| 亚洲乱码中文字幕久久孕妇黑人| 激情在线小视频| 国产亚洲人成网站| 国产精品一区二区免费看| 91激情在线观看| 久久免费高清| 午夜精品理论片| 91高清免费观看| 精品视频黄色| 亚洲欧美日韩成人| 永久看看免费大片| 亚洲成a人片777777久久| 色婷婷综合久久久| 久久久999视频| 人交獸av完整版在线观看| 国产精品国产三级国产普通话99 | 日韩欧美精品网站| 国产毛片久久久久久国产毛片| 在线观看免费版| 久久精品一二三| 久久国产精品久久精品国产| 农村少妇久久久久久久| 国产成人午夜99999| 成人在线中文字幕| 11024精品一区二区三区日韩| 久久蜜桃精品| 国产成人亚洲精品| 无码一区二区三区| 日本欧美久久久久免费播放网| 2024亚洲男人天堂| 羞羞影院体验区| 午夜亚洲激情| 奇米影视亚洲狠狠色| 毛片在线免费视频| 欧美专区18| 国产不卡视频在线| 91黑人精品一区二区三区| 视频在线观看一区二区三区| 国产97在线|日韩| 亚洲乱码国产乱码精品| 日韩精品久久久久久| 国产精品久久久久久久久久三级 | 国模私拍视频在线播放| 亚洲高清免费在线| 99爱视频在线| 日本.亚洲电影| 欧美日产国产精品| 亚洲男人天堂2021| 午夜视频在线观看精品中文| 欧美精品一区二区三区在线播放| 国产激情视频网站| 国产精品欧美三级在线观看| 在线观看久久久久久| 国产天堂av在线| 欧美亚洲不卡| 欧美一级视频免费在线观看| 中文字幕日韩第一页| 国产剧情一区二区三区| 国产精品久久久对白| 手机看片福利在线观看| 欧美激情一二三区| 97久久国产亚洲精品超碰热| 蜜桃视频m3u8在线观看| 欧美午夜不卡视频| www.黄色网| 国产精品美女久久久久久不卡| 久久精品国产亚洲精品| 久久久精品一区二区涩爱| 久久福利毛片| 91久久久久久国产精品| 五月婷婷激情在线| 国产精品久久午夜夜伦鲁鲁| 日本精品久久久久久久久久| 欧美国产大片| 日韩欧美激情一区| 波多野在线播放| 午夜久久99| 日本久久精品视频| 国产精品久久久久久久久久久久久久久久久久 | 久久性爱视频网站| 波多野结衣在线观看一区二区| 欧美巨猛xxxx猛交黑人97人| 最近免费中文字幕大全免费版视频| 极品美女销魂一区二区三区| 久久99欧美| 性直播体位视频在线观看| 色狠狠一区二区| 成年人小视频在线观看| 国产精品久久久久久久久久10秀| 韩剧1988在线观看免费完整版| 中文字幕在线播放不卡| 91丝袜国产在线播放| 男人j进女人j| 自拍偷自拍亚洲精品被多人伦好爽| 91精品国产色综合久久不卡蜜臀| 女~淫辱の触手3d动漫| 亚洲一级网站| 91欧美激情另类亚洲| 成人高潮成人免费观看| 激情久久av一区av二区av三区| 色婷婷一区二区三区在线观看| 精品九九在线| 国产91精品高潮白浆喷水| 亚洲成人av综合| 亚洲人成网站在线| 一级做a免费视频| 精品高清久久| 国产成人中文字幕| 色av男人的天堂免费在线| 亚洲一区二区欧美激情| 青青草原播放器| 99久久影视| 国产一区视频在线| 91女主播在线观看| 91成人在线精品| 国产精品九九九九九| 亚洲精品影院在线观看| 国产精品免费一区二区三区四区| a在线免费观看| 91精品国产欧美一区二区成人| 亚洲毛片亚洲毛片亚洲毛片| 青青国产91久久久久久| 无遮挡亚洲一区| 午夜av成人| 正在播放国产一区| 中文字幕一区二区三区免费看 | 波多野结衣亚洲一二三| 日韩精品黄色网| 青青青国产在线| 久久―日本道色综合久久| av天堂永久资源网| 国产免费播放一区二区| 国产精品美女久久久久av超清| 精品三级久久久久久久电影聊斋| 色婷婷av一区二区三区大白胸| 少妇光屁股影院| 视频在线观看一区二区三区| 性欧美大战久久久久久久免费观看| 亚洲va中文在线播放免费| 国产一区二区三区在线观看网站| 中文字幕丰满人伦在线| 亚洲欧美在线视频观看| 亚洲成人精品在线播放| 亚洲欧洲日本mm| 美女视频久久| 欧美男女视频| 欧美成人合集magnet| 丰满少妇高潮在线观看| 欧美午夜影院在线视频| 97在线观看免费视频| 国内一区二区在线| 91.com在线| 猛男gaygay欧美视频| 国产精品亚洲激情| 三级资源在线| 亚洲精品有码在线| 国产精品久久久午夜夜伦鲁鲁| 一区二区三区精品在线观看| 捆绑裸体绳奴bdsm亚洲| 日本v片在线高清不卡在线观看| 国产a级片免费看| 乱中年女人伦av一区二区| 国产国语videosex另类| 国产在线激情视频| 亚洲激情中文字幕| 91九色蝌蚪91por成人| 亚洲自拍与偷拍| 成人无码av片在线观看| 成人av在线一区二区三区| 91极品视频在线观看| 欧美视频日韩| 亚洲精品中文字幕乱码三区不卡| 亚洲日本va午夜在线电影| 国产成人啪精品视频免费网| 在线观看午夜av| 亚洲午夜精品视频| 高清国产mv在线观看| 精品视频999| 亚洲日本韩国在线| 亚洲女与黑人做爰| 亚洲精品91在线| 不卡在线观看av| 欧美视频亚洲图片| 日韩国产欧美在线播放| 777av视频| 亚洲影视一区二区三区| 日韩在线观看电影完整版高清免费| 成人台湾亚洲精品一区二区 | 久久视频这里只有精品| 青春有你2免费观看完整版在线播放高清 | 精品人妻无码一区二区色欲产成人 | 国产香蕉视频在线看| 精品久久久久久久久久久久久久久 | 国产亚洲欧美日韩精品一区二区三区 | 偷拍精品精品一区二区三区| 高清一区二区三区四区五区| 黄色网在线免费看| 少妇精69xxtheporn| 九色视频在线观看免费播放 | 亚洲a一级视频| 成人精品国产| 国产99久久精品一区二区| 成年人黄色大片在线| 欧美日本亚洲视频| a级网站在线播放| 日韩三级成人av网| 992tv免费直播在线观看| 亚洲社区在线观看| 日本在线视频1区| 亚洲国产高清福利视频| 精品久久国产视频| 欧美一区二区三区播放老司机| 一级全黄少妇性色生活片| 欧美三级欧美一级| 超碰在线免费97| 色88888久久久久久影院野外| 好吊妞视频一区二区三区| 天天色天天操综合| 91午夜视频在线观看| 激情av一区二区| 九一国产在线观看| 日韩欧美在线国产| 亚洲乱码国产乱码精品| 欧美曰成人黄网| 中文精品久久久久人妻不卡| 欧美无乱码久久久免费午夜一区 | 国产婷婷97碰碰久久人人蜜臀| 午夜视频福利在线观看| 亚洲美女视频网站| 岛国视频免费在线观看| 在线亚洲午夜片av大片| 黄色精品在线观看| 久久久久久久久久久免费精品| 美女精品导航| 69**夜色精品国产69乱| 欧美福利在线播放| 国产精自产拍久久久久久| 91成人精品观看| www.成人av| 牛牛影视久久网| 欧美性xxxx69| 91日韩视频| 日本男女交配视频| 亚洲一区亚洲| 中文字幕av专区| 国产成人精品影视| 欧类av怡春院| 久久久综合网站| 亚洲精品一区二区三区在线播放| 亚洲视频资源在线| 国产一级一片免费播放| 黑人极品videos精品欧美裸| 在线观看中文字幕码| 欧美一级高清片| 欧洲毛片在线| 中文字幕亚洲综合久久| 久草免费在线| 97人人做人人爱| 日本一区二区中文字幕| 高清视频在线观看一区| 国产欧美亚洲精品a| 国产美女视频免费| 国产亚洲一区在线| 亚洲黄色av片| 91蜜桃在线免费视频| 操她视频在线观看| 黑人精品xxx一区一二区| 亚洲在线观看av| 亚洲精品一区中文| 一色桃子av在线| 国产精品久久久久久久久久久新郎| 精品一区91| 日本福利一区二区三区| 欧美久久久久| 国产高清www| 老司机免费视频一区二区| 中国极品少妇xxxx| 亚洲婷婷国产精品电影人久久| 1级黄色大片儿| 91精品婷婷国产综合久久竹菊| 欧美女同网站| 欧美精品国产精品日韩精品| 成人全视频免费观看在线看| 狠狠色伊人亚洲综合网站色| 美女一区2区| 波多野结衣与黑人| 久久精品国产一区二区| 可以直接看的无码av| 一区二区三区精品视频| 亚洲天堂中文网| 日韩精品久久久久久久玫瑰园| 26uuu亚洲电影在线观看| 国产精品96久久久久久| 婷婷成人在线| 青草视频在线观看视频| 国产在线不卡一区| 美女网站视频色| 欧美性大战xxxxx久久久| 三级在线视频| 91国内精品久久| 国产精品极品国产中出| 成年丰满熟妇午夜免费视频 | 日批在线观看视频| 一区二区三区四区亚洲| 国产一区二区在线视频聊天| 在线看日韩av| 户外露出一区二区三区| 免费在线一区二区| 日韩午夜av| 国产高清自拍视频| 午夜精品视频在线观看| 欧美视频一二区| 午夜精品福利电影| 久久这里只有精品一区二区| 欧美精品一区二区三区三州| 成人ar影院免费观看视频| 日本五十熟hd丰满| 亚洲成av人影院在线观看| 超碰在线中文字幕| 国产欧美日韩在线播放| 最新国产乱人伦偷精品免费网站| 人妻 日韩 欧美 综合 制服| 天天影视涩香欲综合网| 青青九九免费视频在线| 国产91色在线|免| av亚洲在线观看| 视频二区在线播放| **网站欧美大片在线观看| 国产91av在线播放| 国产成人手机视频| 久久毛片高清国产| 自拍偷拍18p| 国产一区二区三区在线观看网站| 唐人社导航福利精品| 日本视频精品一区| 青青草国产精品97视觉盛宴| 亚洲欧美日韩第一页| 欧美日韩高清在线| a毛片在线看免费观看| av免费观看久久| 99人久久精品视频最新地址| 三级黄色片网站| 日本道在线观看一区二区| a黄色在线观看| 91久久在线观看| 在线看片欧美| japanese中文字幕| 欧美人成免费网站| 欧美1—12sexvideos| 欧美极品视频一区二区三区| 美女视频黄频大全不卡视频在线播放 | 视频一区视频二区视频三区高| 喷白浆一区二区| 玖玖爱这里只有精品| 亚洲电影免费观看| 欧美xnxx| 久久人人爽人人爽人人av| 91伊人久久大香线蕉| 在线不卡免费视频| 欧美国产日产韩国视频| 蜜桃精品噜噜噜成人av| www.污网站| 欧美日韩午夜视频在线观看| 一区二区三区视频网站| 国产一区二区精品免费| 麻豆精品视频在线观看视频| 国产亚洲欧美久久久久| 伊人久久精品视频| 国产66精品| 97超碰成人在线| 午夜激情久久久| 日本天堂在线观看| 狠狠色综合欧美激情| 美女www一区二区| 国产日产精品一区二区三区| 欧美成人在线网站| 精品国产一区一区二区三亚瑟| 日韩高清一二三区|