306 lines
7.6 KiB
Markdown
306 lines
7.6 KiB
Markdown
# 🔍 進階搜尋功能完善計劃
|
||
|
||
## 📋 現狀評估
|
||
|
||
### ✅ 已完成功能
|
||
- [x] 基本文字搜尋(詞彙、翻譯、定義)
|
||
- [x] CEFR等級篩選 (A1-C2)
|
||
- [x] 詞性篩選 (noun, verb, adjective, etc.)
|
||
- [x] 掌握程度篩選 (高/中/低)
|
||
- [x] 收藏狀態篩選
|
||
- [x] 快速篩選按鈕
|
||
- [x] 搜尋結果高亮
|
||
- [x] 防抖搜尋 (200ms)
|
||
- [x] ESC 鍵清除篩選
|
||
- [x] 焦點管理優化
|
||
|
||
### 🚫 缺失的核心功能
|
||
|
||
#### 1. **排序功能**
|
||
- **缺失**: 沒有詞卡排序選項
|
||
- **需要**: 按創建時間、掌握度、字母順序、CEFR等級排序
|
||
- **影響**: 用戶無法按需要的順序瀏覽詞卡
|
||
|
||
#### 2. **分頁功能**
|
||
- **缺失**: 沒有分頁機制
|
||
- **問題**: 大量詞卡時載入慢、滾動困難
|
||
- **需要**: 分頁導航、每頁數量選擇
|
||
|
||
#### 3. **進階搜尋條件**
|
||
- **缺失**: 創建日期範圍篩選
|
||
- **缺失**: 複習次數篩選
|
||
- **缺失**: 例句內容搜尋
|
||
|
||
#### 4. **搜尋歷史記錄**
|
||
- **缺失**: 搜尋記錄保存
|
||
- **缺失**: 常用篩選組合快捷鍵
|
||
|
||
#### 5. **批量操作**
|
||
- **缺失**: 批量選擇詞卡
|
||
- **缺失**: 批量收藏/取消收藏
|
||
- **缺失**: 批量刪除
|
||
|
||
#### 6. **搜尋結果優化**
|
||
- **缺失**: 搜尋結果相關性排序
|
||
- **缺失**: 模糊搜尋支援
|
||
- **缺失**: 搜尋建議
|
||
|
||
---
|
||
|
||
## 🎯 四階段改善計劃
|
||
|
||
### 第一階段:排序與分頁 (優先)
|
||
> **預計時間**: 3-5天
|
||
> **難度**: ⭐⭐
|
||
> **價值**: ⭐⭐⭐⭐⭐
|
||
|
||
#### 1.1 新增排序功能
|
||
- [ ] 添加排序下拉選單組件
|
||
- 創建時間 (最新/最舊)
|
||
- 掌握度 (高到低/低到高)
|
||
- 字母順序 (A-Z/Z-A)
|
||
- CEFR等級 (A1-C2/C2-A1)
|
||
- 複習次數 (多到少/少到多)
|
||
- [ ] 升序/降序切換按鈕
|
||
- [ ] 更新前端狀態管理
|
||
- [ ] 更新 API 參數支援排序
|
||
- [ ] 後端實現排序邏輯
|
||
|
||
#### 1.2 實現分頁機制
|
||
- [ ] 分頁導航組件設計
|
||
- [ ] 每頁數量選擇 (10/20/50/100)
|
||
- [ ] 頁碼跳轉功能
|
||
- [ ] 總數統計顯示
|
||
- [ ] URL 參數同步 (支援書籤分享)
|
||
- [ ] 更新後端 API 支援 `page`, `limit`, `offset` 參數
|
||
- [ ] 無限滾動模式 (可選)
|
||
|
||
---
|
||
|
||
### 第二階段:進階篩選條件
|
||
> **預計時間**: 4-6天
|
||
> **難度**: ⭐⭐⭐
|
||
> **價值**: ⭐⭐⭐⭐
|
||
|
||
#### 2.1 時間範圍篩選
|
||
- [ ] 創建日期範圍選擇器
|
||
- [ ] 最後複習時間篩選
|
||
- [ ] 預設快捷選項
|
||
- 今天
|
||
- 昨天
|
||
- 本週
|
||
- 本月
|
||
- 上個月
|
||
- 自定義範圍
|
||
- [ ] 日曆組件整合
|
||
|
||
#### 2.2 複習統計篩選
|
||
- [ ] 複習次數範圍篩選 (滑桿組件)
|
||
- [ ] 正確率篩選 (0-100%)
|
||
- [ ] 學習狀態篩選
|
||
- 從未複習
|
||
- 學習中
|
||
- 已掌握
|
||
- 需要複習
|
||
- [ ] 連續答對次數篩選
|
||
|
||
#### 2.3 內容深度搜尋
|
||
- [ ] 例句內容搜尋
|
||
- [ ] 定義內容搜尋
|
||
- [ ] 標籤搜尋 (如果有標籤系統)
|
||
- [ ] 多關鍵字組合搜尋 (AND/OR)
|
||
|
||
---
|
||
|
||
### 第三階段:用戶體驗優化
|
||
> **預計時間**: 5-7天
|
||
> **難度**: ⭐⭐⭐⭐
|
||
> **價值**: ⭐⭐⭐⭐
|
||
|
||
#### 3.1 搜尋歷史與快捷
|
||
- [ ] localStorage 保存搜尋記錄
|
||
- [ ] 搜尋歷史下拉選單
|
||
- [ ] 常用篩選組合儲存
|
||
- [ ] 自定義篩選預設
|
||
- [ ] 一鍵重置到個人偏好
|
||
- [ ] 搜尋記錄管理 (清除、固定)
|
||
|
||
#### 3.2 批量操作系統
|
||
- [ ] 多選 checkbox 界面
|
||
- [ ] 全選/反選/部分選功能
|
||
- [ ] 批量操作工具列
|
||
- 批量收藏/取消收藏
|
||
- 批量刪除
|
||
- 批量標記為已掌握
|
||
- 批量移動到複習列表
|
||
- [ ] 批量操作確認對話框
|
||
- [ ] 操作結果通知
|
||
|
||
#### 3.3 界面優化
|
||
- [ ] 響應式設計改善
|
||
- [ ] 搜尋結果載入骨架
|
||
- [ ] 空狀態優化設計
|
||
- [ ] 篩選條件摺疊/展開動畫
|
||
- [ ] 搜尋結果數量動畫
|
||
|
||
---
|
||
|
||
### 第四階段:搜尋智能化
|
||
> **預計時間**: 7-10天
|
||
> **難度**: ⭐⭐⭐⭐⭐
|
||
> **價值**: ⭐⭐⭐
|
||
|
||
#### 4.1 智能搜尋算法
|
||
- [ ] 模糊搜尋實現 (Fuzzy Search)
|
||
- [ ] 相關性排序算法
|
||
- [ ] 詞根匹配 (英語詞根系統)
|
||
- [ ] 同義詞搜尋
|
||
- [ ] 拼寫錯誤容錯
|
||
|
||
#### 4.2 搜尋建議系統
|
||
- [ ] 自動完成功能
|
||
- [ ] 搜尋建議下拉
|
||
- [ ] 相關詞彙推薦
|
||
- [ ] 搜尋熱詞統計
|
||
- [ ] 個性化建議
|
||
|
||
#### 4.3 效能優化
|
||
- [ ] 虛擬滾動支援大量數據
|
||
- [ ] 搜尋結果快取策略
|
||
- [ ] 防抖優化進階版
|
||
- [ ] 背景預加載
|
||
- [ ] CDN 快取優化
|
||
|
||
---
|
||
|
||
## 🛠️ 技術實現細節
|
||
|
||
### 前端技術棧
|
||
- **UI組件**: 自定義組件 + Tailwind CSS
|
||
- **狀態管理**: React useState + useEffect
|
||
- **快取策略**: localStorage + sessionStorage
|
||
- **虛擬滾動**: react-window (如需要)
|
||
- **日期選擇**: react-datepicker
|
||
- **模糊搜尋**: fuse.js
|
||
|
||
### 後端 API 擴展
|
||
```typescript
|
||
// 新增 API 參數
|
||
interface GetFlashcardsParams {
|
||
// 現有參數
|
||
search?: string;
|
||
favoritesOnly?: boolean;
|
||
cefrLevel?: string;
|
||
partOfSpeech?: string;
|
||
masteryLevel?: string;
|
||
|
||
// 新增參數
|
||
page?: number; // 頁碼
|
||
limit?: number; // 每頁數量
|
||
sortBy?: string; // 排序字段
|
||
sortOrder?: 'asc' | 'desc'; // 排序方向
|
||
dateFrom?: string; // 創建時間起始
|
||
dateTo?: string; // 創建時間結束
|
||
reviewCountMin?: number; // 最少複習次數
|
||
reviewCountMax?: number; // 最多複習次數
|
||
accuracyMin?: number; // 最低正確率
|
||
accuracyMax?: number; // 最高正確率
|
||
}
|
||
```
|
||
|
||
### 資料庫查詢優化
|
||
- 添加相關索引 (created_at, mastery_level, review_count)
|
||
- 分頁查詢優化
|
||
- 全文搜尋索引 (如果支援)
|
||
|
||
---
|
||
|
||
## 📊 成功指標
|
||
|
||
### 使用者體驗指標
|
||
- [ ] 搜尋回應時間 < 300ms
|
||
- [ ] 分頁載入時間 < 200ms
|
||
- [ ] 用戶搜尋成功率 > 90%
|
||
- [ ] 平均搜尋步驟 < 3步
|
||
|
||
### 功能完成度指標
|
||
- [ ] 階段一功能 100% 完成
|
||
- [ ] 階段二功能 100% 完成
|
||
- [ ] 階段三功能 80% 完成
|
||
- [ ] 階段四功能 60% 完成
|
||
|
||
### 代碼品質指標
|
||
- [ ] TypeScript 類型覆蓋率 > 95%
|
||
- [ ] 單元測試覆蓋率 > 80%
|
||
- [ ] ESLint 規則 100% 通過
|
||
- [ ] 效能測試通過
|
||
|
||
---
|
||
|
||
## 📅 時程規劃
|
||
|
||
| 階段 | 功能 | 預計時間 | 優先級 | 負責人 |
|
||
|------|------|----------|--------|--------|
|
||
| 1 | 排序功能 | 2-3天 | P0 | 開發者 |
|
||
| 1 | 分頁機制 | 2-3天 | P0 | 開發者 |
|
||
| 2 | 時間篩選 | 2-3天 | P1 | 開發者 |
|
||
| 2 | 複習統計篩選 | 2-3天 | P1 | 開發者 |
|
||
| 3 | 搜尋歷史 | 3-4天 | P2 | 開發者 |
|
||
| 3 | 批量操作 | 2-3天 | P2 | 開發者 |
|
||
| 4 | 智能搜尋 | 5-7天 | P3 | 開發者 |
|
||
| 4 | 效能優化 | 2-3天 | P3 | 開發者 |
|
||
|
||
**總計預估**: 20-29 天
|
||
|
||
---
|
||
|
||
## 🔄 迭代策略
|
||
|
||
### MVP (最小可行產品)
|
||
**目標**: 第一階段功能
|
||
- 基本排序 (創建時間、掌握度)
|
||
- 簡單分頁 (固定每頁 20 個)
|
||
|
||
### V1.0
|
||
**目標**: 第一、二階段功能
|
||
- 完整排序選項
|
||
- 靈活分頁配置
|
||
- 時間範圍篩選
|
||
- 複習統計篩選
|
||
|
||
### V2.0
|
||
**目標**: 第三階段功能
|
||
- 搜尋歷史
|
||
- 批量操作
|
||
- UI/UX 優化
|
||
|
||
### V3.0
|
||
**目標**: 第四階段功能
|
||
- 智能搜尋
|
||
- 效能優化
|
||
- 進階分析
|
||
|
||
---
|
||
|
||
## 📝 備注
|
||
|
||
### 技術債務
|
||
- 現有搜尋邏輯需重構以支援新功能
|
||
- API 回應格式可能需要調整
|
||
- 前端狀態管理複雜度會增加
|
||
|
||
### 風險評估
|
||
- **高風險**: 大量數據時的效能問題
|
||
- **中風險**: 複雜篩選條件的 UI 設計
|
||
- **低風險**: 基本排序和分頁功能
|
||
|
||
### 測試策略
|
||
- 單元測試:搜尋邏輯、篩選函數
|
||
- 整合測試:API 調用、狀態管理
|
||
- E2E 測試:用戶搜尋流程
|
||
- 效能測試:大量數據場景
|
||
|
||
---
|
||
|
||
*最後更新: 2025-09-24*
|
||
*版本: 1.0* |