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"
```
|