Blame view

scripts/test_facet_api.py 4.16 KB
a10a89a3   tangwang   构造测试数据用于测试分类 和 三种...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
  #!/usr/bin/env python3
  """
  测试脚本:模拟前端请求,检查后端返回的分面结果
  """
  
  import sys
  import json
  import requests
  import argparse
  from pathlib import Path
  
  sys.path.insert(0, str(Path(__file__).parent.parent))
  
  
  def main():
      parser = argparse.ArgumentParser(description='测试分面API')
      parser.add_argument('--api-url', type=str, default='http://localhost:6002/search/', help='API URL')
      parser.add_argument('--tenant-id', type=str, required=True, help='Tenant ID')
      args = parser.parse_args()
      
      # 模拟前端的分面请求(与frontend/static/js/app.js一致)
      request_data = {
          "query": "",  # 空查询,获取所有数据
          "size": 10,
          "from": 0,
          "facets": [
              "category1_name",
              "specifications.color",
              "specifications.size",
              "specifications.material"
          ]
      }
      
      headers = {
          "Content-Type": "application/json",
          "X-Tenant-ID": args.tenant_id
      }
      
      try:
          print(f"发送请求到: {args.api_url}")
          print(f"Tenant ID: {args.tenant_id}")
          print(f"请求数据:")
          print(json.dumps(request_data, indent=2, ensure_ascii=False))
          print("\n" + "="*60)
          
          response = requests.post(args.api_url, json=request_data, headers=headers, timeout=30)
          
          if response.status_code != 200:
              print(f"API错误: {response.status_code}")
              print(response.text)
              return 1
          
          data = response.json()
          
          print("API响应:")
          print(f"  总结果数: {data.get('total', 0)}")
          print(f"  返回结果数: {len(data.get('results', []))}")
          
          facets = data.get('facets', [])
          print(f"\n分面数量: {len(facets)}")
          
          if not facets:
              print("\n⚠ 分面列表为空!")
              return 1
          
          print("\n" + "="*60)
          print("分面详情:")
          print("="*60)
          
          for i, facet in enumerate(facets, 1):
              print(f"\n{i}. {facet.get('field')}")
              print(f"   标签: {facet.get('label')}")
              print(f"   类型: {facet.get('type')}")
              print(f"   值数量: {len(facet.get('values', []))}")
              print(f"   总计数: {facet.get('total_count', 0)}")
              
              values = facet.get('values', [])
              if values:
                  print(f"   前5个值:")
                  for v in values[:5]:
                      print(f"     - {v.get('value')}: {v.get('count')}")
              else:
                  print(f"   ⚠ 值列表为空!")
          
          # 检查specifications.color分面
          print("\n" + "="*60)
          print("检查specifications.color分面:")
          print("="*60)
          
          color_facet = None
          for facet in facets:
              if facet.get('field') == 'specifications.color':
                  color_facet = facet
                  break
          
          if color_facet:
              print("✓ 找到specifications.color分面")
              print(f"  值数量: {len(color_facet.get('values', []))}")
              if color_facet.get('values'):
                  print("  前10个值:")
                  for v in color_facet.get('values', [])[:10]:
                      print(f"    {v.get('value')}: {v.get('count')}")
              else:
                  print("  ⚠ 值列表为空!")
          else:
              print("✗ 未找到specifications.color分面")
              print(f"  可用分面字段: {[f.get('field') for f in facets]}")
          
          # 输出完整JSON(便于调试)
          print("\n" + "="*60)
          print("完整分面JSON(前500字符):")
          print("="*60)
          facets_json = json.dumps(facets, indent=2, ensure_ascii=False)
          print(facets_json[:500])
          
      except requests.exceptions.ConnectionError as e:
          print(f"\n连接错误: 无法连接到API服务器 {args.api_url}")
          print("请确保后端服务正在运行")
          return 1
      except Exception as e:
          print(f"\n错误: {e}")
          import traceback
          traceback.print_exc()
          return 1
      
      return 0
  
  
  if __name__ == '__main__':
      sys.exit(main())