#!/bin/bash # 为租户创建 ES 索引 # 用法: ./scripts/create_tenant_index.sh # 切换到项目根目录 cd "$(dirname "$0")/.." # 加载 .env 文件(如果存在) if [ -f .env ]; then set -a source .env set +a fi ES_HOST="${ES_HOST:-http://localhost:9200}" ES_USERNAME="${ES_USERNAME:-}" ES_PASSWORD="${ES_PASSWORD:-}" # 检查命令行参数 if [ $# -eq 0 ]; then echo "用法: $0 " echo "示例: $0 170" exit 1 fi TENANT_ID="$1" ES_INDEX="search_products_tenant_${TENANT_ID}" 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' 来确认:" 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 接口导入数据"