Blame view

suggestion/TROUBLESHOOTING.md 3.49 KB
ff9efda0   tangwang   suggest
1
  # Suggestion 故障排查手册(Phase 2)
316c97c4   tangwang   feat: 完整落地多租户 sug...
2
  
ff9efda0   tangwang   suggest
3
  ## 1. `/search/suggestions` 总是空数组
316c97c4   tangwang   feat: 完整落地多租户 sug...
4
5
6
  
  ### 排查步骤
  
ff9efda0   tangwang   suggest
7
  1. 检查 alias 是否存在并有数据:
316c97c4   tangwang   feat: 完整落地多租户 sug...
8
9
  
  ```bash
ff9efda0   tangwang   suggest
10
11
  ALIAS_NAME="${ES_INDEX_NAMESPACE:-}search_suggestions_tenant_162_current"
  curl "$ES_HOST/$ALIAS_NAME/_count?pretty"
316c97c4   tangwang   feat: 完整落地多租户 sug...
12
13
  ```
  
ff9efda0   tangwang   suggest
14
  2. 直接抽样查看:
316c97c4   tangwang   feat: 完整落地多租户 sug...
15
16
  
  ```bash
ff9efda0   tangwang   suggest
17
18
19
20
21
  curl "$ES_HOST/$ALIAS_NAME/_search?pretty" -H 'Content-Type: application/json' -d '{
    "size": 20,
    "query": {"match_all": {}},
    "_source": ["lang", "text", "rank_score", "query_count_30d"]
  }'
316c97c4   tangwang   feat: 完整落地多租户 sug...
22
23
  ```
  
ff9efda0   tangwang   suggest
24
  3. 确认请求租户和语言:
316c97c4   tangwang   feat: 完整落地多租户 sug...
25
26
  
  ```bash
ff9efda0   tangwang   suggest
27
28
  curl "http://localhost:6002/search/suggestions?q=shirt&size=10&language=en" \
    -H "X-Tenant-ID: 162"
316c97c4   tangwang   feat: 完整落地多租户 sug...
29
30
  ```
  
316c97c4   tangwang   feat: 完整落地多租户 sug...
31
32
  ## 2. 报错:`tenant_id is required`
  
ff9efda0   tangwang   suggest
33
  请求缺少 `X-Tenant-ID`(或 query `tenant_id`)。
316c97c4   tangwang   feat: 完整落地多租户 sug...
34
35
36
37
  
  示例:
  
  ```bash
ff9efda0   tangwang   suggest
38
  curl "http://localhost:6002/search/suggestions?q=shirt&size=10&language=en&tenant_id=162"
316c97c4   tangwang   feat: 完整落地多租户 sug...
39
40
  ```
  
ff9efda0   tangwang   suggest
41
  ## 3. 增量更新没有写入(`updated_terms=0`)
316c97c4   tangwang   feat: 完整落地多租户 sug...
42
  
ff9efda0   tangwang   suggest
43
  ### 常见原因
316c97c4   tangwang   feat: 完整落地多租户 sug...
44
  
ff9efda0   tangwang   suggest
45
46
47
  - watermark 时间窗内没有新日志
  - `overlap_minutes` 太小
  - `min_query_len` 过滤过严
316c97c4   tangwang   feat: 完整落地多租户 sug...
48
49
50
51
  
  ### 处理
  
  ```bash
ff9efda0   tangwang   suggest
52
  ./scripts/build_suggestions.sh 162 --mode incremental --overlap-minutes 60
316c97c4   tangwang   feat: 完整落地多租户 sug...
53
54
  ```
  
ff9efda0   tangwang   suggest
55
  并在 MySQL 中确认窗口内日志存在。
316c97c4   tangwang   feat: 完整落地多租户 sug...
56
  
ff9efda0   tangwang   suggest
57
  ## 4. alias 未切到新索引
316c97c4   tangwang   feat: 完整落地多租户 sug...
58
59
60
61
  
  ### 检查
  
  ```bash
ff9efda0   tangwang   suggest
62
63
  ALIAS_NAME="${ES_INDEX_NAMESPACE:-}search_suggestions_tenant_162_current"
  curl "$ES_HOST/_alias/$ALIAS_NAME?pretty"
316c97c4   tangwang   feat: 完整落地多租户 sug...
64
65
  ```
  
316c97c4   tangwang   feat: 完整落地多租户 sug...
66
67
  ### 处理
  
