Blame view

README.md 10.2 KB
19d2d90f   tangwang   卖家精灵数据
1
  # TODO
62b7972c   tangwang   docs
2
  
038e4e2f   tangwang   refactor(i18n): t...
3
4
  **多语言索引**:已改为可配置的 `index_languages`(默认为 `["en", "zh"]`),商家可勾选主市场语言。支持语言见 `config.tenant_config_loader.SUPPORTED_INDEX_LANGUAGES`(含 en, zh, zh_tw, ru, ja, ko, es, fr, pt, de, it, th, vi, id, ms, ar, hi, he, my, ta, ur, bn, pl, nl, ro, tr, km, lo, yue, cs, el, sv, hu, da, fi, uk, bg 等)。
  
62b7972c   tangwang   docs
5
6
7
8
9
10
11
  前端:
  搜索模态框
  点击搜索的时候,弹出 搜索模态框,参考 react、AJAX等技术来实现,搜索模态框的页面宽度和原始页面相同(占满),左侧是suggestions,右侧是即使刷新的搜索结果(每输入一个字母都刷新一次结果)。
  但是要注意:搜索过程中,后端不要触发翻译(因为输入过程中的query翻译结果会有问题),因此需要增加一个参数:搜索类型,默认为当前的回车后发起的搜索,如果是输入过程中的结果刷新则类型为typing。
  
  
  
19d2d90f   tangwang   卖家精灵数据
12
13
  多语言:
  语义:
472cca0c   tangwang   doc
14
15
16
17
18
  多语言:
  1. dis_max的方式
  "query" : {
    "dis_max" : {
      "queries" : [
d7d48f52   tangwang   改动(mapping + 灌入结构)
19
20
        {"match" : { "title.en" : xxx }},
        {"match" : { "title.zh" : xxx }},
472cca0c   tangwang   doc
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
        {"match" : { "title_xx" : xxx }}    
      ],
      "tie_breakler" : 0.8
    }
  }
  
  
  
  "corss_field":
  "multi_match" : {
    "query" : 
    "fields" : [...],
    "type": "cross_fields",
    "operator" : "and"
  }
  
  
  支持英文的拼写接错:
  title: multi_field
  "query" : {
    "query_string" : {
      "query": "xxx",
      "default_field": "title.ngram",
      "minimum_should_match": "85%"
    }
  }
  
  
  
  业务提权:
  rescore: window_size query_weight rescore_query_weight
  
  function_score:
  boost
  以及 可以把每个子查询用function_score包一下
  
  
19d2d90f   tangwang   卖家精灵数据
58
  
9c712e64   tangwang   增加索引字段qanchors ke...
59
  
7bfb9946   tangwang   向量化模块
60
  query anchor  
9c712e64   tangwang   增加索引字段qanchors ke...
61
62
63
64
65
66
67
68
69
  我想给elasticsearch 增加字段 query anchor ,即哪些query点击到了这个doc,一个doc下面有多个query anchor,每个query anchor又有这两个属性:weight、dweight,分别代表 query在doc下的点击分布权重、doc在query下的点击分布权重。请问该如何设计这两个ES字段。
  
  需要有zh en两套query anchor,因为他们的解析器不一样。
  
  他的功能是辅助召回和排序。我搜索一个query,那么每个query跟 doc中的query anchor的相关性,也就是,除了将query到title 和keywords / brief等文本字段中搜索,也到 query anchor中搜索,从而辅助召回和相关性的计算。
  
  
  
  
768ad710   tangwang   MySQL到ES字段映射说明-业务...
70
71
72
  
  对外:
  embedding服务:
484adbfe   tangwang   adapt ubuntu; con...
73
    curl -X POST http://43.166.252.75:6005/embed/text \
768ad710   tangwang   MySQL到ES字段映射说明-业务...
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
      -H "Content-Type: application/json" \
      -d '["衣服", "Bohemian Maxi Dress"]'
  
  
  翻译服务:
  # 方式1:直接运行
  python api/translator_app.py
  # 方式2:使用 uvicorn
  uvicorn api.translator_app:app --host 0.0.0.0 --port 6006 --reload
  
  curl -X POST http://localhost:6006/translate      -H "Content-Type: application/json"      -d '{
         "text": "商品名称",
         "target_lang": "en",
         "source_lang": "zh"
       }'
  
  localhost替换为
  服务器内网地址:
  10.0.163.168
  公网地址:
484adbfe   tangwang   adapt ubuntu; con...
94
  43.166.252.75
768ad710   tangwang   MySQL到ES字段映射说明-业务...
95
96
  
  
670c701f   tangwang   文档完善
97
  # 电商搜索引擎 SaaS
be52af70   tangwang   first commit
98
  
