18 Dec, 2025

3 commits

  • 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
     

08 Dec, 2025

1 commit


07 Dec, 2025

2 commits

  • 主要功能:
    1. 增量数据获取服务
       - 新增 IncrementalIndexerService 提供单个SPU数据获取
       - 新增 /indexer/spu/{spu_id} API接口
       - 服务启动时预加载分类映射等公共数据
       - 提取 SPUDocumentTransformer 统一全量和增量转换逻辑
       - 支持根据租户配置进行语言处理和翻译
    
    3. 租户配置系统
       - 租户配置合并到统一配置文件 config/config.yaml
       - 支持每个租户独立配置主语言和翻译选项
       - 租户162配置为翻译关闭(用于测试)
    
    4. 翻译功能集成
       - 翻译提示词作为DeepL API的context参数传递
       - 支持中英文提示词配置
       - 索引场景:同步翻译,使用缓存
       - 查询场景:异步翻译,立即返回
    
    测试:
    - 新增 indexer/test_indexing.py 和 query/test_translation.py
    - 验证租户162翻译关闭功能
    - 验证全量和增量索引功能
    tangwang
     
  • 添加 ThreadPoolExecutor 线程池用于异步翻译
    修改 translate_multi() 方法,支持 async_mode 参数(默认 True)
    添加 _get_cached_translation() 方法,快速获取缓存
    添加 _translate_async() 方法,异步执行翻译任务
    2. 异步翻译逻辑
    命中缓存:立即返回缓存结果
    未命中缓存:
    异步启动翻译任务(不阻塞)
    返回 None(本次查询不使用)
    翻译完成后自动存入缓存
    下次查询时可直接使用缓存结果
    3. QueryParser 更新
    调用 translate_multi() 时使用 async_mode=True
    过滤掉 None 值(未完成的翻译)
    优化日志输出,区分缓存命中和异步翻译
    工作流程
    首次查询:未命中缓存 → 异步翻译 → 返回空翻译 → 不阻塞
    翻译完成:结果存入缓存
    后续查询:命中缓存 → 立即返回 → 快速响应
    tangwang
     

05 Dec, 2025

1 commit

  • 将 must 子句改为 should 子句的多查询策略
    实现以下查询类型:
    base_query:主查询,使用 AND 操作符和 75% minimum_should_match
    翻译查询:跨语言查询,boost=0.4
    短语查询:短查询的精确短语匹配
    关键词查询:基于提取名词的查询,boost=0.1
    添加 _get_match_fields() 方法,支持中英文字段动态映射
    4. 关键改进点
    minimum_should_match 从 67% 提升到 75%
    添加 operator: "AND" 确保所有词都匹配
    使用 should 子句实现多策略融合
    支持短语查询和关键词查询的智能触发
    tangwang
     

02 Dec, 2025

1 commit


26 Nov, 2025

1 commit


14 Nov, 2025

1 commit


13 Nov, 2025

2 commits


12 Nov, 2025

1 commit


11 Nov, 2025

1 commit

  • ## 🎯 Major Features
    - Request context management system for complete request visibility
    - Structured JSON logging with automatic daily rotation
    - Performance monitoring with detailed stage timing breakdowns
    - Query analysis result storage and intermediate result tracking
    - Error and warning collection with context correlation
    
    ## 🔧 Technical Improvements
    - **Context Management**: Request-level context with reqid/uid correlation
    - **Performance Monitoring**: Automatic timing for all search pipeline stages
    - **Structured Logging**: JSON format logs with request context injection
    - **Query Enhancement**: Complete query analysis tracking and storage
    - **Error Handling**: Enhanced error tracking with context information
    
    ## 🐛 Bug Fixes
    - Fixed DeepL API endpoint (paid vs free API confusion)
    - Fixed vector generation (GPU memory cleanup)
    - Fixed logger parameter passing format (reqid/uid handling)
    - Fixed translation and embedding functionality
    
    ## 🌟 API Improvements
    - Simplified API interface (8→5 parameters, 37.5% reduction)
    - Made internal functionality transparent to users
    - Added performance info to API responses
    - Enhanced request correlation and tracking
    
    ## 📁 New Infrastructure
    - Comprehensive test suite (unit, integration, API tests)
    - CI/CD pipeline with automated quality checks
    - Performance monitoring and testing tools
    - Documentation and example usage guides
    
    ## 🔒 Security & Reliability
    - Thread-safe context management for concurrent requests
    - Automatic log rotation and structured output
    - Error isolation with detailed context information
    - Complete request lifecycle tracking
    
    🤖 Generated with Claude Code
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    tangwang
     

08 Nov, 2025

3 commits