ff9efda0   tangwang   suggest
68
  重新执行全量发布:
316c97c4   tangwang   feat: 完整落地多租户 sug...
69
  
ff9efda0   tangwang   suggest
70
71
72
  ```bash
  ./scripts/build_suggestions.sh 162 --mode full --publish-alias --keep-versions 2
  ```
316c97c4   tangwang   feat: 完整落地多租户 sug...
73
  
ff9efda0   tangwang   suggest
74
  ## 5. ES 401:`missing authentication credentials`
316c97c4   tangwang   feat: 完整落地多租户 sug...
75
  
ff9efda0   tangwang   suggest
76
  ES 开启鉴权时,所有 curl 都需要 `-u "$ES_USERNAME:$ES_PASSWORD"` 或 API Key。
316c97c4   tangwang   feat: 完整落地多租户 sug...
77
  
ff9efda0   tangwang   suggest
78
  ## 6. 构建脚本报 `Cannot connect to Elasticsearch`
316c97c4   tangwang   feat: 完整落地多租户 sug...
79
  
ff9efda0   tangwang   suggest
80
  检查 `ES_HOST`、账号密码、网络连通性:
316c97c4   tangwang   feat: 完整落地多租户 sug...
81
  
ff9efda0   tangwang   suggest
82
83
84
85
  ```bash
  echo "$ES_HOST"
  curl -u "$ES_USERNAME:$ES_PASSWORD" "$ES_HOST"
  ```
316c97c4   tangwang   feat: 完整落地多租户 sug...
86
  
ff9efda0   tangwang   suggest
87
  ## 7. 首次增量执行失败:找不到 active index
316c97c4   tangwang   feat: 完整落地多租户 sug...
88
  
ff9efda0   tangwang   suggest
89
  说明该租户尚未完成全量构建。可直接启用 bootstrap(默认开启):
316c97c4   tangwang   feat: 完整落地多租户 sug...
90
91
  
  ```bash
ff9efda0   tangwang   suggest
92
  ./scripts/build_suggestions.sh 162 --mode incremental --bootstrap-if-missing
316c97c4   tangwang   feat: 完整落地多租户 sug...
93
94
  ```
  
ff9efda0   tangwang   suggest
95
  或先执行一次全量。
daf66a51   tangwang   已完成接口级压测脚本,覆盖搜索、s...
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
131
132
133
134
135
136
  
  ## 8. `q=F` 这类前缀为空,但商品里明明有 `F...` 标题
  
  ### 典型原因
  
  - suggestion 索引里只写入了 query_log,没写入商品 title(例如商品文档缺少 `spu_id`,但有 `id`)。
  - 英文标题太长,被噪声过滤(现在会自动提取前导短语,例如 `Furby Furblets 2-Pack`)。
  
  ### 逐条排查
  
  1. 看 suggestion alias 是否有 `en` 文档:
  
  ```bash
  ALIAS_NAME="${ES_INDEX_NAMESPACE:-}search_suggestions_tenant_162_current"
  curl -u "$ES_USERNAME:$ES_PASSWORD" "$ES_HOST/$ALIAS_NAME/_search?pretty" \
    -H 'Content-Type: application/json' \
    -d '{"size":0,"aggs":{"langs":{"terms":{"field":"lang","size":20}}}}'
  ```
  
  2.`en` 下是否有 `f` 前缀:
  
  ```bash
  curl -u "$ES_USERNAME:$ES_PASSWORD" "$ES_HOST/$ALIAS_NAME/_search?pretty" \
    -H 'Content-Type: application/json' \
    -d '{"size":20,"_source":["text","text_norm","lang"],"query":{"bool":{"filter":[{"term":{"lang":"en"}}],"must":[{"prefix":{"text_norm":"f"}}]}}}'
  ```
  
  3. 对照商品索引确认源数据确实存在 `F...`
  
  ```bash
  curl -u "$ES_USERNAME:$ES_PASSWORD" "$ES_HOST/search_products_tenant_162/_search?pretty" \
    -H 'Content-Type: application/json' \
    -d '{"size":20,"_source":["id","spu_id","title.en"],"query":{"match_phrase_prefix":{"title.en":"f"}}}'
  ```
  
  4. 重建后再测 API:
  
  ```bash
  ./scripts/rebuild_suggestions.sh 162 F en
  curl "http://localhost:6002/search/suggestions?q=F&size=40&language=en&tenant_id=162"
  ```