Blame view

config/config.yaml 14 KB
4d824a77   tangwang   所有租户共用一套统一配置.tena...
1
  # Unified Configuration for Multi-Tenant Search Engine
33839b37   tangwang   属性值参与搜索:
2
3
  # 统一配置文件,所有租户共用一套配置
  # 注意:索引结构由 mappings/search_products.json 定义,此文件只配置搜索行为
86d0e83d   tangwang   query翻译,根据源语言是否在索...
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
  #
  # 约定:下列键为必填;进程环境变量可覆盖 infrastructure / runtime 中同名语义项
  #(如 ES_HOST、API_PORT 等),未设置环境变量时使用本文件中的值。
  
  # Process / bind addresses (环境变量 APP_ENV、RUNTIME_ENV、ES_INDEX_NAMESPACE 可覆盖前两者的语义)
  runtime:
    environment: "prod"
    index_namespace: ""
    api_host: "0.0.0.0"
    api_port: 6002
    indexer_host: "0.0.0.0"
    indexer_port: 6004
    embedding_host: "0.0.0.0"
    embedding_port: 6005
    embedding_text_port: 6005
    embedding_image_port: 6008
    translator_host: "127.0.0.1"
    translator_port: 6006
    reranker_host: "127.0.0.1"
    reranker_port: 6007
  
  # 基础设施连接(敏感项优先读环境变量:ES_*、REDIS_*、DB_*、DASHSCOPE_API_KEY、DEEPL_AUTH_KEY)
  infrastructure:
    elasticsearch:
      host: "http://localhost:9200"
      username: null
      password: null
    redis:
      host: "localhost"
      port: 6479
      snapshot_db: 0
      password: null
      socket_timeout: 1
      socket_connect_timeout: 1
      retry_on_timeout: false
      cache_expire_days: 720
      embedding_cache_prefix: "embedding"
      anchor_cache_prefix: "product_anchors"
      anchor_cache_expire_days: 30
    database:
      host: null
      port: 3306
      database: null
      username: null
      password: null
    secrets:
      dashscope_api_key: null
      deepl_auth_key: null
4d824a77   tangwang   所有租户共用一套统一配置.tena...
52
53
54
55
  
  # Elasticsearch Index
  es_index_name: "search_products"
  
86d0e83d   tangwang   query翻译,根据源语言是否在索...
56
57
58
  # 检索域 / 索引列表(可为空列表;每项字段均需显式给出)
  indexes: []
  
86d8358b   tangwang   config optimize
59
60
61
62
  # Config assets
  assets:
    query_rewrite_dictionary_path: "config/dictionaries/query_rewrite.dict"
  
41f0b2e9   tangwang   product_enrich支持并发
63
64
65
66
  # Product content understanding (LLM enrich-content) configuration
  product_enrich:
    max_workers: 40
  
33839b37   tangwang   属性值参与搜索:
67
  # ES Index Settings (基础设置)
4d824a77   tangwang   所有租户共用一套统一配置.tena...
68
69
70
71
72
  es_settings:
    number_of_shards: 1
    number_of_replicas: 0
    refresh_interval: "30s"
  
33839b37   tangwang   属性值参与搜索:
73
  # 字段权重配置(用于搜索时的字段boost)
0536222c   tangwang   query parser优化
74
  # 统一按“字段基名”配置;查询时按实际检索语言动态拼接 .{lang}。
bd96cead   tangwang   1. 动态多语言字段与统一策略配置
75
  # 若需要按某个语言单独调权,也可以加显式 key(例如 title.de: 3.2)。
33839b37   tangwang   属性值参与搜索:
76
  field_boosts:
bd96cead   tangwang   1. 动态多语言字段与统一策略配置
77
    title: 3.0
69881ecb   tangwang   相关性调参、enrich内容解析优化
78
79
80
81
    qanchors: 2.5
    tags: 2.0
    category_name_text: 2.0
    category_path: 2.0
