""" 測試關鍵字匹配邏輯 - 基於實際商品資料 """ def test_keyword_expansion(): """測試關鍵字擴展邏輯""" def extract_keywords_with_expansion(query_text: str): """擴展版關鍵字提取""" # 移除常見的查詢詞彙 stop_words = ['推薦', '有沒有', '是否有', '請問', '想要', '需要', '找', '查詢', '搜尋'] # 分割並清理關鍵字 words = query_text.replace('?', '').replace('?', '').split() keywords = [word for word in words if word not in stop_words and len(word) > 1] # 擴展相關關鍵字 expanded_keywords = [] for keyword in keywords: expanded_keywords.append(keyword) # 貓砂相關擴展 if '貓砂' in keyword or '貓' in keyword: expanded_keywords.extend(['礦砂', '豆腐砂', '水晶砂', '木屑砂', 'litter']) # 狗糧相關擴展 if '狗糧' in keyword or '狗' in keyword: expanded_keywords.extend(['犬糧', '犬種', '狗食', 'dog']) # 寵物相關擴展 if '寵物' in keyword: expanded_keywords.extend(['貓', '狗', '犬', 'pet', 'cat']) return expanded_keywords if expanded_keywords else [query_text.strip()] print("🔍 測試關鍵字擴展邏輯") print("=" * 60) test_queries = [ "你好, 請問有沒有貓砂相關產品?", "是否有推薦貓砂?", "有什麼寵物用品?", "查詢狗糧庫存", "貓砂還有嗎?" ] for query in test_queries: keywords = extract_keywords_with_expansion(query) print(f"'{query}'") print(f" → 擴展關鍵字: {keywords}") print() def test_product_matching(): """測試商品匹配邏輯""" # 實際商品資料(來自您的 Supabase) products = [ { "id": 1, "productCode": "OL1100-1", "productName": "毆力天然犬種300g 室內成犬無榖小顆粒", "stock": 100, "category_id": 1 }, { "id": 2, "productCode": "SW-06-01", "productName": "Shovel well豪好鏟 破碎型礦砂", "stock": 50, "category_id": 1 }, { "id": 3, "productCode": "TL-03", "productName": "美國極冠貓砂 薰衣草12kg", "stock": 48, "category_id": 1 }, { "id": 4, "productCode": "SL11002", "productName": "首領汪 膠原鴨舌 5入彭湃包", "stock": 100, "category_id": 1 } ] def search_products_simulation(query_text: str): """模擬商品搜尋""" # 擴展關鍵字 def extract_keywords_with_expansion(query_text: str): stop_words = ['推薦', '有沒有', '是否有', '請問', '想要', '需要', '找', '查詢', '搜尋'] words = query_text.replace('?', '').replace('?', '').split() keywords = [word for word in words if word not in stop_words and len(word) > 1] expanded_keywords = [] for keyword in keywords: expanded_keywords.append(keyword) if '貓砂' in keyword or '貓' in keyword: expanded_keywords.extend(['礦砂', '豆腐砂', '水晶砂', '木屑砂', 'litter']) if '狗糧' in keyword or '狗' in keyword: expanded_keywords.extend(['犬糧', '犬種', '狗食', 'dog']) if '寵物' in keyword: expanded_keywords.extend(['貓', '狗', '犬', 'pet', 'cat']) return expanded_keywords if expanded_keywords else [query_text.strip()] keywords = extract_keywords_with_expansion(query_text) matched_products = [] for product in products: # 檢查是否有任一關鍵字匹配 for keyword in keywords: if (keyword.lower() in product["productName"].lower() or keyword.lower() in product["productCode"].lower()): matched_products.append({ "product": product, "matched_keyword": keyword }) break # 找到匹配就跳出 return matched_products, keywords print("🛍️ 測試商品匹配邏輯") print("=" * 60) test_queries = [ "你好, 請問有沒有貓砂相關產品?", "是否有推薦貓砂?", "有什麼寵物用品?", "查詢狗糧庫存", "礦砂還有嗎?", "犬種商品" ] for query in test_queries: print(f"查詢: '{query}'") matched_products, keywords = search_products_simulation(query) print(f"使用關鍵字: {keywords}") print(f"找到 {len(matched_products)} 個商品:") for match in matched_products: product = match["product"] keyword = match["matched_keyword"] print(f" ✅ {product['productName']} (匹配關鍵字: '{keyword}', 庫存: {product['stock']})") if not matched_products: print(" ❌ 沒有找到匹配的商品") print("-" * 60) def test_specific_cat_litter_queries(): """專門測試貓砂查詢""" print("\n🐱 專門測試貓砂查詢") print("=" * 60) # 貓砂商品 cat_litter_products = [ "Shovel well豪好鏟 破碎型礦砂", "美國極冠貓砂 薰衣草12kg" ] # 測試查詢 cat_queries = [ "貓砂", "礦砂", "貓", "litter", "豪好鏟", "極冠" ] print("貓砂相關商品:") for product in cat_litter_products: print(f" - {product}") print(f"\n測試查詢關鍵字:") for query in cat_queries: matches = [] for product in cat_litter_products: if query.lower() in product.lower(): matches.append(product) print(f" '{query}' → 匹配 {len(matches)} 個商品") for match in matches: print(f" ✅ {match}") def main(): """主函數""" print("🚀 開始關鍵字匹配測試\n") test_keyword_expansion() test_product_matching() test_specific_cat_litter_queries() print("\n" + "=" * 60) print("✅ 測試完成!") print("\n💡 分析結果:") print("1. 關鍵字擴展邏輯應該能找到 '礦砂' 商品") print("2. '貓砂' 查詢應該匹配到兩個商品") print("3. 確認搜尋邏輯是否正確運作") if __name__ == "__main__": main()