📅 Day 6:實現文章搜索功能(Search System)
? 今日目標:
- 實現按 標題、內容、作者 搜索文章
- 使用 LINQ 構建動態查詢條件
- 添加搜索框 UI 界面
- 可選:使用全文搜索優化(如 SQL Server 全文索引)
- 提交 Git 版本記錄進度
🔍 一、添加搜索功能邏輯
我們將在文章列表頁(Index.cshtml
)中添加一個搜索框,并根據用戶輸入的關鍵詞動態過濾文章。
? 修改 Pages/Posts/Index.cshtml.cs
添加搜索字段和邏輯:
[BindProperty(SupportsGet = true)]
public string? SearchTerm { get; set; }public async Task<IActionResult> OnGetAsync()
{var query = _context.Posts.Include(p => p.Category).Include(p => p.PostTags).ThenInclude(t => t.Tag).AsQueryable();if (CategoryId.HasValue){query = query.Where(p => p.CategoryId == CategoryId.Value);}if (!string.IsNullOrEmpty(SearchTerm)){query = query.Where(p =>p.Title.Contains(SearchTerm) ||p.Content.Contains(SearchTerm) ||p.AuthorName.Contains(SearchTerm));}Posts = await query.ToListAsync();Categories = await _context.Categories.ToListAsync();return Page();
}
🖋? 二、在頁面上添加搜索框
? 修改 Pages/Posts/Index.cshtml
在頁面頂部添加搜索框:
<form method="get"><div class="input-group mb-3"><input type="text" class="form-control" placeholder="搜索文章..." asp-for="SearchTerm" /><button class="btn btn-outline-primary" type="submit">搜索</button></div>
</form>
你也可以將它放在導航欄或側邊欄中,方便用戶隨時搜索。
🧪 三、測試搜索功能
- 運行項目
- 在搜索框中輸入關鍵詞(例如“C#”、“入門”、“張三”等)
- 驗證是否能正確匹配標題、內容和作者
?? 四、可選:使用 SQL Server 全文搜索優化(進階)
如果你希望提升搜索性能,可以考慮啟用 SQL Server 的全文搜索功能。
? 步驟簡要如下:
-
在 SQL Server 中啟用全文搜索:
EXEC sp_fulltext_database 'enable';
-
創建全文索引:
CREATE FULLTEXT INDEX ON Posts(Title, Content) KEY INDEX PK_Posts_Id ON BlogCatalog;
-
修改 LINQ 查詢為使用
EF.Functions.FreeSql
或直接調用 SQL 函數(需使用原生 SQL 查詢)。
?? 注意:這屬于高級用法,適用于數據量較大時。對于小型博客系統,簡單的
Contains()
已經足夠。
📦 五、提交 Git 版本
git add .
git commit -m "Day6: Added search functionality by title, content and author"
📝 今日總結
今天你完成了:
? 實現了按標題、內容、作者搜索文章的功能
? 使用 LINQ 構建動態查詢邏輯
? 添加了搜索框 UI 界面
? 可選學習了 SQL Server 全文搜索配置
? 提交版本控制記錄
📆 明日計劃(Day7)
我們將進入 測試與優化階段:
- 編寫單元測試(xUnit / Moq)
- 測試 PostService 邏輯
- 添加緩存機制(MemoryCache / Redis)
- 性能分析工具使用(Application Insights)