bd96cead   tangwang   1. 动态多语言字段与统一策略配置
82
    brief: 1.5
69881ecb   tangwang   相关性调参、enrich内容解析优化
83
    description: 1.5
e756b18e   tangwang   重构了文本召回构建器,现在每个 b...
84
    vendor: 1.5
69881ecb   tangwang   相关性调参、enrich内容解析优化
85
86
87
    option1_values: 1.5
    option2_values: 1.5
    option3_values: 1.5
33839b37   tangwang   属性值参与搜索:
88
  
33839b37   tangwang   属性值参与搜索:
89
  # Query Configuration(查询配置)
4d824a77   tangwang   所有租户共用一套统一配置.tena...
90
  query_config:
33839b37   tangwang   属性值参与搜索:
91
    # 支持的语言
4d824a77   tangwang   所有租户共用一套统一配置.tena...
92
93
94
    supported_languages:
      - "zh"
      - "en"
2739b281   tangwang   多语言索引调整
95
    default_language: "en"
33839b37   tangwang   属性值参与搜索:
96
    
345d960b   tangwang   1. 删除全局 enable_tr...
97
    # 功能开关(翻译开关由tenant_config控制)
4d824a77   tangwang   所有租户共用一套统一配置.tena...
98
99
    enable_text_embedding: true
    enable_query_rewrite: true
4d824a77   tangwang   所有租户共用一套统一配置.tena...
100
  
86d0e83d   tangwang   query翻译,根据源语言是否在索...
101
102
103
104
105
106
107
108
109
110
111
112
113
    # 查询翻译模型(须与 services.translation.capabilities 中某项一致)
    # 源语种在租户 index_languages 内:主召回可打在源语种字段,用下面三项。
    # zh_to_en_model: "opus-mt-zh-en"
    # en_to_zh_model: "opus-mt-en-zh"
    # default_translation_model: "nllb-200-distilled-600m"
    zh_to_en_model: "deepl"
    en_to_zh_model: "deepl"
    default_translation_model: "deepl"
    # 源语种不在 index_languages:翻译对可检索文本更关键,可单独指定(缺省则与上一组相同)
    zh_to_en_model__source_not_in_index: "deepl"
    en_to_zh_model__source_not_in_index: "deepl"
    default_translation_model__source_not_in_index: "deepl"
  
1556989b   tangwang   query翻译等待超时逻辑
114
115
    # 查询解析阶段:翻译与 query 向量并发执行,共用同一等待预算(毫秒)。
    # 检测语言已在租户 index_languages 内:较短;不在索引语言内:较长(翻译对召回更关键)。
86d0e83d   tangwang   query翻译,根据源语言是否在索...
116
117
    translation_embedding_wait_budget_ms_source_in_index: 500 # 80
    translation_embedding_wait_budget_ms_source_not_in_index: 500 #200
1556989b   tangwang   query翻译等待超时逻辑
118
  
bd96cead   tangwang   1. 动态多语言字段与统一策略配置
119
120
121
122
123
124
    # 动态多语言检索字段配置
    # multilingual_fields 会被拼成 title.{lang}/brief.{lang}/... 形式;
    # shared_fields 为无语言后缀字段。
    search_fields:
      multilingual_fields:
        - "title"
69881ecb   tangwang   相关性调参、enrich内容解析优化
125
        - "qanchors"
bd96cead   tangwang   1. 动态多语言字段与统一策略配置
126
127
        - "category_path"
        - "category_name_text"
69881ecb   tangwang   相关性调参、enrich内容解析优化
128
129
        - "brief"
        - "description"
e756b18e   tangwang   重构了文本召回构建器,现在每个 b...
130
        - "vendor"
bd96cead   tangwang   1. 动态多语言字段与统一策略配置
131
      shared_fields:
445496cd   tangwang   fix last up: 每个翻译...
132
133
134
135
        # - "tags"
        # - "option1_values"
        # - "option2_values"
        # - "option3_values"
