Blame view

docs/相关性检索优化说明.md 5.82 KB
bcada818   tangwang   last
1
  # 相关性检索优化说明(当前实现)
7bc756c5   tangwang   优化 ES 查询构建
2
  
bcada818   tangwang   last
3
  ## 1. 文档目标
7bc756c5   tangwang   优化 ES 查询构建
4
  
bcada818   tangwang   last
5
  本文描述当前线上代码的文本检索策略,重点覆盖:
7bc756c5   tangwang   优化 ES 查询构建
6
  
bcada818   tangwang   last
7
8
9
10
  - 多语言检索路由(`detector` / `translator` / `indexed` 的关系)
  - 统一文本召回表达式(无布尔 AST 分支)
  - 翻译缺失时的兜底策略
  - 典型场景下实际生成的 ES 查询结构
7bc756c5   tangwang   优化 ES 查询构建
11
  
bcada818   tangwang   last
12
  > 说明:向量召回(KNN)是另一维度,本篇仅简要提及,不展开。
7bc756c5   tangwang   优化 ES 查询构建
13
  
bcada818   tangwang   last
14
  ## 2. 核心流程
7bc756c5   tangwang   优化 ES 查询构建
15
  
bcada818   tangwang   last
16
  查询链路(文本相关):
7bc756c5   tangwang   优化 ES 查询构建
17
  
bcada818   tangwang   last
18
19
20
21
22
23
  1. `QueryParser.parse()`  
     输出 `detected_language`、`query_text_by_lang`、`search_langs`、`index_languages`、`source_in_index_languages`
  2. `ESQueryBuilder._build_advanced_text_query()`  
  `search_langs` 动态拼接 `title/brief/description/vendor/category_*` 的 `.{lang}` 字段,叠加 shared 字段(`tags`、`option*_values`)。
  3. `build_query()`  
     统一走文本策略,不再有布尔 AST 枝路。
7bc756c5   tangwang   优化 ES 查询构建
24
  
bcada818   tangwang   last
25
  ## 3. 能力矩阵(Detector / Translator / Indexed)
7bc756c5   tangwang   优化 ES 查询构建
26
  
bcada818   tangwang   last
27
  三类能力的职责边界:
7bc756c5   tangwang   优化 ES 查询构建
28
  