670c701f   tangwang   文档完善
99
  一个针对跨境独立站(店匠 Shoplazza 等)的多租户可配置搜索平台。README 作为项目导航入口,帮助你在不同阶段定位到更详细的文档。
be52af70   tangwang   first commit
100
  
a10a89a3   tangwang   构造测试数据用于测试分类 和 三种...
101
  
acf1349c   tangwang   fake 批量导入数据的脚步 ( ...
102
  ## 项目环境
a7920e17   tangwang   项目名称和部署路径修改
103
  
484adbfe   tangwang   adapt ubuntu; con...
104
  以项目根目录的 **`activate.sh`** 为准(**优先激活 venv:`./.venv`,并加载 `.env`;兼容 Conda 回退**):
a7920e17   tangwang   项目名称和部署路径修改
105
106
  
  ```bash
484adbfe   tangwang   adapt ubuntu; con...
107
108
109
110
111
  # 推荐:首次创建 venv(默认安装基础依赖)
  ./scripts/create_venv.sh
  
  # 如需本地向量/图片编码(会安装 torch/transformers 等重依赖)
  # INSTALL_ML=1 ./scripts/create_venv.sh
a7920e17   tangwang   项目名称和部署路径修改
112
113
114
  source activate.sh
  ```
  
484adbfe   tangwang   adapt ubuntu; con...
115
  新机器首次需创建环境,见 `docs/环境配置说明.md`(推荐 venv;Conda 为兼容旧流程)。
acf1349c   tangwang   fake 批量导入数据的脚步 ( ...
116
  
a10a89a3   tangwang   构造测试数据用于测试分类 和 三种...
117
118
  ## 测试pipeline
  
148ab60d   tangwang   docs
119
120
121
  1. 
  店铺1  tenant_id=162:
  fake数据 生成商品导入数据 提交到店匠的店铺:
a7920e17   tangwang   项目名称和部署路径修改
122
  cd /data/saas-search && source activate.sh && python scripts/csv_to_excel_multi_variant.py --output with_colors.xlsx
a10a89a3   tangwang   构造测试数据用于测试分类 和 三种...
123
  
148ab60d   tangwang   docs
124
125
126
  店铺2  tenant_id= 
  
  
f3c11fef   tangwang   亚马逊格式数据 导入店匠
127
128
129
  2. 后端:自动同步到mysql
  
  3. mysql到ES:
a10a89a3   tangwang   构造测试数据用于测试分类 和 三种...
130
131
132
133
134
135
136
137
138
139
  
  python scripts/recreate_and_import.py \
      --tenant-id 162 \
      --db-host <mysql_host> \
      --db-database saas \
      --db-username saas \
      --db-password <password> \
      --es-host http://localhost:9200
  
  构造查询:
33839b37   tangwang   属性值参与搜索:
140
  参考 @常用查询 - ES.md
a10a89a3   tangwang   构造测试数据用于测试分类 和 三种...
141
142
  
  
670c701f   tangwang   文档完善
143
  ## 核心能力速览
be52af70   tangwang   first commit
144
  
670c701f   tangwang   文档完善
145
146
147
148
149
150
  - **多语言 + 自动翻译**:中文、英文、俄文等语言检测与路由(BGE-M3、DeepL)
  - **语义 + 关键词混排**:BM25、dense vector(BGE-M3/CN-CLIP)融合
  - **布尔与分面**:AND / OR / ANDNOT / RANK、Terms & Range facets
  - **多租户隔离**:共享 `search_products` 索引,通过 `tenant_id` 严格隔离
  - **可配置化**:字段/索引域/排序表达式/查询改写全部配置驱动
  - **脚本化流水线**:Mock/CSV 数据 → MySQL → Elasticsearch → API/前端
be52af70   tangwang   first commit
151
  
670c701f   tangwang   文档完善
152
  ## 快速上手(概览)
be52af70   tangwang   first commit
153
  
670c701f   tangwang   文档完善
154
155
  | 步骤 | 去哪里看 | 摘要 |
  |------|---------|------|
a7920e17   tangwang   项目名称和部署路径修改
156
  | 1. 准备环境 | `docs/环境配置说明.md` / `Usage-Guide.md` | Conda、`activate.sh`、依赖、ES/MySQL、`.env` |
d1d356f8   tangwang   脚本优化
157
  | 2. 构造测试数据 | `测试数据指南.md` | Tenant1 Mock、Tenant2 CSV、`mock_data.sh` |
4a677843   tangwang   文档完善
158
159
160
161
  | 3. 启动与验证 | `Usage-Guide.md` | `run.sh` 一键启动、分步脚本、日志与健康检查 |
  | 4. 理解架构 | `系统设计文档.md` | 数据流、配置系统、查询/搜索/索引模块 |
  | 5. 接入搜索 API | `搜索API对接指南.md` / `搜索API速查表.md` | REST 端点、参数、响应、最佳实践 |
  | 6. 查字段定义 | `索引字段说明.md` | `search_products` 映射、字段来源、类型与用途 |
a5a3856d   tangwang   店匠体系数据的搜索:mock da...
162
  
670c701f   tangwang   文档完善
163
  > README 仅保留最常用命令的“索引”。细节以主题文档为准。
a5a3856d   tangwang   店匠体系数据的搜索:mock da...
164
  
670c701f   tangwang   文档完善
165
  ### Runtimes & 命令示例
be52af70   tangwang   first commit
166
167
  
  ```bash
a7920e17   tangwang   项目名称和部署路径修改
168
169
170
  # 1. 安装依赖与准备服务(环境创建见 docs/环境配置说明.md)
  source activate.sh   # 或先 export CONDA_ROOT=你的conda路径
  pip install -r requirements.txt   # 若用 environment.yml 创建环境可省略
670c701f   tangwang   文档完善
171
  docker run -d --name es -p 9200:9200 elasticsearch:8.11.0
a5a3856d   tangwang   店匠体系数据的搜索:mock da...
172
  
670c701f   tangwang   文档完善
173
174
  # 2. 构造测试数据并导入 MySQL
  ./scripts/mock_data.sh                               # 详见 TEST_DATA_GUIDE.md
be52af70   tangwang   first commit
175
  
d1d356f8   tangwang   脚本优化
176
177
178
179
180
  # 3. 创建租户索引结构并导入数据(推荐)
  ./scripts/create_tenant_index.sh 162
  curl -X POST "http://localhost:6004/indexer/reindex" \
    -H "Content-Type: application/json" \
    -d '{"tenant_id":"162","batch_size":500}'
a5a3856d   tangwang   店匠体系数据的搜索:mock da...
181
  
d1d356f8   tangwang   脚本优化
182
  # 4. 启动核心服务(backend/indexer/frontend)
670c701f   tangwang   文档完善
183
  ./run.sh
be52af70   tangwang   first commit
184
  
d1d356f8   tangwang   脚本优化
185
186
  # (可选)附加启动 embedding / translator / reranker
  START_EMBEDDING=1 START_TRANSLATOR=1 START_RERANKER=1 ./run.sh
7bfb9946   tangwang   向量化模块
187
  #
d1d356f8   tangwang   脚本优化
188
189
190
  # 查看服务状态 / 停止
  ./scripts/service_ctl.sh status
  ./scripts/stop.sh
7bfb9946   tangwang   向量化模块
191
  
670c701f   tangwang   文档完善
192
  # 5. 调用文本搜索 API
a5a3856d   tangwang   店匠体系数据的搜索:mock da...
193
  curl -X POST http://localhost:6002/search/ \
be52af70   tangwang   first commit
194
    -H "Content-Type: application/json" \
670c701f   tangwang   文档完善
195
196
    -H "X-Tenant-ID: 1" \
    -d '{"query": "玩具", "size": 10}'
a5a3856d   tangwang   店匠体系数据的搜索:mock da...
197
198
  ```
  
670c701f   tangwang   文档完善
199
  ## 文档地图
a5a3856d   tangwang   店匠体系数据的搜索:mock da...
200
  
670c701f   tangwang   文档完善
201
202
  | 文档 | 内容提要 | 适用场景 |
  |------|----------|----------|
a7920e17   tangwang   项目名称和部署路径修改
203
  | `docs/环境配置说明.md` | 系统要求、`activate.sh`、Conda/依赖、外部服务、CONDA_ROOT | 首次部署、新机器环境 |
d1d356f8   tangwang   脚本优化
204
  | `docs/SERVICE_MATRIX.md` | 服务分层、端口、统一启动/停止入口 | 运维值守、联调启动 |
4a677843   tangwang   文档完善
205
  | `Usage-Guide.md` | 环境准备、服务启动、配置、日志、验证手册 | 日常运维、调试 |
f7d3cf70   tangwang   更新文档
206
  | `基础配置指南.md` | 统一硬编码配置说明、索引结构、查询配置 | 了解系统配置、修改配置 |
4a677843   tangwang   文档完善
207
208
209
  | `测试数据指南.md` | 两个租户的模拟/CSV 数据构造 & MySQL→ES 流程 | 数据准备、联调 |
  | `测试Pipeline说明.md` | 测试流水线、CI 脚本、上下文说明 | 自动化测试、追踪流水线 |
  | `系统设计文档.md` | 架构、配置系统、索引/查询/排序模块细节 | 研发/扩展功能 |
f7d3cf70   tangwang   更新文档
210
  | `索引字段说明v2.md` | `search_products` 字段、类型、来源、嵌套结构 | 新增字段、数据对齐 |
4a677843   tangwang   文档完善
211
212
213
214
  | `搜索API对接指南.md` | REST API(文本/图片/管理)详解、示例、响应格式 | API 使用、测试 |
  | `搜索API速查表.md` | 常用请求体、过滤器、分面速查表 | 支持团队快速查阅 |
  | `Search-API-Examples.md` | Python/JS/cURL 端到端示例 | 客户工程、SDK 参考 |
  | `环境配置说明.md` + `.env` 模板 | 运行依赖账号、端口、密钥对照表 | 交付 & 运维 |
a5a3856d   tangwang   店匠体系数据的搜索:mock da...
215
  
670c701f   tangwang   文档完善
216
  更多补充材料:
a5a3856d   tangwang   店匠体系数据的搜索:mock da...
217
  
4a677843   tangwang   文档完善
218
  - `测试数据指南.md`:包含完整工作流脚本示例
670c701f   tangwang   文档完善
219
220
  - `商品数据源入ES配置规范.md`:数据源映射约定
  - `MULTILANG_FEATURE.md`:多语言处理细节
a5a3856d   tangwang   店匠体系数据的搜索:mock da...
221
  
670c701f   tangwang   文档完善
222
  ## 关键工作流指引
a5a3856d   tangwang   店匠体系数据的搜索:mock da...
223
  
670c701f   tangwang   文档完善
224
225
  - **数据构建 → MySQL → Elasticsearch**  
    - `scripts/mock_data.sh`:Tenant1 Mock + Tenant2 CSV 一条龙  
d1d356f8   tangwang   脚本优化
226
    - `scripts/create_tenant_index.sh <tenant_id>` + `POST /indexer/reindex`:推荐导入链路
4a677843   tangwang   文档完善
227
    - 详解:`测试数据指南.md`
a5a3856d   tangwang   店匠体系数据的搜索:mock da...
228
  
89638140   tangwang   重构 indexer 文档构建接口...
229
230
231
232
233
234
235
236
237
238
239
  - **索引富化 & Java 对接**  
    - Java 索引程序负责:全量/增量调度 + 从 MySQL 查询 `shoplazza_product_spu/sku/option/...`  
    - Python `indexer` 模块负责:**MySQL 行 → ES doc** 的全部逻辑(多语言、翻译、向量、规格聚合等)  
    - 正式对接接口(推荐):  
      - `POST http://<indexer_host>:6004/indexer/build-docs`  
        - 入参:`tenant_id + items[{spu, skus, options}]`  
        - 出参:与 `mappings/search_products.json` 完全一致的 `docs` 列表,上游自行写入 ES  
    - 调试/自测接口(内部使用):  
      - `POST http://127.0.0.1:6004/indexer/build-docs-from-db`,只需要 `tenant_id + spu_ids`,由服务内部查库并返回 ES doc  
    - 详解:`indexer/README.md`、`docs/索引字段说明v2.md`
  
670c701f   tangwang   文档完善
240
241
  - **搜索服务 & API**  
    - `api/`(FastAPI)承载 REST API,`search/` + `query/` 负责查询解析与下发  
4a677843   tangwang   文档完善
242
243
    - API、分页、过滤、Facet、KNN 等:`搜索API对接指南.md`
    - 对接案例、示例与错误码:`搜索API对接指南.md`、`Search-API-Examples.md`
be52af70   tangwang   first commit
244
  
f7d3cf70   tangwang   更新文档
245
246
247
248
249
  - **统一配置**  
    - 所有租户共享统一的索引结构和查询配置(硬编码)  
    - 索引 mapping: `mappings/search_products.json`  
    - 查询配置: `search/query_config.py`  
    - 详解:`基础配置指南.md`、`索引字段说明v2.md`
a5a3856d   tangwang   店匠体系数据的搜索:mock da...
250
  
670c701f   tangwang   文档完善
251
  ## 仓库结构(概览)
be52af70   tangwang   first commit
252
  
be52af70   tangwang   first commit
253
  ```
670c701f   tangwang   文档完善
254
255
256
257
258
259
260
261
  api/            FastAPI 服务与路由
  config/         字段/索引/查询配置体系
  indexer/        MySQL → ES 管道(mapping / transformer / bulk)
  query/          查询解析、改写、翻译、embedding
  search/         多语言构建、布尔解析、排序引擎
  scripts/        数据/服务脚本(mock_data, ingest, run 等)
  frontend/       简易调试页面
  docs/           运营及中文资料
be52af70   tangwang   first commit
262
  ```