bd96cead   tangwang   1. 动态多语言字段与统一策略配置
136
137
      core_multilingual_fields:
        - "title"
e756b18e   tangwang   重构了文本召回构建器,现在每个 b...
138
        - "qanchors"
bd96cead   tangwang   1. 动态多语言字段与统一策略配置
139
140
        - "category_name_text"
  
0536222c   tangwang   query parser优化
141
    # 统一文本召回策略(主查询 + 翻译查询)
bd96cead   tangwang   1. 动态多语言字段与统一策略配置
142
143
144
    text_query_strategy:
      base_minimum_should_match: "75%"
      translation_minimum_should_match: "75%"
69881ecb   tangwang   相关性调参、enrich内容解析优化
145
146
      translation_boost: 0.75
      tie_breaker_base_query: 0.5
e756b18e   tangwang   重构了文本召回构建器,现在每个 b...
147
148
149
150
151
152
153
154
155
      best_fields_boost: 2.0
      best_fields:
        title: 4.0
        qanchors: 3.0
        category_name_text: 2.0
      phrase_fields:
        title: 5.0
        qanchors: 4.0
      phrase_match_boost: 3.0
bd96cead   tangwang   1. 动态多语言字段与统一策略配置
156
  
33839b37   tangwang   属性值参与搜索:
157
158
159
    # Embedding字段名称
    text_embedding_field: "title_embedding"
    image_embedding_field: null
325eec03   tangwang   1. 日志、配置基础设施,使用优化
160
  
33839b37   tangwang   属性值参与搜索:
161
162
    # 返回字段配置(_source includes)
    # null表示返回所有字段,[]表示不返回任何字段,列表表示只返回指定字段
a7cc9078   tangwang   sku排序
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
    # 下列字段与 api/result_formatter.py(SpuResult 填充)及 search/searcher.py(SKU 排序/主图替换)一致
    source_fields:
      - spu_id
      - handle
      - title
      - brief
      - description
      - vendor
      - category_name
      - category_name_text
      - category_path
      - category_id
      - category_level
      - category1_name
      - category2_name
      - category3_name
      - tags
      - min_price
      - compare_at_price
      - image_url
      - sku_prices
      - sku_weights
      - sku_weight_units
      - total_inventory
      - option1_name
      - option1_values
dad3c867   tangwang   configs
189
190
191
192
      - option2_name
      - option2_values
      - option3_name
      - option3_values
a7cc9078   tangwang   sku排序
193
194
      - specifications
      - skus
70dab99f   tangwang   add logs
195
196
    
    # KNN boost配置(向量召回的boost值)
ef5baa86   tangwang   混杂语言处理
197
    knn_boost: 2.0  # Lower boost for embedding recall
4d824a77   tangwang   所有租户共用一套统一配置.tena...
198
  
4d824a77   tangwang   所有租户共用一套统一配置.tena...
199
200
201
202
  # Function Score配置(ES层打分规则)
  function_score:
    score_mode: "sum"
    boost_mode: "multiply"
4d824a77   tangwang   所有租户共用一套统一配置.tena...
203
204
    functions: []
  
42e3aea6   tangwang   tidy
205
  # 重排配置(provider/URL 在 services.rerank)
4d824a77   tangwang   所有租户共用一套统一配置.tena...
206
  rerank:
5f7d7f09   tangwang   性能测试报告.md
207
    enabled: true
fb973d19   tangwang   configs
208
    rerank_window: 400
42e3aea6   tangwang   tidy
209
    timeout_sec: 15.0
506c39b7   tangwang   feat(search): 统一重...
210
211
    weight_es: 0.4
    weight_ai: 0.6
ff32d894   tangwang   rerank
212
213
    rerank_query_template: "{query}"
    rerank_doc_template: "{title}"
4d824a77   tangwang   所有租户共用一套统一配置.tena...
214
  
