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)
    tangwang
     
  • tangwang
     

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]
    tangwang
     
  • 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 保持向后兼容)
    根据这两个参数决定翻译目标
    更新了文档注释
    tangwang
     
  • tangwang
     
  • tangwang
     
  • 新增 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/*
    tangwang
     
  • 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行)
    tangwang
     
  • 索引的两项功能:
    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
    tangwang
     
  • 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:修正变体标题为主商品标题
    tangwang
     
  • tangwang
     

17 Dec, 2025

9 commits


16 Dec, 2025

6 commits


09 Dec, 2025

6 commits


08 Dec, 2025

8 commits