# 同義詞配置指南 ## 概述 Momentry Core 支持中文查詢的同義詞擴展功能,可將用戶查詢中的詞語自動擴展為其同義詞,提升搜索召回率。 **重要:系統不提供預設同義詞資料集**。為了避免版權問題,您需要提供自己的同義詞 JSON 檔案。系統提供擴展機制和示例檔案,但不會自動加載任何同義詞資料。 主要特性: - **繁簡體中文轉換**:自動將簡體中文查詢轉換為繁體中文(假設資料庫儲存繁體中文) - **同義詞擴展**:將查詢詞語擴展為多個同義詞,使用 OR 邏輯連接 - **智能分詞**:對中文文本進行分詞處理,支援混合查詢 - **多檔案支持**:可從多個 JSON 檔案加載同義詞映射 ## 配置方法 ### 1. 創建同義詞 JSON 檔案 同義詞檔案為標準 JSON 格式,鍵值對結構: ```json { "原始詞語": ["同義詞1", "同義詞2", "同義詞3"], "電腦": ["計算機", "微机", "筆記本"], "工作": ["任務", "作業", "職責"], "檔案": ["文件", "文檔", "資料"] } ``` **注意事項**: - 詞語需為**繁體中文**(系統會自動轉換簡體查詢) - 同義詞列表可包含多個詞語 - 支援單一詞語或多字詞語 ### 2. 環境變量配置 有兩種方式配置同義詞檔案: #### 方式一:單一檔案(推薦) ```bash export MOMENTRY_SYNONYM_FILE=/path/to/your/synonyms.json ``` #### 方式二:多個檔案(後面的檔案會覆蓋前面的) ```bash export MOMENTRY_SYNONYM_FILES=/path/to/base.json,/path/to/domain.json ``` ### 3. 開發環境設置 在 `.env.development` 或 `.env` 檔案中添加: ```bash # 同義詞配置文件(可選) # 取消註釋並設置為您的同義詞JSON檔案路徑以啟用同義詞擴展 MOMENTRY_SYNONYM_FILE=/Users/accusys/momentry_core_0.1/data/synonyms.json # 多個同義詞檔案(逗號分隔),會覆蓋 MOMENTRY_SYNONYM_FILE # MOMENTRY_SYNONYM_FILES=/path/to/first.json,/path/to/second.json ``` ## 使用示例 ### 示例同義詞檔案 (`docs/examples/custom_synonyms.json`) ```json { "電腦": ["計算機", "微机"], "視頻": ["影片", "錄像"], "分析": ["解析", "剖析"], "系統": ["體系", "架構"], "用戶": ["使用者", "客戶"], "數據": ["資料", "資訊"], "網絡": ["網路", "互聯網"], "檔案": ["文件", "文檔"], "團體": ["組織", "團隊"], "工作": ["任務", "作業"] } ``` ### 查詢擴展示例 | 原始查詢 | 擴展後查詢 | 說明 | |---------|-----------|------| | `電腦` | `(電腦 | 計算機 | 微机 | 筆記本)` | 單一詞語擴展 | | `電腦 工作` | `(電腦 | 計算機 | 微机) & (工作 | 任務 | 作業)` | 多詞語擴展 | | `視頻分析` | `(視頻 | 影片 | 錄像) & (分析 | 解析 | 剖析)` | 連續詞語擴展 | | `檔案系統` | `(檔案 | 文件 | 文檔) & (系統 | 體系 | 架構)` | 複合詞擴展 | ### API 使用 **BM25 搜索端點**: ```bash curl -X POST http://localhost:3003/api/v1/search/bm25 \ -H "X-API-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"query": "電腦工作", "limit": 10}' ``` **n8n 搜索端點**: ```bash curl -X POST http://localhost:3003/api/v1/n8n/search/bm25 \ -H "X-API-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"query": "視頻檔案", "limit": 5}' ``` ## 技術細節 ### 擴展邏輯 1. **繁簡轉換**:使用 OpenCC 將簡體中文轉換為繁體 2. **同義詞查找**:在加載的映射中查找匹配詞語 3. **查詢重構**:將原始詞語替換為 `(原始詞語 OR 同義詞1 OR 同義詞2 ...)` 4. **分詞處理**:對未匹配部分進行中文分詞 5. **TSQUERY 生成**:生成 PostgreSQL 全文搜索查詢語法 ### 分詞處理 - 使用 Jieba 分詞器進行中文分詞 - 分詞結果用空格分隔,例如:"電腦工作" → "電 腦 工作" - 分詞後每個部分都會加上前綴搜索符號 (`:*`) ### 性能考慮 - 同義詞映射在應用啟動時加載並緩存 - 擴展操作在內存中進行,性能影響最小 - 支援大量同義詞映射(數千條) ## 除錯與測試 ### 檢查同義詞加載 查看應用日誌中是否有以下訊息: ``` Loaded synonym expander from /path/to/synonyms.json ``` ### 測試擴展功能 使用內建測試工具: ```bash cargo run --bin test_synonym_expansion ``` ### 手動測試 創建測試程式檢查擴展結果: ```rust use momentry_core::core::text::global_synonym_expander; let expander = global_synonym_expander(); println!("擴展 '電腦': {}", expander.expand_word("電腦")); println!("擴展 '電腦 工作': {}", expander.expand_query("電腦 工作")); ``` ## 注意事項 1. **詞語格式**:確保同義詞檔案中的詞語為繁體中文 2. **檔案編碼**:使用 UTF-8 編碼保存 JSON 檔案 3. **重啟需求**:修改同義詞檔案後需要重啟應用才能生效 4. **版本兼容**:同義詞功能需 Momentry Core 0.1.0 以上版本 5. **版權注意**:請使用自創或已獲授權的同義詞資料,避免使用受版權保護的詞庫 ## 進階配置 ### 領域特定同義詞 為不同領域創建專用同義詞檔案: - `technical_terms.json` - 技術術語 - `business_terms.json` - 商業術語 - `industry_terms.json` - 行業術語 通過 `MOMENTRY_SYNONYM_FILES` 加載多個檔案。 ### 動態更新(計劃中) 未來版本將支援: - 熱重載同義詞檔案 - API 端點管理同義詞 - 用戶自定義同義詞 --- ## 附錄 ### 示例同義詞檔案 - 基礎示例:`docs/examples/custom_synonyms.json` - 舊示例(僅供參考):`data/synonyms.json` - 領域示例(僅供參考):`data/domain_synonyms.json` **注意**:這些檔案僅作為格式示例,系統不會自動加載。您需要設置 `MOMENTRY_SYNONYM_FILE` 環境變量指向您自己的同義詞檔案。 ### 相關程式檔案 - 同義詞擴展器:`src/core/text/synonym_expander.rs` - 繁簡轉換:`src/core/text/synonym.rs` - 分詞器:`src/core/text/tokenizer.rs` - PostgreSQL 整合:`src/core/db/postgres_db.rs`