42e3aea6   tangwang   tidy
215
216
217
  # 可扩展服务/provider 注册表(单一配置源)
  services:
    translation:
5e4dc8e4   tangwang   翻译架构按“一个翻译服务 +
218
      service_url: "http://127.0.0.1:6006"
b754fd41   tangwang   图片向量化支持优先级参数
219
      default_model: "nllb-200-distilled-600m"
5e4dc8e4   tangwang   翻译架构按“一个翻译服务 +
220
      default_scene: "general"
42e3aea6   tangwang   tidy
221
      timeout_sec: 10.0
d4cadc13   tangwang   翻译重构
222
      cache:
d4cadc13   tangwang   翻译重构
223
224
        ttl_seconds: 62208000
        sliding_expiration: true
8140e942   tangwang   translator model ...
225
226
227
228
229
230
231
232
233
234
235
        # When false, cache keys are exact-match per request model only (ignores model_quality_tiers for lookups).
        enable_model_quality_tier_cache: true
        # Higher tier = better quality. Multiple models may share one tier (同级).
        # A request may reuse Redis keys from models with tier > A or tier == A (not from lower tiers).
        model_quality_tiers:
          deepl: 30
          qwen-mt: 30
          llm: 30
          nllb-200-distilled-600m: 20
          opus-mt-zh-en: 10
          opus-mt-en-zh: 10
5e4dc8e4   tangwang   翻译架构按“一个翻译服务 +
236
      capabilities:
d4cadc13   tangwang   翻译重构
237
        qwen-mt:
5e4dc8e4   tangwang   翻译架构按“一个翻译服务 +
238
          enabled: true
0fd2f875   tangwang   translate
239
          backend: "qwen_mt"
5e4dc8e4   tangwang   翻译架构按“一个翻译服务 +
240
          model: "qwen-mt-flash"
0fd2f875   tangwang   translate
241
          base_url: "https://dashscope-us.aliyuncs.com/compatible-mode/v1"
42e3aea6   tangwang   tidy
242
          timeout_sec: 10.0
5e4dc8e4   tangwang   翻译架构按“一个翻译服务 +
243
          use_cache: true
a0a173ae   tangwang   last
244
        llm:
5e4dc8e4   tangwang   翻译架构按“一个翻译服务 +
245
          enabled: true
0fd2f875   tangwang   translate
246
          backend: "llm"
a0a173ae   tangwang   last
247
          model: "qwen-flash"
0fd2f875   tangwang   translate
248
          base_url: "https://dashscope-us.aliyuncs.com/compatible-mode/v1"
a0a173ae   tangwang   last
249
          timeout_sec: 30.0
cd4ce66d   tangwang   trans logs
250
          use_cache: true
d4cadc13   tangwang   翻译重构
251
        deepl:
cd4ce66d   tangwang   trans logs
252
          enabled: true
0fd2f875   tangwang   translate
253
254
          backend: "deepl"
          api_url: "https://api.deepl.com/v2/translate"
d4cadc13   tangwang   翻译重构
255
          timeout_sec: 10.0
d4cadc13   tangwang   翻译重构
256
          glossary_id: ""
cd4ce66d   tangwang   trans logs
257
          use_cache: true
0fd2f875   tangwang   translate
258
259
260
261
262
        nllb-200-distilled-600m:
          enabled: true
          backend: "local_nllb"
          model_id: "facebook/nllb-200-distilled-600M"
          model_dir: "./models/translation/facebook/nllb-200-distilled-600M"
ea293660   tangwang   CTranslate2
263
264
265
266
          ct2_model_dir: "./models/translation/facebook/nllb-200-distilled-600M/ctranslate2-float16"
          ct2_compute_type: "float16"
          ct2_conversion_quantization: "float16"
          ct2_auto_convert: true
46ce858d   tangwang   在NLLB模型的 /data/sa...
267
          ct2_inter_threads: 4
