31 Mar, 2026

2 commits


30 Mar, 2026

2 commits

  • must里面的两个combined_fields查询,boost分别设置为2和0.6,和其他查询条件一起,都放到should里面,设置minimum_should_match==1
    2.
    如果keywords_query跟combined_fields主查询的query一样,那么不需要再添加了
    tangwang
     
  • tangwang
     

27 Mar, 2026

2 commits


24 Mar, 2026

1 commit

  • 加了一个过滤/降权词典,query中有独立分词匹配到指定的触发词,将过滤带某些分词的商品(比如fitted/修身,过滤宽松、loose、relaxed、baggy,slouchy等商品)
    2. reranker的query使用翻译后的
    tangwang
     

23 Mar, 2026

3 commits


22 Mar, 2026

2 commits


21 Mar, 2026

1 commit


20 Mar, 2026

3 commits

  • ## 背景
    多语言索引下,用户查询常中英混写;需在解析阶段显式标记脚本类型,并在 BM25 子句中同时覆盖对应语言字段。
    
    ## 方案
    
    ### 1. Query 分析(query_parser.ParsedQuery)
    - 新增 `contains_chinese`:query 文本含 CJK(沿用 _contains_cjk)。
    - 新增 `contains_english`:分词结果中存在「纯英文、len>=3」token(fullmatch 字母及可选连字符)。
    - 写入 to_dict、请求 context 中间结果,便于调试与 API 透出。
    
    ### 2. ES 文本召回(es_query_builder._build_advanced_text_query)
    - 对每个 search_lang 子句:若含英文且子句语言非 en(且租户 index_languages 含 en),合并 en 列字段;若含中文且子句语言非 zh(且含 zh),合并 zh 列字段。
    - 合并进来的字段 boost 乘以 `mixed_script_merged_field_boost_scale`(默认 0.8,可在 ESQueryBuilder 构造参数调整)。
    - fallback_original_query_* 分支同样应用上述逻辑。
    
    ### 3. 实现整理
    - 引入 `MatchFieldSpec = (field_path, boost)`:`_build_match_field_specs` 为唯一权重来源;`_merge_supplemental_lang_field_specs` / `_expand_match_field_specs_for_mixed_script` 在 tuple 上合并与缩放;最后 `_format_match_field_specs` 再格式化为 ES `path^boost`,避免先拼字符串再解析。
    
    ## 测试
    - tests/test_query_parser_mixed_language.py:脚本标记与 token 规则。
    - tests/test_es_query_builder.py:合并字段、0.8 缩放、index_languages 限制。
    
    Made-with: Cursor
    tangwang
     
  • tangwang
     
  • tangwang
     

19 Mar, 2026

3 commits


18 Mar, 2026

1 commit


17 Mar, 2026

3 commits

  • tangwang
     
  • tangwang
     
  • 多个独立翻译能力”重构。现在业务侧不再把翻译当 provider
    选型,QueryParser 和 indexer 统一通过 6006 的 translator service client
    调用;真正的能力选择、启用开关、model + scene 路由,都收口到服务端和新的
    translation/ 目录里了。
    
    这次的核心改动在
    config/services_config.py、providers/translation.py、api/translator_app.py、config/config.yaml
    和新的 translation/service.py。配置从旧的
    services.translation.provider/providers 改成了 service_url +
    default_model + default_scene + capabilities,每个能力可独立
    enabled;服务端新增了统一的 backend 管理与懒加载,真实实现集中到
    translation/backends/qwen_mt.py、translation/backends/llm.py、translation/backends/deepl.py,旧的
    query/qwen_mt_translate.py、query/llm_translate.py、query/deepl_provider.py
    只保留兼容导出。接口上,/translate 现在标准支持 scene,context
    作为兼容别名继续可用,健康检查会返回默认模型、默认场景和已启用能力。
    tangwang
     

13 Mar, 2026

1 commit


10 Mar, 2026

2 commits

  • - 配置改为“字段基名 + 动态语言后缀”方案,已不再依赖旧 `indexes`。
    [config.yaml](/data/saas-search/config/config.yaml#L17)
    - `search_fields` / `text_query_strategy` 已进入强校验与解析流程。
    [config_loader.py](/data/saas-search/config/config_loader.py#L254)
    
    2. 查询语言计划与翻译等待策略
    - `QueryParser` 现在产出
      `query_text_by_lang`、`search_langs`、`source_in_index_languages`。
    [query_parser.py](/data/saas-search/query/query_parser.py#L41)
    - 你要求的两种翻译路径都在:
      - 源语言不在店铺 `index_languages`:`translate_multi_async` + 等待
        future
      - 源语言在 `index_languages`:`translate_multi(...,
        async_mode=True)`,尽量走缓存
    [query_parser.py](/data/saas-search/query/query_parser.py#L284)
    
    3. ES 查询统一文本策略(无 AST 分支)
    - 主召回按 `search_langs` 动态拼 `field.{lang}`,翻译语种做次权重
      `should`。
    [es_query_builder.py](/data/saas-search/search/es_query_builder.py#L454)
    - 布尔 AST 路径已删除,仅保留统一文本策略。
    [es_query_builder.py](/data/saas-search/search/es_query_builder.py#L185)
    
    4. LanguageDetector 优化
    - 从“拉丁字母默认英文”升级为:脚本优先 +
      拉丁语系打分(词典/变音/后缀)。
    [language_detector.py](/data/saas-search/query/language_detector.py#L68)
    
    5. 布尔能力清理(补充)
    - 已删除废弃模块:
    [boolean_parser.py](/data/saas-search/search/boolean_parser.py)
    - `search/__init__` 已无相关导出。
    [search/__init__.py](/data/saas-search/search/__init__.py)
    
    6. `indexes` 过时收口(补充)
    - 兼容函数改为基于动态字段生成,不再依赖 `config.indexes`。
    [utils.py](/data/saas-search/config/utils.py#L24)
    - Admin 配置接口改为返回动态字段配置,不再暴露 `num_indexes`。
    [admin.py](/data/saas-search/api/routes/admin.py#L52)
    
    7. suggest
    tangwang
     
  • tangwang
     

09 Mar, 2026

2 commits


07 Mar, 2026

1 commit


06 Mar, 2026

1 commit


11 Feb, 2026

1 commit


04 Feb, 2026

1 commit


27 Jan, 2026

2 commits


20 Dec, 2025

1 commit


19 Dec, 2025

1 commit


18 Dec, 2025

2 commits

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

08 Dec, 2025

1 commit


07 Dec, 2025

1 commit

  • 主要功能:
    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