精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日韩精品久久久久久久| 在线免费看v片| yiren22亚洲综合伊人22| 久久国产三级精品| 色综合色综合久久综合频道88| 国产人妖在线观看| 暖暖成人免费视频| 亚洲特级片在线| 久久99九九| 国产精品久久久国产盗摄| 亚洲图片在线| 伊人伊成久久人综合网小说| 中文字幕人妻熟女人妻a片| 手机在线观看av| 国产精品家庭影院| 国产精品国产精品国产专区不卡| 91午夜精品亚洲一区二区三区| 91精品国产调教在线观看| 日韩av有码在线| 香蕉视频xxx| 久久精品女人天堂av免费观看| 亚洲欧洲性图库| 国产一区二区三区四区hd| 中文在线免费看视频| 欧美三级不卡| 最新91在线视频| 久久国产精品无码一级毛片| 成人午夜888| 色就色 综合激情| 国内精品视频一区二区三区| 嫩草在线视频| 国产肉丝袜一区二区| 91在线在线观看| 亚洲综合成人av| 国产精品日韩精品欧美精品| 久久伊人91精品综合网站| 无码熟妇人妻av| 国产成人福利av| 69精品人人人人| av动漫免费看| 77thz桃花论族在线观看| 亚洲三级免费观看| 一区二区三区一级片| 久久久pmvav| 97久久超碰国产精品| 亚洲在线视频观看| 国产又黄又猛又爽| 天堂av在线一区| 97超级碰碰人国产在线观看| 久久久久久久久久99| 久久精品影视| 久久精品电影一区二区| 亚洲天堂av中文字幕| 国产精品美女久久久久久不卡| 亚洲精品aⅴ中文字幕乱码 | 亚洲一区欧美在线| 伊人成人在线| 97视频免费观看| 1级黄色大片儿| 亚洲精品欧美| 欧美亚洲另类激情另类| 69视频免费在线观看| 欧美日韩1区| 久久久免费观看视频| 久久久久99精品成人片毛片| 狠狠88综合久久久久综合网| 久久久久久久久久久久久久久久久久av | 亚洲天堂视频在线播放| 久久精品日产第一区二区| 91wwwcom在线观看| 久久久久亚洲av成人毛片韩| 欧美中文字幕| 国产精品看片资源| 91美女精品网站| 国产一二三精品| 国产亚洲第一区| 视频三区在线观看| 久久久久国产一区二区三区四区| 欧美大香线蕉线伊人久久国产精品 | 在线免费日韩av| 亚洲成人原创| 国产69久久精品成人看| 欧美一级淫片免费视频黄| 视频一区视频二区中文| 国产中文字幕91| 精品国产乱码一区二区三| 国产999精品久久久久久绿帽| caoporen国产精品| 精品三级久久久久久久电影聊斋| 中文无字幕一区二区三区| 免费看污污视频| 草草视频在线| 欧美日韩色综合| 曰本三级日本三级日本三级| 亚洲图区在线| 日韩中文在线中文网在线观看| 情侣偷拍对白清晰饥渴难耐| 樱桃成人精品视频在线播放| 国产91色在线播放| 国产sm主人调教女m视频| 国产在线视频精品一区| 久久草视频在线看| 毛片网站在线免费观看| 精品久久久久久久久国产字幕| 五月天激情视频在线观看| 99ri日韩精品视频| 在线免费看av不卡| 国语对白一区二区| 久久成人麻豆午夜电影| 国内外成人免费视频| 黄色一级大片在线免费看产| 欧美日韩中文字幕| 黑人无套内谢中国美女| 成人在线国产| 欧美一区二粉嫩精品国产一线天| 国产乱淫a∨片免费观看| 91免费国产在线观看| 四虎精品欧美一区二区免费| 欧美www.| 日韩精品免费视频| 久久久久性色av无码一区二区| 美女视频黄免费的久久| 久久久久久久久久久一区| 97超碰在线公开在线看免费| 欧美视频一区二区在线观看| av网站有哪些| 在线成人欧美| 97碰碰视频| 精品176二区| 欧美视频在线观看一区| 妺妺窝人体色WWW精品| 亚洲精品1234| 国产高清自拍99| 青青草原国产在线| 欧美一区二区国产| 很污很黄的网站| 日本成人中文字幕在线视频| 欧美成人综合一区| 亚洲精华液一区二区三区| 亚洲国产成人在线视频| 青青草原在线免费观看视频| 国内欧美视频一区二区| 精品国产三级a∨在线| 伦一区二区三区中文字幕v亚洲| 亚洲视频axxx| 欧美一区免费看| 欧美激情一区在线观看| 三级在线免费看| 欧美中文字幕一区二区| 国产精品久久久久久久久久免费 | 成人黄色av片| 美女扒开腿让男人桶爽久久动漫| 欧美激情久久久久久| 精品国产亚洲av麻豆| 一区二区三区免费看视频| 99久久综合网| 黄色av日韩| 精品国产一区二区三区麻豆小说 | 精品制服美女久久| 手机福利在线视频| 麻豆精品在线| 久久久久久av| 四虎精品成人影院观看地址| 色综合中文字幕| 337人体粉嫩噜噜噜| 首页国产欧美久久| 亚洲免费视频一区| 99精品国产九九国产精品| 久久成人在线视频| 少妇精品视频一区二区| 高跟丝袜一区二区三区| 青娱乐国产视频| 久久99国产精品尤物| 99久久久精品视频| 欧美激情15p| 国产精品久久av| 91精品久久久久久粉嫩| 亚洲成色777777女色窝| 久久影视中文字幕| 亚洲欧美综合色| 波多野结衣有码| 日本中文字幕一区| 一级性生活视频| 亚洲国产最新| 成人精品在线观看| 成人黄色动漫| 丝袜亚洲欧美日韩综合| 亚洲国产日韩在线观看| 色婷婷亚洲婷婷| 欧美日韩综合一区二区| 26uuu亚洲综合色欧美| 伊人成人222| 一区二区三区国产盗摄| 亚洲精品高清视频| 国产成人夜色高潮福利影视| 国产精品激情av电影在线观看 | 欧美精品国产一区| 欧美日韩在线播放一区二区| 在线免费观看亚洲| 欧美野外猛男的大粗鳮| 男人天堂久久久| 亚洲精品国产福利| 国产麻豆一精品一男同| 欧美性极品少妇精品网站| 国产美女福利视频| 久久这里只精品最新地址| 日本特黄在线观看| 日日欢夜夜爽一区| 成年人午夜免费视频| 欧美3p在线观看| 日本视频一区在线观看| 成人精品毛片| 91精品在线观看视频| xxxxxx欧美| 国内精品美女av在线播放| 久久亚洲天堂| 国产亚洲视频中文字幕视频| 免费观看黄色av| 欧美一区二区视频在线观看2022| 在线免费观看av网址| 性久久久久久久久久久久| 国产精品视频一区二区在线观看| www久久精品| 一级黄色片毛片| 久久99国产精品免费| 久久久精品三级| 久久福利一区| 男人用嘴添女人下身免费视频| 在线成人激情| 中文字幕中文字幕一区三区| 国产精品嫩模av在线| 国产在线一区二区三区欧美| 136福利精品导航| 亚洲xxx自由成熟| 国产一区2区在线观看| 国产美女精品视频免费观看| 最新日韩一区| 国产精品久久久久不卡| 91精品xxx在线观看| 日本亚洲欧美三级| 亚洲插插视频| 日本午夜在线亚洲.国产| 欧美人体一区二区三区| 97超碰蝌蚪网人人做人人爽| 成年男女免费视频网站不卡| 26uuu久久噜噜噜噜| 亚洲人体视频| 日本老师69xxx| h1515四虎成人| 国产精品视频1区| 日韩毛片网站| 91精品国产综合久久久久久丝袜| 久久久久毛片免费观看| 91视频免费进入| 日韩一区二区三区高清在线观看| 91久久精品一区二区别| 日韩精品一级| 国偷自产av一区二区三区小尤奈| 日韩三级av| 日韩精品久久久| 欧美国产偷国产精品三区| 偷拍盗摄高潮叫床对白清晰| 欧美日韩国产高清| 欧美精品自拍视频| 亚洲专区一区| 一区二区三区入口| 国精品**一区二区三区在线蜜桃 | 波多野结衣绝顶大高潮| 欧美三级在线看| 国产免费福利视频| 精品va天堂亚洲国产| 日本视频在线观看一区二区三区| 亚洲性日韩精品一区二区| 日本成人网址| 欧美激情亚洲一区| 亚洲一二三四| 国产日韩在线观看av| 91免费精品国偷自产在线在线| 九色91视频| 波多野结衣的一区二区三区 | 尤物视频在线看| 2019中文字幕免费视频| 国产成人免费| 超碰97人人人人人蜜桃| 欧美美女黄色| 亚洲精品一区国产精品| 亚洲一级网站| 色综合色综合色综合色综合| 粉嫩蜜臀av国产精品网站| 欧美无人区码suv| 国产精品欧美极品| 国产精品第72页| 欧美精品自拍偷拍动漫精品| 人妻无码中文字幕| 久久天天躁狠狠躁老女人| 国产精品yjizz视频网| 国产欧美日韩中文字幕在线| 国产伦精品一区二区三区在线播放| 日本亚洲欧洲精品| 欧美精品日韩| 最近中文字幕一区二区| zzijzzij亚洲日本少妇熟睡| аⅴ天堂中文在线网| 亚洲网友自拍偷拍| 在线免费观看视频网站| 亚洲激情 国产| 中文字幕伦理免费在线视频 | 亚洲欧洲av在线| 天天干天天操天天爱| 欧美电影免费提供在线观看| 第一福利在线| 欧美性受xxx| jizzjizzjizz欧美| 懂色av一区二区三区四区五区| 免费日韩精品中文字幕视频在线| 性久久久久久久久久久久久久| 国产午夜亚洲精品理论片色戒| 久久精品免费av| 欧美一区二区三区视频免费播放 | 日韩理论电影中文字幕| 麻豆映画在线观看| 老司机一区二区| 一色道久久88加勒比一| 精品国产户外野外| www.色播.com| 久久综合电影一区| 四虎国产精品免费久久| 天堂va久久久噜噜噜久久va| 亚洲综合99| 欧美成人三级伦在线观看| 亚洲一区在线电影| 性欧美8khd高清极品| 久久香蕉频线观| 亚洲精品伊人| 中文字幕一区二区三区四区五区六区 | 欧美日韩国产传媒| 成人亚洲视频在线观看| 久久久久久久久蜜桃| 国产成人一级片| 亚洲天堂第一页| 欧美日韩视频免费观看| 麻豆精品蜜桃一区二区三区| 国产午夜精品一区二区三区欧美| www.啪啪.com| 精品久久久久久国产| 欧美日韩国产亚洲沙发| 日本精品视频在线| 最新精品国偷自产在线| 黄色片一级视频| 中文字幕精品一区二区精品绿巨人 | 免费黄网站在线播放| 亚洲一区国产精品| 一区二区影视| 国产精品果冻传媒| 亚洲成人一区二区| 五月婷婷六月激情| 欧洲精品毛片网站| 欧美肉体xxxx裸体137大胆| 一区二区三区免费播放| 亚洲欧洲av在线| 黑人乱码一区二区三区av| 国模私拍视频一区| 亚洲v天堂v手机在线| 欧美精品第三页| 中文字幕一区二区三区不卡| a级片免费视频| 国内精品久久久| 久久av免费看| 午夜国产福利在线观看| 一二三四社区欧美黄| 性猛交xxxx| 国产精品无av码在线观看| 亚洲色图网站| 2一3sex性hd| 欧美影院一区二区三区| dy888亚洲精品一区二区三区| 春色成人在线视频| 日日噜噜夜夜狠狠视频欧美人| 黄色录像免费观看| 精品第一国产综合精品aⅴ| 一个人www视频在线免费观看| 亚洲午夜精品久久| 东方欧美亚洲色图在线| 麻豆成人免费视频| 久久影院模特热| 色橹橹欧美在线观看视频高清| 男操女免费网站| 亚洲成人av免费| 日韩av中文| 久久国产精品精品国产色婷婷| 男人的j进女人的j一区| 久久免费小视频| 中日韩美女免费视频网站在线观看| 天堂久久av| 超碰在线97免费| 五月天久久比比资源色| 久久亚洲天堂| 日本不卡一区二区三区在线观看| 国产精品1区二区.| 最新在线中文字幕|