ea293660   tangwang   CTranslate2
268
          ct2_intra_threads: 0
46ce858d   tangwang   在NLLB模型的 /data/sa...
269
          ct2_max_queued_batches: 32
ea293660   tangwang   CTranslate2
270
          ct2_batch_type: "examples"
46ce858d   tangwang   在NLLB模型的 /data/sa...
271
272
273
          ct2_decoding_length_mode: "source"
          ct2_decoding_length_extra: 8
          ct2_decoding_length_min: 32
0fd2f875   tangwang   translate
274
275
          device: "cuda"
          torch_dtype: "float16"
4747e2f4   tangwang   embedding perform...
276
          batch_size: 64
0fd2f875   tangwang   translate
277
          max_input_length: 256
3eff49b7   tangwang   trans nllb-200-di...
278
          max_new_tokens: 64
0fd2f875   tangwang   translate
279
          num_beams: 1
cd4ce66d   tangwang   trans logs
280
          use_cache: true
0fd2f875   tangwang   translate
281
282
283
284
285
        opus-mt-zh-en:
          enabled: true
          backend: "local_marian"
          model_id: "Helsinki-NLP/opus-mt-zh-en"
          model_dir: "./models/translation/Helsinki-NLP/opus-mt-zh-en"
ea293660   tangwang   CTranslate2
286
287
288
289
290
291
292
293
          ct2_model_dir: "./models/translation/Helsinki-NLP/opus-mt-zh-en/ctranslate2-float16"
          ct2_compute_type: "float16"
          ct2_conversion_quantization: "float16"
          ct2_auto_convert: true
          ct2_inter_threads: 1
          ct2_intra_threads: 0
          ct2_max_queued_batches: 0
          ct2_batch_type: "examples"
0fd2f875   tangwang   translate
294
295
296
297
298
299
          device: "cuda"
          torch_dtype: "float16"
          batch_size: 16
          max_input_length: 256
          max_new_tokens: 256
          num_beams: 1
cd4ce66d   tangwang   trans logs
300
          use_cache: true
0fd2f875   tangwang   translate
301
302
303
304
305
        opus-mt-en-zh:
          enabled: true
          backend: "local_marian"
          model_id: "Helsinki-NLP/opus-mt-en-zh"
          model_dir: "./models/translation/Helsinki-NLP/opus-mt-en-zh"
ea293660   tangwang   CTranslate2
306
307
308
309
310
311
312
313
          ct2_model_dir: "./models/translation/Helsinki-NLP/opus-mt-en-zh/ctranslate2-float16"
          ct2_compute_type: "float16"
          ct2_conversion_quantization: "float16"
          ct2_auto_convert: true
          ct2_inter_threads: 1
          ct2_intra_threads: 0
          ct2_max_queued_batches: 0
          ct2_batch_type: "examples"
0fd2f875   tangwang   translate
314
315
316
317
318
319
          device: "cuda"
          torch_dtype: "float16"
          batch_size: 16
          max_input_length: 256
          max_new_tokens: 256
          num_beams: 1
cd4ce66d   tangwang   trans logs
320
          use_cache: true
42e3aea6   tangwang   tidy
321
    embedding:
950a640e   tangwang   embeddings
322
      provider: "http"  # http
42e3aea6   tangwang   tidy
323
324
      providers:
        http:
7214c2e7   tangwang   mplemented**
325
326
          text_base_url: "http://127.0.0.1:6005"
          image_base_url: "http://127.0.0.1:6008"
07cf5a93   tangwang   START_EMBEDDING=...
327
      # 服务内文本后端(embedding 进程启动时读取)
efd435cf   tangwang   tei性能调优:
328
      backend: "tei"  # tei | local_st
07cf5a93   tangwang   START_EMBEDDING=...
329
330
331
      backends:
        tei:
          base_url: "http://127.0.0.1:8080"