bcada818   tangwang   last
29
30
31
  - **Detector**:识别 query 源语言(`detected_language`
  - **Indexed**:租户可检索语言集合(`tenant_config.*.index_languages`
  - **Translator**:源语言到目标语言的可翻译能力及实时成功率
7bc756c5   tangwang   优化 ES 查询构建
32
  
bcada818   tangwang   last
33
  ### 3.1 决策规则
7bc756c5   tangwang   优化 ES 查询构建
34
  
bcada818   tangwang   last
35
36
37
38
39
40
  1.`detected_language in index_languages`
     源语言字段做主召回;其他语言走翻译补召回(低权重)。
  2.`detected_language not in index_languages`
     翻译到 `index_languages` 是主路径;源语言字段仅作弱召回。
  3. 若第 2 步翻译部分失败或全部失败:  
     对缺失翻译的 `index_languages` 字段,追加“原文低权重兜底”子句,避免完全丢失这些语种索引面的召回机会。
7bc756c5   tangwang   优化 ES 查询构建
41
  
bcada818   tangwang   last
42
  ### 3.2 翻译等待策略
7bc756c5   tangwang   优化 ES 查询构建
43
  
bcada818   tangwang   last
44
  `QueryParser.parse()` 中:
7bc756c5   tangwang   优化 ES 查询构建
45
  
bcada818   tangwang   last
46
47
  - 当源语种不在 `index_languages`:使用 `translate_multi_async(...)` 并等待 futures 收敛
  - 当源语种在 `index_languages`:使用 `translate_multi(..., async_mode=True)`,优先缓存命中,未命中可后台补齐
7bc756c5   tangwang   优化 ES 查询构建
48
  
bcada818   tangwang   last
49
  这保证了“必须翻译才能检索”的场景不会直接空跑。
7bc756c5   tangwang   优化 ES 查询构建
50
  
bcada818   tangwang   last
51
  ## 4. 统一文本召回表达式
ea118f2b   tangwang   build_query:根据 qu...
52
  
bcada818   tangwang   last
53
  每个语言子句的基础形态:
ea118f2b   tangwang   build_query:根据 qu...
54
  
bcada818   tangwang   last
55
56
57
58
59
60
61
62
63
64
65
66
  ```json
  {
    "multi_match": {
      "_name": "base_query|base_query_trans_xx|fallback_original_query_xx",
      "query": "<text>",
      "fields": ["title.xx^3.0", "brief.xx^1.5", "...", "tags", "option1_values^0.5", "..."],
      "minimum_should_match": "75%",
      "tie_breaker": 0.9,
      "boost": "<按策略决定,可省略>"
    }
  }
  ```
ea118f2b   tangwang   build_query:根据 qu...
67
  
bcada818   tangwang   last
68
  最终按 `bool.should` 组合,`minimum_should_match: 1`
ea118f2b   tangwang   build_query:根据 qu...
69
  
bcada818   tangwang   last
70
  ## 5. 关键配置项(文本策略)
7bc756c5   tangwang   优化 ES 查询构建
71
  
bcada818   tangwang   last
72
  位于 `config/config.yaml -> query_config.text_query_strategy`
7bc756c5   tangwang   优化 ES 查询构建
73
  
bcada818   tangwang   last
74
75
76
77
78
79
80
81
82
83
  - `base_minimum_should_match`
  - `translation_minimum_should_match`
  - `translation_boost`
  - `translation_boost_when_source_missing`
  - `source_boost_when_missing`
  - `original_query_fallback_boost_when_translation_missing`(新增)
  - `keywords_boost`
  - `enable_phrase_query`
  - `tie_breaker_base_query`
  - `tie_breaker_keywords`
7bc756c5   tangwang   优化 ES 查询构建
84
  
bcada818   tangwang   last
85
  新增项说明:
7bc756c5   tangwang   优化 ES 查询构建
86
  
bcada818   tangwang   last
87
88
  - `original_query_fallback_boost_when_translation_missing`
    当源语种不在索引语言且翻译缺失时,原文打到缺失目标语字段的低权重系数,默认 `0.2`
7bc756c5   tangwang   优化 ES 查询构建
89
  
bcada818   tangwang   last
90
  ## 6. 典型场景与实际 DSL
7bc756c5   tangwang   优化 ES 查询构建
91
  
bcada818   tangwang   last
92
  以下示例来自当前 `ESQueryBuilder` 生成结果(已按当前代码验证)。
7bc756c5   tangwang   优化 ES 查询构建
93
  
bcada818   tangwang   last
94
  ### 场景 A:源语种已在索引语言中,且翻译成功
7bc756c5   tangwang   优化 ES 查询构建
95
  
bcada818   tangwang   last
96
97
98
  - `detected_language=de`
  - `index_languages=[de,en]`
  - `query_text_by_lang={de:"herren schuhe", en:"men shoes"}`
7bc756c5   tangwang   优化 ES 查询构建
99
  
bcada818   tangwang   last
100
  策略结果:
7bc756c5   tangwang   优化 ES 查询构建
101
  
bcada818   tangwang   last
102
103
  - `base_query`:德语字段,正常权重
  - `base_query_trans_en`:英语字段,`boost=translation_boost`(默认 0.4)
7bc756c5   tangwang   优化 ES 查询构建
104
  
bcada818   tangwang   last
105
  ### 场景 B:源语种不在索引语言中,部分翻译缺失
7bc756c5   tangwang   优化 ES 查询构建
106
  
bcada818   tangwang   last
107
108
109
  - `detected_language=de`
  - `index_languages=[en,zh]`
  - 只翻译出 `en`,`zh` 失败
7bc756c5   tangwang   优化 ES 查询构建
110
  
bcada818   tangwang   last
111
  策略结果:
7bc756c5   tangwang   优化 ES 查询构建
112
  
bcada818   tangwang   last
113
114
115
  - `base_query`(德语字段):`boost=source_boost_when_missing`(默认 0.6)
  - `base_query_trans_en`(英文字段):`boost=translation_boost_when_source_missing`(默认 1.0)
  - `fallback_original_query_zh`(中文字段):原文低权重兜底(默认 0.2)
7bc756c5   tangwang   优化 ES 查询构建
116
  
bcada818   tangwang   last
117
  ### 场景 C:源语种不在索引语言中,翻译全部失败
7bc756c5   tangwang   优化 ES 查询构建
118
  
bcada818   tangwang   last
119
120
121
  - `detected_language=de`
  - `index_languages=[en,zh]`
  - `query_text_by_lang` 仅有 `de`
7bc756c5   tangwang   优化 ES 查询构建
122
  
bcada818   tangwang   last
123
  策略结果:
7bc756c5   tangwang   优化 ES 查询构建
124
  
bcada818   tangwang   last
125
126
127
  - `base_query`(德语字段,低权重)
  - `fallback_original_query_en`(英文字段原文兜底)
  - `fallback_original_query_zh`(中文字段原文兜底)
7bc756c5   tangwang   优化 ES 查询构建
128
  
bcada818   tangwang   last
129
  这能避免“只有源语种字段查询,且该语种字段在商家索引中稀疏/为空”导致的弱召回问题。
7bc756c5   tangwang   优化 ES 查询构建
130
  
bcada818   tangwang   last
131
  ## 7. QueryParser 与 ESBuilder 的职责分工
7bc756c5   tangwang   优化 ES 查询构建
132
  
bcada818   tangwang   last
133
134
135
136
137
138
139
140
141
  - `QueryParser` 负责“语言计划”与“可用文本”:
    - `search_langs`
    - `query_text_by_lang`
    - `source_in_index_languages`
    - `index_languages`
  - `ESQueryBuilder` 负责“表达式展开”:
    - 动态字段组装
    - 子句权重分配
    - 翻译缺失兜底子句拼接
7bc756c5   tangwang   优化 ES 查询构建
142
  
bcada818   tangwang   last
143
  这种分层让策略调优主要落在配置和 Builder,不破坏 Parser 的职责边界。
7bc756c5   tangwang   优化 ES 查询构建
144
  
bcada818   tangwang   last
145
  ## 8. 兼容与注意事项
7bc756c5   tangwang   优化 ES 查询构建
146
  
bcada818   tangwang   last
147
148
149
150
151
152
153
  1. 当前文本主链路已移除布尔 AST 分支。  
  2. 文档中的旧描述(如 `operator: AND` 固定开启)不再适用,当前实现未强制设置该参数。  
  3. `HanLP` 为可选依赖;不可用时退化到轻量分词,不影响主链路可用性。  
  4. 若后续扩展到更多语种,请确保:
     - mapping 中存在对应 `.<lang>` 字段
     - `index_languages` 配置在支持列表内
     - 翻译 provider 对目标语种可用
7bc756c5   tangwang   优化 ES 查询构建
154
  
bcada818   tangwang   last
155
  ## 9. 建议测试清单
7bc756c5   tangwang   优化 ES 查询构建
156
  
bcada818   tangwang   last
157
  建议在 `tests/` 增加文本策略用例:
7bc756c5   tangwang   优化 ES 查询构建
158
  
bcada818   tangwang   last
159
160
161
162
163
  1. 源语种在索引语言,翻译命中缓存  
  2. 源语种不在索引语言,翻译部分失败(验证 fallback 子句)  
  3. 源语种不在索引语言,翻译全部失败(验证多目标 fallback)  
  4. 自定义 `original_query_fallback_boost_when_translation_missing` 生效  
  5.`zh/en` 语种字段动态拼接(如 `de/fr/es`