19 Dec, 2025
2 commits
-
1. 删除 IndexingPipeline 类 文件:indexer/bulk_indexer.py 删除:IndexingPipeline 类(第201-259行) 删除:不再需要的 load_mapping 导入 2. 删除 main.py 中的旧代码 删除:cmd_ingest() 函数(整个函数) 删除:ingest 子命令定义 删除:main() 中对 ingest 命令的处理 删除:不再需要的 pandas 导入 更新:文档字符串,移除 ingest 命令说明 3. 删除旧的数据导入脚本 删除:data/customer1/ingest_customer1.py(依赖已废弃的 DataTransformer 和 IndexingPipeline)
18 Dec, 2025
9 commits
-
新增:scripts/recreate_index.py 功能:初始化 indexer 的 ES/DB 服务,然后调用 BulkIndexingService.bulk_index(…, recreate_index=True) 为指定 tenant_id 做「删除并重建索引 + 全量导入」。 用法示例: cd /home/tw/SearchEngine# 使用默认 batch_size=500python scripts/recreate_index.py 162# 指定 batch_sizepython scripts/recreate_index.py 162 --batch-size 1000 脚本依赖和 Indexer API 一样的环境变量:DB_HOST/DB_PORT/DB_DATABASE/DB_USERNAME/DB_PASSWORD、ES_HOST/ES_USERNAME/ES_PASSWORD。 2. 清理与引用更新 原来的 scripts/recreate_index.sh 已经删除。 api/routes/indexer.py 里的说明改成引用 scripts/recreate_index.py。 docs/搜索API对接指南.md 中的提示也从 .sh 改为: > python scripts/recreate_index.py <tenant_id> [--batch-size 500]
-
config/config_loader.py: 从 QueryConfig 类中删除 enable_translation 字段 config/config.yaml: 删除 enable_translation: true 配置项 config/config_loader.py: 从 to_dict() 方法中删除相关输出 2. 索引阶段(离线)- 使用租户配置 indexer/indexing_utils.py: 根据 tenant_config.translate_to_en 和 translate_to_zh 决定是否初始化 translator 只有任一方向开启时才创建 translator indexer/document_transformer.py: _fill_text_fields 从 tenant_config 读取 translate_to_en 和 translate_to_zh 调用 translate_for_indexing 时传递这两个参数 更新了文档注释 3. 查询阶段(在线)- 使用租户配置 query/query_parser.py: parse() 方法新增 tenant_id 参数 根据租户配置决定翻译目标语言(translate_to_zh / translate_to_en) 如果两个都是 false,跳过翻译阶段 translator 属性不再依赖 enable_translation,总是可以初始化 search/searcher.py: search() 方法中根据租户配置计算 enable_translation(用于日志和 metadata) 调用 query_parser.parse() 时传递 tenant_id 4. 翻译器方法更新 query/translator.py: translate_for_indexing() 新增 translate_to_en 和 translate_to_zh 参数(默认 True 保持向后兼容) 根据这两个参数决定翻译目标 更新了文档注释
-
新增 api/indexer_app.py,在独立进程(默认 6004)中初始化 ES + DB + 索引服务,并复用 api/routes/indexer.py 一套路由 新增 api/service_registry.py,通过注册表向索引路由注入 ES 客户端和索引服务,消除重复代码与循环依赖 main.py 增加 serve-indexer 子命令;scripts/start.sh / stop.sh / start_backend.sh / start_indexer.sh 支持独立管理索引进程 文档中所有索引相关示例由 6002/indexer/* 统一调整为 6004/indexer/*
-
2. translate_multi 还需要提供一种调用方法,异步的,但是 可以等待结果的。 3. 如果detected_lang不是en也不是zh,这时候, 我们调用translate_multi 是需要等待结果返回的(因为是zh 或者 en 都有一个索引字段可以查,因此 本次可以不用结果,直接去走搜索,但是如果两者都不是,只能等待翻译结果。) 4. parse函数 这里可能发起一个异步的调用,下面的encode也要做成异步的,这样 encode和翻译两个异步任务的时间可以重叠,需要等待所有结果都返回。 更改 1. 去除 get_translation_needs 函数,逻辑内联到 parse 函数 在 parse 函数中(第230-234行)直接实现了 get_translation_needs 的逻辑 2. 添加 translate_multi_async 方法,支持异步等待结果 在 translator.py 中添加了 translate_multi_async 方法(第412-459行) 该方法返回字典,值为翻译字符串(缓存命中)或 Future 对象(需要等待) 3. 根据 detected_lang 决定是否需要等待翻译结果 如果 detected_lang 不是 'en' 也不是 'zh',使用 translate_multi_async 并等待结果(第245-261行) 如果是 'en' 或 'zh',使用 translate_multi 的异步模式,不等待结果(第262-273行) 4. 将 encode 和翻译改为异步并行执行 encode 使用 ThreadPoolExecutor 异步执行(第315-330行) 翻译和编码任务并行执行,使用 as_completed 等待所有结果(第332-375行)
-
索引的两项功能: 1. 多语言。 店铺配置的语言如果不等于zh,那么要调用翻译 获得中文翻译结果,同时 如果不等于en,要翻译en的结果。 要缓存到redis。 先查询缓存,没命中缓存再调用翻译,然后存入redis缓存起来。 这些逻辑应该是 @query/translator.py 内部的,不需要调用的地方关心。但是现在是 DictCache,直接改掉,改为redis的缓存 2. 填充 标题的向量化字段。如果该店铺的标题向量化打开,那么应该请求向量化模型根据英文的title得到embedding。使用 BgeEncoder. 以上两个模块的缓存,过期时间都是 最近多长时间内没有访问过。 feat: 1. 更新 REDIS_CONFIG 配置 在 config/env_config.py 中添加了用户提供的配置项(snapshot_db, translation_cache_expire_days, translation_cache_prefix 等) 2. 修改 query/translator.py 将 DictCache 改为 Redis 缓存 实现了 translate_for_indexing 方法,自动处理多语言翻译: 如果店铺语言不等于 zh,自动翻译成 zh 如果店铺语言不等于 en,自动翻译成 en 翻译逻辑封装在 translator.py 内部,调用方无需关心 3. 修改 embeddings/text_encoder.py 在 BgeEncoder 中添加了 Redis 缓存 实现了滑动过期策略(每次访问时重置过期时间) 缓存逻辑参考了提供的 CacheManager 对象 4. 修改 indexer/document_transformer.py 添加了 encoder 和 enable_title_embedding 参数 实现了 _fill_title_embedding 方法,使用英文标题(title_en)生成 embedding 更新了 _fill_text_fields 方法,使用新的 translate_for_indexing 方法 5. 更新 indexer/indexing_utils.py 更新了 create_document_transformer 函数,支持新的 encoder 和 enable_title_embedding 参数 如果启用标题向量化且未提供 encoder,会自动初始化 BgeEncoder
-
1. 添加了两个开关参数 --keep-spu-if-parent-missing:保留父ASIN不在变体列表中的SPU(默认:丢弃整个SPU) --fix-sku-if-title-mismatch:修正标题不一致的SKU而不是丢弃(默认:丢弃标题不一致的SKU) 2. 实现了相关逻辑 父ASIN缺失处理: 默认:当父ASIN不在变体列表中时,打印警告并丢弃整个SPU 使用 --keep-spu-if-parent-missing:保留SPU,使用第一个变体作为主商品 标题不一致处理: 默认:当变体标题与主商品不一致时,打印日志并丢弃该SKU 使用 --fix-sku-if-title-mismatch:修正变体标题为主商品标题
17 Dec, 2025
9 commits
-
2. 如果变体的标题跟主商品不一致,请打印一条错误日志,并且忽略这一条数据
-
1. 跟主商品标题不一致 2. 商品图片信息缺失 3. Options是无效的
16 Dec, 2025
6 commits
09 Dec, 2025
6 commits
-
因为请求改成了两个list, 响应也是对应的两个list,一个是spu_ids对应的响应的list,每个id对应的有处理结果 indexed、deleted、failed,如果是failed会带msg。 delete_spu_ids也是对应一个list,对应的结果又deleted / failed。 2. API文档对应修改
-
tenant_id spu_ids delete_spu_ids spu_ids里面的,如果is_delete字段为1,我这边也要做删除。 delete_spu_ids的 直接删除 为您的变更输入提交说明。以 '#' 开始的行将被忽略,而一个空的提交
08 Dec, 2025
8 commits
-
新增功能: - 新增 POST /indexer/index 增量索引接口,支持按SPU ID列表进行增量索引 - 新增 indexer/indexer_logger.py 索引日志模块,统一记录全量和增量索引日志到 logs/indexer.log(JSON格式) - IncrementalIndexerService 新增 index_spus_to_es 方法,实现增量索引功能 接口重命名: - POST /indexer/bulk -> POST /indexer/reindex(全量重建索引) - POST /indexer/incremental -> POST /indexer/index(增量索引) - POST /indexer/spus -> POST /indexer/documents(查询文档) 日志系统: - 全量和增量索引操作统一记录到 logs/indexer.log - 记录请求参数、处理过程、ES写入结果、成功/失败统计等关键信息 - 支持按索引类型、租户ID、SPU ID等维度查询日志 文档更新: - 更新接口文档,包含新的接口命名和增量索引接口说明 - 添加日志查询示例(grep和jq两种方式)
-
- 新增批量索引接口: POST /indexer/bulk - 全量索引功能 - SPU接口改进: POST /indexer/spus - 支持批量获取SPU文档(最多100个) 新增 全量索引服务 indexer/bulk_indexing_service.py docs/搜索API对接指南.md - 新增索引接口文档: 详细的批量索引和SPU索引接口说明 - 请求示例: 提供完整的curl命令示例