efd435cf   tangwang   tei性能调优:
332
          timeout_sec: 20
07cf5a93   tangwang   START_EMBEDDING=...
333
334
335
336
337
338
          model_id: "Qwen/Qwen3-Embedding-0.6B"
        local_st:
          model_id: "Qwen/Qwen3-Embedding-0.6B"
          device: "cuda"
          batch_size: 32
          normalize_embeddings: true
86d8358b   tangwang   config optimize
339
340
341
342
343
344
345
346
347
348
349
350
351
      # 服务内图片后端(embedding 进程启动时读取)
      image_backend: "clip_as_service"  # clip_as_service | local_cnclip
      image_backends:
        clip_as_service:
          server: "grpc://127.0.0.1:51000"
          model_name: "CN-CLIP/ViT-L-14"
          batch_size: 8
          normalize_embeddings: true
        local_cnclip:
          model_name: "ViT-L-14"
          device: null
          batch_size: 8
          normalize_embeddings: true
42e3aea6   tangwang   tidy
352
    rerank:
701ae503   tangwang   docs
353
      provider: "http"
42e3aea6   tangwang   tidy
354
355
356
357
      base_url: "http://127.0.0.1:6007"
      providers:
        http:
          base_url: "http://127.0.0.1:6007"
701ae503   tangwang   docs
358
          service_url: "http://127.0.0.1:6007/rerank"
86d8358b   tangwang   config optimize
359
360
361
      request:
        max_docs: 1000
        normalize: true
701ae503   tangwang   docs
362
      # 服务内后端(reranker 进程启动时读取)
fb973d19   tangwang   configs
363
      backend: "qwen3_vllm"  # bge | qwen3_vllm | qwen3_transformers | dashscope_rerank
701ae503   tangwang   docs
364
365
366
367
368
369
      backends:
        bge:
          model_name: "BAAI/bge-reranker-v2-m3"
          device: null
          use_fp16: true
          batch_size: 64
00c8ddb9   tangwang   suggest rank opti...
370
          max_length: 160
701ae503   tangwang   docs
371
372
373
374
375
          cache_dir: "./model_cache"
          enable_warmup: true
        qwen3_vllm:
          model_name: "Qwen/Qwen3-Reranker-0.6B"
          engine: "vllm"
00c8ddb9   tangwang   suggest rank opti...
376
          max_model_len: 160
701ae503   tangwang   docs
377
          tensor_parallel_size: 1
ef5baa86   tangwang   混杂语言处理
378
          gpu_memory_utilization: 0.20
07cf5a93   tangwang   START_EMBEDDING=...
379
          dtype: "float16"
