13 Nov, 2025

11 commits


12 Nov, 2025

8 commits

  • tangwang
     
  • tangwang
     
  • tangwang
     
  • 核心改动:
    1. 配置化打分规则
       - 新增FunctionScoreConfig和RerankConfig配置类
       - 支持filter_weight、field_value_factor、decay三种ES原生function
       - 从代码中移除硬编码的打分逻辑
    
    2. 配置模型定义
       - FunctionScoreConfig: score_mode, boost_mode, functions
       - RerankConfig: enabled, expression(当前禁用)
       - 添加到CustomerConfig中
    
    3. 查询构建器改造
       - MultiLanguageQueryBuilder.init添加function_score_config引用
       - _build_score_functions从配置动态构建ES functions
       - 支持配置的score_mode和boost_mode
    
    4. 配置文件示例
       - 添加完整的function_score配置示例
       - 包含3种function类型的详细注释
       - 提供常见场景的配置模板
    
    5. ES原生能力支持
       - Filter+Weight: 条件匹配提权
       - Field Value Factor: 字段值映射打分
         * modifier支持: none, log, log1p, log2p, ln, ln1p, ln2p, square, sqrt, reciprocal
       - Decay Functions: 衰减函数
         * 支持: gauss, exp, linear
    
    配置示例:
    - 7天新品提权(weight: 1.3)
    - 30天新品提权(weight: 1.15)
    - 有视频提权(weight: 1.05)
    - 销量因子(field_value_factor + log1p)
    - 时间衰减(gauss decay)
    
    优势:
    ✓ 配置化 - 客户自己调整,无需改代码
    ✓ 基于ES原生 - 性能最优,功能完整
    ✓ 灵活易用 - YAML格式,有示例和注释
    ✓ 统一约定 - function_score必需,简化设计
    
    参考:https://www.elastic.co/docs/reference/query-languages/query-dsl/query-dsl-function-score-query
    tangwang
     
  • 核心改动:
    1. 修复facets类型问题
       - 统一使用Pydantic模型(FacetResult, FacetValue)
       - SearchResult.facets改为List[FacetResult]
       - _standardize_facets直接构建Pydantic对象
    
    2. 修复RangeFilter支持日期时间
       - RangeFilter字段改为Union[float, str]
       - 支持数值范围和ISO日期时间字符串
       - 修复前端listing time筛选422错误
    
    3. 重构ES查询结构(核心)
       - 使用function_score包裹整个查询
       - 文本和KNN放入内层bool.should(minimum_should_match=1)
       - Filter在外层bool,同时作用于文本和KNN查询
       - 添加时效性加权函数(days_since_last_update<=30 weight:1.1)
    
    4. RankingEngine重构
       - 重命名为RerankEngine(语义更准确)
       - 默认禁用(enabled=False)
       - 优先使用ES的function_score打分
    
    5. 统一约定原则
       - 移除所有字典兼容代码
       - 全系统统一使用Pydantic模型
       - build_facets只接受str或FacetConfig
       - _build_filters直接接受RangeFilter模型
    
    修改文件:
    - search/multilang_query_builder.py: 重构查询构建逻辑
    - search/es_query_builder.py: 统一Pydantic模型支持
    - search/searcher.py: 使用RerankEngine,更新导入
    - search/rerank_engine.py: 新建(从ranking_engine.py重命名)
    - search/ranking_engine.py: 删除
    - search/__init__.py: 更新导出
    - api/models.py: RangeFilter支持Union[float, str]
    
    测试验证:
    ✓ Facets正常返回
    ✓ Filter同时作用于文本和KNN
    ✓ 日期时间范围过滤正常
    ✓ Function score时效性加权正常
    ✓ 所有测试通过
    
    架构原则:统一约定,不做兼容,保持简单
    tangwang
     
  • tangwang
     
  • tangwang
     
  • tangwang
     

11 Nov, 2025

9 commits


10 Nov, 2025

3 commits


08 Nov, 2025

6 commits


07 Nov, 2025

1 commit