17 Dec, 2025

6 commits


16 Dec, 2025

6 commits


09 Dec, 2025

6 commits


08 Dec, 2025

8 commits


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

4 commits


04 Dec, 2025

3 commits

  • tangwang
     
  • 核心功能:
    - 添加 multi_select 字段到 FacetConfig(默认为 true)
    - 实现 post_filter 支持 disjunctive faceting
    - 后端自动标记 facet 值的 selected 状态
    - 支持 specifications 和普通字段的 multi-select
    
    技术改进:
    - ESQueryBuilder: 分离 conjunctive/disjunctive filters
    - ResultFormatter: 根据 current_filters 标记 selected
    - Searcher: 传递 facet_configs 给 query builder
    
    文档更新:
    - 添加 multi_select_faceting.md 详细文档
    - 更新 API 对接指南,说明新功能
    - 添加测试脚本 test_multi_select_facet.py
    
    业界标准:
    - 遵循 Elasticsearch/Algolia/Amazon 的最佳实践
    - 提供探索式搜索体验
    - 前后端职责清晰分离
    tangwang
     
  • tangwang
     

03 Dec, 2025

3 commits

  • {
      "facets": [
        {
          "field": "category1_name",
          "size": 15,
          "type": "terms"
        },
        "specifications.color",
        "specifications.size"
      ]
    }
    
    {
      "facets": [
        {"field": "category1_name", "size": 15, "type": "terms"},
        {"field": "specifications.color", "size": 10, "type": "terms"},
        {"field": "specifications.size", "size": 10, "type": "terms"}
      ]
    }
    
    之前是上面的接口形式,主要是考虑 属性的分面, 因为 款式都是有限的 不需要设定 "size": 10, "type": "terms" 这些参数。
    
    但是从接口设计层面,最好按下面这样,这样的话 specifications.color 和 category1_name 的组装格式 完全一样。前端不需要感知 属性分面 和 类别等其他字段分面的差异。
    tangwang
     
  • tangwang
     
  • 2. mysql->ES数据灌入脚本优化。修改了多个字段的处理方式,完善日志,为以后抽出来服务供java全量增量调用做准备
    tangwang
     

02 Dec, 2025

2 commits

  • tangwang
     
  • 1. 加了一个配置searchable_option_dimensions,功能是配置子sku的option1_value option2_value option3_value 哪些参与检索(进索引、以及在线搜索的时候将对应字段纳入搜索field)。格式为list,选择三者中的一个或多个。
    
    2. 索引 @mappings/search_products.json 要加3个字段 option1_values option2_values option3_values,各自的 数据灌入(mysql->ES)的模块也要修改,这个字段是对子sku的option1_value option2_value option3_value分别提取去抽后得到的list。
    searchable_option_dimensions 中配置的,才进索引,比如 searchable_option_dimensions = ['option1'] 则 只对option1提取属性值去重组织list进入索引,其余两个字段为空
    
    3. 在线 对应的将 searchable_option_dimensions 中 对应的索引字段纳入 multi_match 的 fields,权重设为0.5 (各个字段的权重配置放到一起集中管理)
    
    1. 配置文件改动 (config/config.yaml)
    ✅ 在 spu_config 中添加了 searchable_option_dimensions 配置项,默认值为 ['option1', 'option2', 'option3']
    ✅ 添加了3个新字段定义:option1_values, option2_values, option3_values,类型为 KEYWORD,权重为 0.5
    ✅ 在 default 索引域的 fields 列表中添加了这3个字段,使其参与搜索
    2. ES索引Mapping改动 (mappings/search_products.json)
    ✅ 添加了3个新字段:option1_values, option2_values, option3_values,类型为 keyword
    3. 配置加载器改动 (config/config_loader.py)
    ✅ 在 SPUConfig 类中添加了 searchable_option_dimensions 字段
    ✅ 更新了配置解析逻辑,支持读取 searchable_option_dimensions
    ✅ 更新了配置转换为字典的逻辑
    4. 数据灌入改动 (indexer/spu_transformer.py)
    ✅ 在初始化时加载配置,获取 searchable_option_dimensions
    ✅ 在 _transform_spu_to_doc 方法中添加逻辑:
    从所有子SKU中提取 option1, option2, option3 值
    去重后存入 option1_values, option2_values, option3_values
    根据配置决定哪些字段实际写入数据(未配置的字段写空数组)
    
    =
    tangwang