bc089b43   tangwang   refactor(reranker...
380
381
          enable_prefix_caching: true
          enforce_eager: false
00c8ddb9   tangwang   suggest rank opti...
382
          infer_batch_size: 100
9f5994b4   tangwang   reranker
383
          sort_by_doc_length: true
fb973d19   tangwang   configs
384
385
386
          # "rank products by given query" 比 “Given a query, score the product for relevance” 更好点
          instruction: "rank products by given query" 
          # instruction: "Given a query, score the product for relevance"
d31c7f65   tangwang   补充云服务reranker
387
388
        qwen3_transformers:
          model_name: "Qwen/Qwen3-Reranker-0.6B"
77bfa7e3   tangwang   query translate
389
          instruction: "rank products by given query"
fb973d19   tangwang   configs
390
          # instruction: "Score the product’s relevance to the given query"
d31c7f65   tangwang   补充云服务reranker
391
392
393
          max_length: 8192
          batch_size: 64
          use_fp16: true
fb973d19   tangwang   configs
394
395
          # sdpa:默认无需 flash-attn;若已安装 flash_attn 可改为 flash_attention_2
          attn_implementation: "sdpa"
d31c7f65   tangwang   补充云服务reranker
396
397
398
399
400
401
402
        dashscope_rerank:
          model_name: "qwen3-rerank"
          # 按地域选择 endpoint:
          # 中国:   https://dashscope.aliyuncs.com/compatible-api/v1/reranks
          # 新加坡: https://dashscope-intl.aliyuncs.com/compatible-api/v1/reranks
          # 美国:   https://dashscope-us.aliyuncs.com/compatible-api/v1/reranks
          endpoint: "https://dashscope.aliyuncs.com/compatible-api/v1/reranks"
0d3e73ba   tangwang   rerank mini batch
403
404
          api_key_env: "RERANK_DASHSCOPE_API_KEY_CN"
          timeout_sec: 10.0 # 
d31c7f65   tangwang   补充云服务reranker
405
          top_n_cap: 0   # 0 表示 top_n=当前请求文档数;>0 则限制 top_n 上限
0d3e73ba   tangwang   rerank mini batch
406
          batchsize: 64 # 0 关闭;>0 启用并发小包调度(top_n/top_n_cap 仍生效,分包后全局截断)
d31c7f65   tangwang   补充云服务reranker
407
408
409
          instruct: "Given a shopping query, rank product titles by relevance"
          max_retries: 2
          retry_backoff_sec: 0.2
42e3aea6   tangwang   tidy
410
  
cadc77b6   tangwang   索引字段名、变量名、API数据结构...
411
  # SPU配置(已启用,使用嵌套skus)
4d824a77   tangwang   所有租户共用一套统一配置.tena...
412
413
  spu_config:
    enabled: true
cadc77b6   tangwang   索引字段名、变量名、API数据结构...
414
    spu_field: "spu_id"
4d824a77   tangwang   所有租户共用一套统一配置.tena...
415
    inner_hits_size: 10
33839b37   tangwang   属性值参与搜索:
416
417
418
    # 配置哪些option维度参与检索(进索引、以及在线搜索)
    # 格式为list,选择option1/option2/option3中的一个或多个
    searchable_option_dimensions: ['option1', 'option2', 'option3']
0064e946   tangwang   feat: 增量索引服务、租户配置...
419
420
  
  # 租户配置(Tenant Configuration)
038e4e2f   tangwang   refactor(i18n): t...
421
  # 每个租户可配置主语言 primary_language 与索引语言 index_languages(主市场语言,商家可勾选)
6f7840cf   tangwang   refactor: rename ...
422
  # 默认 index_languages: [en, zh],可配置为任意 SOURCE_LANG_CODE_MAP.keys() 的子集
0064e946   tangwang   feat: 增量索引服务、租户配置...
423
  tenant_config:
0064e946   tangwang   feat: 增量索引服务、租户配置...
424
    default:
2739b281   tangwang   多语言索引调整
425
      primary_language: "en"
038e4e2f   tangwang   refactor(i18n): t...
426
      index_languages: ["en", "zh"]
0064e946   tangwang   feat: 增量索引服务、租户配置...
427
428
429
    tenants:
      "1":
        primary_language: "zh"
038e4e2f   tangwang   refactor(i18n): t...
430
        index_languages: ["zh", "en"]
0064e946   tangwang   feat: 增量索引服务、租户配置...
431
432
      "2":
        primary_language: "en"
038e4e2f   tangwang   refactor(i18n): t...
433
        index_languages: ["en", "zh"]
0064e946   tangwang   feat: 增量索引服务、租户配置...
434
435
      "3":
        primary_language: "zh"
038e4e2f   tangwang   refactor(i18n): t...
436
        index_languages: ["zh", "en"]
0064e946   tangwang   feat: 增量索引服务、租户配置...
437
438
      "162":
        primary_language: "zh"
038e4e2f   tangwang   refactor(i18n): t...
439
        index_languages: ["zh", "en"]
cff5e86f   tangwang   reindex
440
441
      "170":
        primary_language: "en"
038e4e2f   tangwang   refactor(i18n): t...
442
        index_languages: ["en", "zh"]