#!/usr/bin/env bash set -euo pipefail if [ $# -lt 1 ]; then echo "Usage: $0 " echo "Example: $0 162" exit 1 fi ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" TENANT_ID="$1" # Fixed smoke-test queries and languages (no CLI args). SAMPLE_QUERIES=(s sh dress tshirt) SAMPLE_LANGS=(en zh) API_BASE="${API_BASE_URL:-http://localhost:6002}" cd "$ROOT_DIR" PY_BIN="${PYTHON_BIN:-$ROOT_DIR/.venv/bin/python}" if [ ! -x "$PY_BIN" ]; then PY_BIN="python3" fi if [ -z "${ES_HOST:-}" ]; then ES_HOST="$("$PY_BIN" - <<'PY' from dotenv import dotenv_values print(dotenv_values('.env').get('ES_HOST') or 'http://localhost:9200') PY )" fi if [ -z "${ES_USERNAME:-}" ] || [ -z "${ES_PASSWORD:-}" ]; then readarray -t _ES_CREDS < <("$PY_BIN" - <<'PY' from dotenv import dotenv_values cfg = dotenv_values('.env') print(cfg.get('ES_USERNAME') or '') print(cfg.get('ES_PASSWORD') or '') PY ) ES_USERNAME="${ES_USERNAME:-${_ES_CREDS[0]}}" ES_PASSWORD="${ES_PASSWORD:-${_ES_CREDS[1]}}" fi if [ -n "${ES_USERNAME:-}" ] && [ -n "${ES_PASSWORD:-}" ]; then AUTH=(-u "${ES_USERNAME}:${ES_PASSWORD}") else AUTH=() fi ALIAS_NAME="${ES_INDEX_NAMESPACE:-}search_suggestions_tenant_${TENANT_ID}_current" echo "[1/4] Full rebuild tenant=${TENANT_ID} (versioned + alias publish)" "$PY_BIN" main.py build-suggestions \ --tenant-id "$TENANT_ID" \ --es-host "$ES_HOST" \ --mode full \ --days 365 \ --batch-size 500 \ --publish-alias \ --keep-versions 2 echo "[2/4] Incremental update tenant=${TENANT_ID}" "$PY_BIN" main.py build-suggestions \ --tenant-id "$TENANT_ID" \ --es-host "$ES_HOST" \ --mode incremental \ --overlap-minutes 30 echo "[3/4] ES count + sample" curl -sS "${AUTH[@]}" "$ES_HOST/$ALIAS_NAME/_count?pretty" echo curl -sS "${AUTH[@]}" "$ES_HOST/$ALIAS_NAME/_search?pretty" -H 'Content-Type: application/json' -d '{ "size": 5, "query": {"match_all": {}}, "_source": ["lang", "text", "rank_score", "sources", "query_count_30d"] }' echo echo "[4/4] API smoke test" for lang in "${SAMPLE_LANGS[@]}"; do for q in "${SAMPLE_QUERIES[@]}"; do echo "--- GET /search/suggestions?q=${q}&language=${lang} ---" curl -sS "$API_BASE/search/suggestions?q=${q}&size=10&language=${lang}" -H "X-Tenant-ID: ${TENANT_ID}" echo done done