13 Mar, 2026

1 commit


12 Mar, 2026

10 commits


11 Mar, 2026

10 commits

  • tangwang
     
  • 去掉 START_* 控制变量逻辑,默认只启动核心服务 backend/indexer/frontend。
    可选服务改为显式命令:./scripts/service_ctl.sh start embedding
    translator reranker tei cnclip。
    统一 translator 端口读取为 TRANSLATION_PORT(移除 TRANSLATOR_PORT
    兼容)。
    保留未知服务强校验。
    关键文件:service_ctl.sh
    “重名/歧义”修复
    frontend 端口命名统一:FRONTEND_PORT 为主,PORT 仅后备。
    start_frontend.sh 显式导出 PORT="${FRONTEND_PORT}",避免配置了
    FRONTEND_PORT 但服务仍跑 6003 的问题。
    文件:start_frontend.sh、frontend_server.py、env_config.py
    日志/PID 命名治理继续收口
    统一规则继续落地为 logs/<service>.log、logs/<service>.pid。
    cnclip 保持 logs/cnclip.log + logs/cnclip.pid。
    文件:service_ctl.sh、start_cnclip_service.sh、stop_cnclip_service.sh
    backend/indexer 启动风格统一补齐相关项
    frontend/translator 也对齐到 set -euo pipefail,并用 exec 直启主进程。
    文件:start_frontend.sh、start_translator.sh、start_backend.sh、start_indexer.sh
    legacy 入口清理
    删除:start_servers.py、stop_reranker.sh、stop_translator.sh。
    reranker 停止逻辑并入 service_ctl(含 VLLM::EngineCore 清理)。
    benchmark 脚本改为统一入口:service_ctl.sh stop reranker。
    文件:benchmark_reranker_1000docs.sh
    tangwang
     
  • - 前端 JS 不再写死后端地址:默认 API_BASE_URL 为空串,所有搜索与 suggest 请求改为同源路径 (/search/*),仅在显式注入 window.API_BASE_URL 时才覆盖,避免 .env 中旧的 http://43.166.252.75:6002 等配置污染浏览器请求。
    - 在 scripts/frontend_server.py 上实现轻量级反向代理:拦截 /search/、/admin/、/indexer/ 的 GET/POST/OPTIONS 请求,服务端将请求转发到本机 6002 (BACKEND_PROXY_URL,默认 http://127.0.0.1:6002),并把响应原样返回前端。
    - 通过“浏览器 → web服务器:6003(认证) → GPU:6003(本项目前端) → GPU 本机:6002(后端)”这条链路,彻底绕开 web 服务器 6002 上单独的 Basic Auth,解决了外网访问时前端能打开但搜索请求被 web:6002 拦截的问题。
    - frontend_server 默认不再注入 window.API_BASE_URL,只有在设置 FRONTEND_INJECT_API_BASE_URL=1 且 API_BASE_URL 有值时才向 HTML 注入脚本,确保默认行为始终是同源调用,由 6003 统一代理后端。
    - 更新 frontend/index.html 中的静态 JS 版本号(tenant_facets_config.js 和 app.js),强制浏览器拉取最新脚本,避免旧版前端继续使用硬编码的后端地址。
    
    Made-with: Cursor
    tangwang
     
  • tangwang
     
  • Made-with: Cursor
    tangwang
     
  • tangwang
     
  • 补充之前两个git commit的注释:
    `be3f0d4`
    **Indexer:补齐内容富化链路与批处理能力,完善契约/回归测试**
    - **新增富化流程**:在 `document_transformer` / `spu_transformer`
      中加入面向 SPU 的内容富化(enrich-content)处理与字段组装逻辑。
    - **增强增量索引**:`incremental_service`
      增加富化相关的处理分支与必要的边界/兼容逻辑。
    - **批处理与稳定性**:`process_products`
      调整处理节奏/批次边界,降低大批量处理时的失败率与抖动。
    - **测试补齐**:新增 CI
      级接口契约测试与批处理/富化相关单测,覆盖服务行为与关键路径回归。
    
    ---
    `9f5994b`
    
    **Reranker 微服务:上线与调优文档 + 批处理后端改造 + 性能基准脚本**
    - **文档体系完善**:补充 `reranker/DEPLOYMENT_AND_TUNING.md`、更新
      `reranker/README.md`,沉淀部署、参数选择、性能调优方法。
    - **后端能力增强**:新增/完善批处理工具 `batching_utils`,并对
      `qwen3_vllm` 后端进行批量推理/吞吐相关优化与适配。
    - **压测与报告**:新增 `scripts/benchmark_reranker_1000docs.sh` 与对应
      `perf_reports/.../report.md`,可复现实测吞吐与延迟数据。
    - **对外/集成入口**:补充 `api/routes/indexer.py`
      相关路由能力,为索引/服务侧集成 reranker 提供接口支撑。
    - **回归测试**:新增批处理工具相关单测,确保 batching 行为稳定、可回归。
    tangwang
     
  • tangwang
     
  • tangwang
     
  • ./scripts/start_tei_service.sh
    START_TEI=0 ./scripts/service_ctl.sh restart embedding
    
    curl -sS -X POST "http://127.0.0.1:6005/embed/text" \
      -H "Content-Type: application/json" \
      -d '["芭比娃娃 儿童玩具", "纯棉T恤 短袖"]'
    tangwang
     

10 Mar, 2026

12 commits

  • 和微服务(embedding/translate/rerank)。
    
    **新增文件**
    -
    压测主脚本:[perf_api_benchmark.py](/data/saas-search/scripts/perf_api_benchmark.py:1)
    -
    自定义用例模板:[perf_cases.json.example](/data/saas-search/scripts/perf_cases.json.example:1)
    
    **文档更新**
    -
    在接口对接文档增加“接口级压测脚本”章节:[搜索API对接指南.md](/data/saas-search/docs/搜索API对接指南.md:2089)
    
    **支持的场景**
    - `backend_search` -> `POST /search/`
    - `backend_suggest` -> `GET /search/suggestions`
    - `embed_text` -> `POST /embed/text`
    - `translate` -> `POST /translate`
    - `rerank` -> `POST /rerank`
    - `all` -> 依次执行上述全部场景
    
    **你可以直接执行的命令**
    1. `./.venv/bin/python scripts/perf_api_benchmark.py --scenario
       backend_suggest --tenant-id 162 --duration 30 --concurrency 50`
    2. `./.venv/bin/python scripts/perf_api_benchmark.py --scenario
       backend_search --tenant-id 162 --duration 30 --concurrency 20`
    3. `./.venv/bin/python scripts/perf_api_benchmark.py --scenario all
       --tenant-id 162 --duration 60 --concurrency 30 --output
    perf_reports/all.json`
    4. `./.venv/bin/python scripts/perf_api_benchmark.py --scenario all
       --tenant-id 162 --cases-file scripts/perf_cases.json.example
    --duration 60 --concurrency 40 --output perf_reports/custom_all.json`
    
    **可选参数**
    - `--backend-base` `--embedding-base` `--translator-base`
      `--reranker-base`:切到你的实际服务地址
    - `--max-requests`:限制总请求数
    - `--max-errors`:错误达到阈值提前停止
    - `--pause`:`all` 模式下场景间暂停
    
    **本地已验证**
    - `backend_suggest` 小规模并发压测成功(200,成功率 100%)
    - `backend_search` 小规模并发压测成功(200,成功率 100%)
    - `translate` 小规模并发压测成功(200,成功率 100%)
    tangwang
     
  • tangwang
     
  • tangwang
     
  • tangwang
     
  • tangwang
     
  • tangwang
     
  • - 配置改为“字段基名 + 动态语言后缀”方案,已不再依赖旧 `indexes`。
    [config.yaml](/data/saas-search/config/config.yaml#L17)
    - `search_fields` / `text_query_strategy` 已进入强校验与解析流程。
    [config_loader.py](/data/saas-search/config/config_loader.py#L254)
    
    2. 查询语言计划与翻译等待策略
    - `QueryParser` 现在产出
      `query_text_by_lang`、`search_langs`、`source_in_index_languages`。
    [query_parser.py](/data/saas-search/query/query_parser.py#L41)
    - 你要求的两种翻译路径都在:
      - 源语言不在店铺 `index_languages`:`translate_multi_async` + 等待
        future
      - 源语言在 `index_languages`:`translate_multi(...,
        async_mode=True)`,尽量走缓存
    [query_parser.py](/data/saas-search/query/query_parser.py#L284)
    
    3. ES 查询统一文本策略(无 AST 分支)
    - 主召回按 `search_langs` 动态拼 `field.{lang}`,翻译语种做次权重
      `should`。
    [es_query_builder.py](/data/saas-search/search/es_query_builder.py#L454)
    - 布尔 AST 路径已删除,仅保留统一文本策略。
    [es_query_builder.py](/data/saas-search/search/es_query_builder.py#L185)
    
    4. LanguageDetector 优化
    - 从“拉丁字母默认英文”升级为:脚本优先 +
      拉丁语系打分(词典/变音/后缀)。
    [language_detector.py](/data/saas-search/query/language_detector.py#L68)
    
    5. 布尔能力清理(补充)
    - 已删除废弃模块:
    [boolean_parser.py](/data/saas-search/search/boolean_parser.py)
    - `search/__init__` 已无相关导出。
    [search/__init__.py](/data/saas-search/search/__init__.py)
    
    6. `indexes` 过时收口(补充)
    - 兼容函数改为基于动态字段生成,不再依赖 `config.indexes`。
    [utils.py](/data/saas-search/config/utils.py#L24)
    - Admin 配置接口改为返回动态字段配置,不再暴露 `num_indexes`。
    [admin.py](/data/saas-search/api/routes/admin.py#L52)
    
    7. suggest
    tangwang
     
  • tangwang
     
  • tangwang
     
  • tangwang
     
  • 1. 新增 `scripts/init_env.sh`
    - 若 `.env` 不存在,从 `.env.example` 复制生成
    - 支持 `--force`:覆盖 `.env` 并备份为 `.env.bak`
    - 首次搭建时统一执行:`./scripts/init_env.sh`
    
     2. 统一加载逻辑 `scripts/lib/load_env.sh`
    - 移除 `activate.sh` 和 `service_ctl.sh` 中的重复解析逻辑
    - 使用共享的 `load_env_file`,并改为 `eval "$(printf 'export %s=%q\n'
      "$key" "$value")"` 安全导出
    - 支持含 ``、`$`、空格等特殊字符的值(需在 `.env` 中用引号包裹)
    
     3. 使用方式
    - **activate.sh**:`source scripts/lib/load_env.sh` 后调用
      `load_env_file`
    - **service_ctl.sh**:同上,去掉内联的 `load_env_file` 实现
    - **create_tenant_index.sh**:改为使用共享 loader,不再用 `set -a;
      source .env`
    
     4. 文档更新
    - **README.md**:在快速开始中加入 `./scripts/init_env.sh`
    - **docs/QUICKSTART.md**:说明 `init_env.sh`
      用法,并强调含特殊字符的密码需加引号
    - **.env.example**:补充注释说明引号规则
    
     5. setup.sh
    - 用 `./scripts/init_env.sh` 替代原先的 `cp .env.example .env`
    
    ---
    
    **推荐流程**:
    ```bash
    ./scripts/create_venv.sh
    ./scripts/init_env.sh     从 .env.example 生成本地 .env
    source activate.sh
    ./run.sh
    ```
    
    **密码写法**:若密码包含 ``、`$`、`&`、空格等,需加引号,例如:
    ```env
    DB_PASSWORD="qY8tgodLoA&KTyQ"
    ES_PASSWORD="4hOaLaf41y2VuI8y"
    ```
    tangwang
     
  • tangwang
     

09 Mar, 2026

6 commits


08 Mar, 2026

1 commit