#!/usr/bin/env python3 """ 测试ES source_fields配置的脚本 """ import sys import os sys.path.append(os.path.dirname(os.path.abspath(__file__))) from config import ConfigLoader, SearchConfig def test_source_fields_config(): """测试source_fields配置是否正确加载""" print("测试ES source_fields配置...") # 加载配置 config_loader = ConfigLoader("config/schema") try: # 加载customer1配置 config = config_loader.load_customer_config("customer1") print(f"✓ 成功加载配置: {config.customer_id}") # 检查source_fields配置 source_fields = config.query_config.source_fields print(f"✓ source_fields配置 ({len(source_fields)}个字段):") for i, field in enumerate(source_fields, 1): print(f" {i:2d}. {field}") # 检查默认字段列表是否包含预期字段 expected_fields = ["id", "title", "brandName", "price", "image"] for field in expected_fields: if field in source_fields: print(f"✓ 包含预期字段: {field}") else: print(f"⚠ 缺少预期字段: {field}") return True except Exception as e: print(f"✗ 配置加载失败: {e}") return False def test_es_query_builder(): """测试ES查询构建器是否正确应用source_fields""" print("\n测试ES查询构建器...") try: from search.es_query_builder import ESQueryBuilder # 测试基础查询构建器 builder = ESQueryBuilder( index_name="test_index", match_fields=["title", "content"], source_fields=["id", "title", "price"] ) # 构建查询 query = builder.build_query("test query") print("✓ ES查询构建成功") print(f"查询结构:") print(f" size: {query.get('size')}") print(f" _source: {query.get('_source')}") # 检查_source配置 if "_source" in query: source_config = query["_source"] if "includes" in source_config: print(f"✓ _source includes配置正确: {source_config['includes']}") else: print("✗ _source配置中缺少includes字段") else: print("✗ 查询中缺少_source配置") return True except Exception as e: print(f"✗ ES查询构建器测试失败: {e}") import traceback traceback.print_exc() return False def test_multilang_query_builder(): """测试多语言查询构建器""" print("\n测试多语言查询构建器...") try: from search.multilang_query_builder import MultiLanguageQueryBuilder # 加载配置 config_loader = ConfigLoader("config/schema") config = config_loader.load_customer_config("customer1") # 创建多语言查询构建器 builder = MultiLanguageQueryBuilder( config=config, index_name=config.es_index_name, text_embedding_field="text_embedding", image_embedding_field="image_embedding", source_fields=config.query_config.source_fields ) print("✓ 多语言查询构建器创建成功") print(f" source_fields配置: {builder.source_fields}") return True except Exception as e: print(f"✗ 多语言查询构建器测试失败: {e}") import traceback traceback.print_exc() return False if __name__ == "__main__": print("=" * 60) print("ES Source Fields 配置测试") print("=" * 60) success = True # 运行所有测试 success &= test_source_fields_config() success &= test_es_query_builder() success &= test_multilang_query_builder() print("\n" + "=" * 60) if success: print("✓ 所有测试通过!source_fields配置已正确实现。") else: print("✗ 部分测试失败,请检查配置和代码。") print("=" * 60)