create_tenant_index.sh
1.99 KB
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
#!/bin/bash
# 为租户创建 ES 索引
# 用法: ./scripts/create_tenant_index.sh <tenant_id>
# 切换到项目根目录
cd "$(dirname "$0")/.."
PROJECT_ROOT="$(pwd)"
# 加载 .env 文件(如果存在)
# shellcheck source=scripts/lib/load_env.sh
source "${PROJECT_ROOT}/scripts/lib/load_env.sh"
load_env_file "${PROJECT_ROOT}/.env"
ES_HOST="${ES_HOST:-http://localhost:9200}"
ES_USERNAME="${ES_USERNAME:-}"
ES_PASSWORD="${ES_PASSWORD:-}"
ES_INDEX_NAMESPACE="${ES_INDEX_NAMESPACE:-}"
# 检查命令行参数
if [ $# -eq 0 ]; then
echo "用法: $0 <tenant_id>"
echo "示例: $0 170"
exit 1
fi
TENANT_ID="$1"
BASE_INDEX_NAME="search_products_tenant_${TENANT_ID}"
ES_INDEX="${ES_INDEX_NAMESPACE}${BASE_INDEX_NAME}"
MAPPING_FILE="mappings/search_products.json"
# 检查 mapping 文件是否存在
if [ ! -f "$MAPPING_FILE" ]; then
echo "错误: mapping 文件不存在: $MAPPING_FILE"
exit 1
fi
# 手动确认
echo "创建索引前,将删除已有的同名索引。"
echo "索引名称: $ES_INDEX"
echo "(注意:包含环境前缀 ES_INDEX_NAMESPACE='${ES_INDEX_NAMESPACE}')"
echo "请输入索引名称 '$ES_INDEX' 来确认:"
read -r user_input
if [ "$user_input" != "$ES_INDEX" ]; then
echo "确认失败,索引名称不匹配。退出操作。"
exit 1
fi
echo "确认成功,继续创建索引..."
# 构建 curl 认证参数
AUTH_PARAM=""
if [ -n "$ES_USERNAME" ] && [ -n "$ES_PASSWORD" ]; then
AUTH_PARAM="-u ${ES_USERNAME}:${ES_PASSWORD}"
fi
# 删除已存在的索引(如果存在)
echo
echo "删除索引: $ES_INDEX"
echo
curl -X DELETE "${ES_HOST}/${ES_INDEX}" $AUTH_PARAM -s -o /dev/null -w "HTTP状态码: %{http_code}\n"
echo
echo "创建索引: $ES_INDEX"
echo
# 创建索引(使用 mapping 文件)
curl -X PUT "${ES_HOST}/${ES_INDEX}" \
-H "Content-Type: application/json" \
$AUTH_PARAM \
-d @"${MAPPING_FILE}" \
-w "\nHTTP状态码: %{http_code}\n"
echo
echo "完成!"
echo "提示: 请调用 /indexer/reindex 接口导入数据"