diff --git a/apps/desktop/src-tauri/src/presentation/commands/similarity_search_commands.rs b/apps/desktop/src-tauri/src/presentation/commands/similarity_search_commands.rs index fc8dac3..83ccd4c 100644 --- a/apps/desktop/src-tauri/src/presentation/commands/similarity_search_commands.rs +++ b/apps/desktop/src-tauri/src/presentation/commands/similarity_search_commands.rs @@ -8,7 +8,7 @@ use crate::presentation::commands::outfit_search_commands::search_similar_outfit /// 基于现有的 search_similar_outfits 功能,提供简化的接口 /// 快速相似度搜索 -/// 使用预设配置进行简化搜索 +/// 支持高级过滤器配置的相似度搜索 #[command] pub async fn quick_similarity_search( state: State<'_, AppState>, @@ -16,8 +16,9 @@ pub async fn quick_similarity_search( relevance_threshold: Option, page_size: Option, page_offset: Option, + config: Option, ) -> Result { - // 构建默认搜索配置 + // 构建搜索配置 - 使用传入的配置或创建默认配置 let threshold = match relevance_threshold.as_deref() { Some("LOWEST") => RelevanceThreshold::Lowest, Some("LOW") => RelevanceThreshold::Low, @@ -26,8 +27,8 @@ pub async fn quick_similarity_search( _ => RelevanceThreshold::Medium, // 默认使用中等阈值 }; - let config = SearchConfig { - relevance_threshold: threshold, + let mut final_config = config.unwrap_or_else(|| SearchConfig { + relevance_threshold: threshold.clone(), environments: Vec::new(), categories: Vec::new(), color_filters: std::collections::HashMap::new(), @@ -37,18 +38,32 @@ pub async fn quick_similarity_search( custom_filters: Vec::new(), query_enhancement_enabled: true, color_thresholds: ColorThresholds::default(), - }; + }); + + // 确保阈值与传入的参数一致 + final_config.relevance_threshold = threshold; let request = SearchRequest { query: query.clone(), - config, + config: final_config.clone(), page_size: page_size.unwrap_or(12), // 工具页面显示更多结果,支持自定义 page_offset: page_offset.unwrap_or(0), // 支持分页偏移 }; // 调试信息 - eprintln!("相似度搜索请求: query='{}', page_size={}, page_offset={}", - query, request.page_size, request.page_offset); + if final_config.debug_mode { + eprintln!("相似度搜索请求详情:"); + eprintln!(" 查询: '{}'", query); + eprintln!(" 页面大小: {}", request.page_size); + eprintln!(" 页面偏移: {}", request.page_offset); + eprintln!(" 类别过滤: {:?}", final_config.categories); + eprintln!(" 环境过滤: {:?}", final_config.environments); + eprintln!(" 设计风格: {:?}", final_config.design_styles); + eprintln!(" 颜色过滤: {} 个", final_config.color_filters.len()); + } else { + eprintln!("相似度搜索请求: query='{}', page_size={}, page_offset={}", + query, request.page_size, request.page_offset); + } // 复用现有的搜索功能 search_similar_outfits(state, request).await diff --git a/apps/desktop/src/pages/tools/SimilaritySearchTool.tsx b/apps/desktop/src/pages/tools/SimilaritySearchTool.tsx index 3a625a0..3fe3495 100644 --- a/apps/desktop/src/pages/tools/SimilaritySearchTool.tsx +++ b/apps/desktop/src/pages/tools/SimilaritySearchTool.tsx @@ -94,8 +94,13 @@ const SimilaritySearchTool: React.FC = () => { // 处理搜索 const handleSearch = useCallback((request: SimilaritySearchRequest) => { - executeSearch(request); - }, [executeSearch]); + // 确保搜索请求包含当前的高级过滤器配置 + const enhancedRequest: SimilaritySearchRequest = { + ...request, + config: request.config || searchConfig, // 使用传入的配置或当前的高级过滤器配置 + }; + executeSearch(enhancedRequest); + }, [executeSearch, searchConfig]); // 处理建议选择 const handleSuggestionSelect = useCallback((suggestion: string) => { @@ -112,6 +117,7 @@ const SimilaritySearchTool: React.FC = () => { relevance_threshold: selectedThreshold, page_size: configState.config?.max_results_per_page || 12, page_offset: 0, + config: newConfig, // 包含高级过滤器配置 }; executeSearch(request); } @@ -164,14 +170,17 @@ const SimilaritySearchTool: React.FC = () => { // 监听相关性阈值变化,立即重新搜索 useEffect(() => { - const request: SimilaritySearchRequest = { - query: query.trim(), - relevance_threshold: selectedThreshold, - page_size: configState.config?.max_results_per_page || 12, - page_offset: (searchState.currentPage - 1) * (configState.config?.max_results_per_page || 12), - }; - executeSearch(request); - }, [selectedThreshold]); // 只监听阈值变化 + if (query.trim()) { // 只有在有查询内容时才搜索 + const request: SimilaritySearchRequest = { + query: query.trim(), + relevance_threshold: selectedThreshold, + page_size: configState.config?.max_results_per_page || 12, + page_offset: (searchState.currentPage - 1) * (configState.config?.max_results_per_page || 12), + config: searchConfig, // 包含高级过滤器配置 + }; + executeSearch(request); + } + }, [selectedThreshold, searchConfig]); // 监听阈值和高级过滤器配置变化 // 返回工具列表 const handleBackToTools = useCallback(() => { @@ -245,10 +254,11 @@ const SimilaritySearchTool: React.FC = () => { relevance_threshold: selectedThreshold, page_size: configState.config?.max_results_per_page || 12, page_offset: 0, + config: searchConfig, // 包含高级过滤器配置 }; executeSearch(searchRequest); - }, [selectedThreshold, configState.config?.max_results_per_page, executeSearch, setQuery]); + }, [selectedThreshold, configState.config?.max_results_per_page, executeSearch, setQuery, searchConfig]); // 关闭穿搭方案模态框 const handleCloseOutfitModal = useCallback(() => { diff --git a/apps/desktop/src/services/similaritySearchService.ts b/apps/desktop/src/services/similaritySearchService.ts index a3267f7..562358e 100644 --- a/apps/desktop/src/services/similaritySearchService.ts +++ b/apps/desktop/src/services/similaritySearchService.ts @@ -20,6 +20,7 @@ export class SimilaritySearchService { relevanceThreshold: request.relevance_threshold, pageSize: request.page_size, pageOffset: request.page_offset, + config: request.config, // 传递高级过滤器配置 }); return response; } catch (error) { diff --git a/apps/desktop/src/types/similaritySearch.ts b/apps/desktop/src/types/similaritySearch.ts index f306733..eef1ad0 100644 --- a/apps/desktop/src/types/similaritySearch.ts +++ b/apps/desktop/src/types/similaritySearch.ts @@ -4,8 +4,8 @@ */ // 重用现有的搜索结果类型 -import type { SearchResult, SearchResponse } from './outfitSearch'; -export type { SearchResult, SearchResponse }; +import type { SearchResult, SearchResponse, SearchConfig } from './outfitSearch'; +export type { SearchResult, SearchResponse, SearchConfig }; // 阈值选项 export interface ThresholdOption { @@ -22,12 +22,13 @@ export interface SimilaritySearchConfig { quick_search_tags: string[]; } -// 搜索请求(简化版) +// 搜索请求(扩展版,支持高级过滤器) export interface SimilaritySearchRequest { query: string; relevance_threshold?: string; page_size?: number; page_offset?: number; + config?: SearchConfig; // 添加高级过滤器配置支持 } // 搜索状态