be52af70
tangwang
first commit
|
1
|
"""
|
9cb7528e
tangwang
店匠体系数据的搜索:mock da...
|
2
|
Configuration loader and validator for search engine configurations.
|
be52af70
tangwang
first commit
|
3
4
|
This module handles loading, parsing, and validating YAML configuration files
|
33839b37
tangwang
属性值参与搜索:
|
5
6
7
8
|
that define how search should be executed (NOT how data should be indexed).
索引结构由 mappings/search_products.json 定义。
此配置只定义搜索行为:字段权重、搜索域、查询策略等。
|
be52af70
tangwang
first commit
|
9
10
11
12
13
14
15
16
|
"""
import yaml
import os
from typing import Dict, Any, List, Optional
from dataclasses import dataclass, field
from pathlib import Path
|
be52af70
tangwang
first commit
|
17
18
19
20
21
22
|
@dataclass
class IndexConfig:
"""Configuration for an index domain (e.g., default, title, brand)."""
name: str
label: str
|
33839b37
tangwang
属性值参与搜索:
|
23
|
fields: List[str] # List of field names to include in this search domain
|
be52af70
tangwang
first commit
|
24
25
26
|
boost: float = 1.0
example: Optional[str] = None
|
be52af70
tangwang
first commit
|
27
28
29
30
31
|
@dataclass
class QueryConfig:
"""Configuration for query processing."""
supported_languages: List[str] = field(default_factory=lambda: ["zh", "en"])
|
2739b281
tangwang
多语言索引调整
|
32
|
default_language: str = "en"
|
33839b37
tangwang
属性值参与搜索:
|
33
34
|
# Feature flags
|
be52af70
tangwang
first commit
|
35
36
|
enable_text_embedding: bool = True
enable_query_rewrite: bool = True
|
7bc756c5
tangwang
优化 ES 查询构建
|
37
|
enable_multilang_search: bool = True # Enable multi-language search using translations
|
33839b37
tangwang
属性值参与搜索:
|
38
39
|
# Query rewrite dictionary (loaded from external file)
|
be52af70
tangwang
first commit
|
40
|
rewrite_dictionary: Dict[str, str] = field(default_factory=dict)
|
33839b37
tangwang
属性值参与搜索:
|
41
42
43
|
# Translation settings
translation_service: str = "deepl"
|
be52af70
tangwang
first commit
|
44
|
translation_api_key: Optional[str] = None
|
33839b37
tangwang
属性值参与搜索:
|
45
46
|
translation_glossary_id: Optional[str] = None
translation_context: str = "e-commerce product search"
|
0064e946
tangwang
feat: 增量索引服务、租户配置...
|
47
|
translation_prompts: Dict[str, str] = field(default_factory=dict) # Translation prompts for different use cases
|
33839b37
tangwang
属性值参与搜索:
|
48
49
50
51
52
|
# Embedding field names
text_embedding_field: Optional[str] = "title_embedding"
image_embedding_field: Optional[str] = None
|
9f96d6f3
tangwang
短query不用语义搜索
|
53
|
# Embedding disable thresholds (disable vector search for short queries)
|
33839b37
tangwang
属性值参与搜索:
|
54
55
56
57
|
embedding_disable_chinese_char_limit: int = 4
embedding_disable_english_word_limit: int = 3
# Source fields configuration
|
cd3799c6
tangwang
tenant2 1w测试数据 mo...
|
58
|
source_fields: Optional[List[str]] = None
|
70dab99f
tangwang
add logs
|
59
60
61
|
# KNN boost configuration
knn_boost: float = 0.25 # Boost value for KNN (embedding recall)
|
13377199
tangwang
接口优化
|
62
|
|
be52af70
tangwang
first commit
|
63
64
65
66
67
|
@dataclass
class SPUConfig:
"""Configuration for SPU aggregation."""
enabled: bool = False
|
33839b37
tangwang
属性值参与搜索:
|
68
|
spu_field: Optional[str] = None
|
be52af70
tangwang
first commit
|
69
|
inner_hits_size: int = 3
|
33839b37
tangwang
属性值参与搜索:
|
70
71
|
# 配置哪些option维度参与检索(进索引、以及在线搜索)
searchable_option_dimensions: List[str] = field(default_factory=lambda: ['option1', 'option2', 'option3'])
|
be52af70
tangwang
first commit
|
72
73
74
|
@dataclass
|
a00c3672
tangwang
feat: Function Sc...
|
75
76
|
class FunctionScoreConfig:
"""Function Score配置(ES层打分规则)"""
|
33839b37
tangwang
属性值参与搜索:
|
77
78
|
score_mode: str = "sum"
boost_mode: str = "multiply"
|
a00c3672
tangwang
feat: Function Sc...
|
79
80
81
82
|
functions: List[Dict[str, Any]] = field(default_factory=list)
@dataclass
|
33839b37
tangwang
属性值参与搜索:
|
83
84
85
86
87
88
89
|
class RankingConfig:
"""Configuration for ranking expressions."""
expression: str = "bm25()"
description: str = "Default BM25 ranking"
@dataclass
|
a00c3672
tangwang
feat: Function Sc...
|
90
91
92
93
94
95
96
97
|
class RerankConfig:
"""本地重排配置(当前禁用)"""
enabled: bool = False
expression: str = ""
description: str = ""
@dataclass
|
9cb7528e
tangwang
店匠体系数据的搜索:mock da...
|
98
|
class SearchConfig:
|
4d824a77
tangwang
所有租户共用一套统一配置.tena...
|
99
|
"""Complete configuration for search engine (multi-tenant)."""
|
33839b37
tangwang
属性值参与搜索:
|
100
101
102
103
|
# 字段权重配置(用于搜索)
field_boosts: Dict[str, float]
|
be52af70
tangwang
first commit
|
104
105
|
# Index structure (query domains)
indexes: List[IndexConfig]
|
33839b37
tangwang
属性值参与搜索:
|
106
|
|
be52af70
tangwang
first commit
|
107
108
|
# Query processing
query_config: QueryConfig
|
33839b37
tangwang
属性值参与搜索:
|
109
|
|
be52af70
tangwang
first commit
|
110
111
|
# Ranking configuration
ranking: RankingConfig
|
33839b37
tangwang
属性值参与搜索:
|
112
|
|
a00c3672
tangwang
feat: Function Sc...
|
113
114
|
# Function Score configuration (ES层打分)
function_score: FunctionScoreConfig
|
33839b37
tangwang
属性值参与搜索:
|
115
|
|
a00c3672
tangwang
feat: Function Sc...
|
116
117
|
# Rerank configuration (本地重排)
rerank: RerankConfig
|
33839b37
tangwang
属性值参与搜索:
|
118
|
|
be52af70
tangwang
first commit
|
119
120
|
# SPU configuration
spu_config: SPUConfig
|
33839b37
tangwang
属性值参与搜索:
|
121
|
|
be52af70
tangwang
first commit
|
122
123
|
# ES index settings
es_index_name: str
|
0064e946
tangwang
feat: 增量索引服务、租户配置...
|
124
125
126
127
128
|
# Tenant configuration
tenant_config: Dict[str, Any] = field(default_factory=dict)
# ES settings
|
be52af70
tangwang
first commit
|
129
130
131
132
133
134
135
136
137
|
es_settings: Dict[str, Any] = field(default_factory=dict)
class ConfigurationError(Exception):
"""Raised when configuration validation fails."""
pass
class ConfigLoader:
|
4d824a77
tangwang
所有租户共用一套统一配置.tena...
|
138
|
"""Loads and validates unified search engine configuration from YAML file."""
|
a77693fe
tangwang
调整配置目录结构
|
139
|
|
33839b37
tangwang
属性值参与搜索:
|
140
|
def __init__(self, config_file: Optional[Path] = None):
|
a77693fe
tangwang
调整配置目录结构
|
141
|
"""
|
33839b37
tangwang
属性值参与搜索:
|
142
|
Initialize config loader.
|
a77693fe
tangwang
调整配置目录结构
|
143
|
|
33839b37
tangwang
属性值参与搜索:
|
144
145
|
Args:
config_file: Path to config YAML file (defaults to config/config.yaml)
|
a77693fe
tangwang
调整配置目录结构
|
146
|
"""
|
33839b37
tangwang
属性值参与搜索:
|
147
148
149
150
151
152
153
154
|
if config_file is None:
config_file = Path(__file__).parent / "config.yaml"
self.config_file = Path(config_file)
def _load_rewrite_dictionary(self) -> Dict[str, str]:
"""Load query rewrite dictionary from external file."""
rewrite_file = Path(__file__).parent / "rewrite_dictionary.txt"
rewrite_dict = {}
|
a77693fe
tangwang
调整配置目录结构
|
155
|
|
33839b37
tangwang
属性值参与搜索:
|
156
157
|
if not rewrite_file.exists():
return rewrite_dict
|
a77693fe
tangwang
调整配置目录结构
|
158
|
|
a77693fe
tangwang
调整配置目录结构
|
159
|
try:
|
33839b37
tangwang
属性值参与搜索:
|
160
161
|
with open(rewrite_file, 'r', encoding='utf-8') as f:
for line in f:
|
a77693fe
tangwang
调整配置目录结构
|
162
|
line = line.strip()
|
a77693fe
tangwang
调整配置目录结构
|
163
164
165
|
if not line or line.startswith('#'):
continue
|
a77693fe
tangwang
调整配置目录结构
|
166
|
parts = line.split('\t')
|
33839b37
tangwang
属性值参与搜索:
|
167
168
169
170
171
|
if len(parts) >= 2:
original = parts[0].strip()
replacement = parts[1].strip()
if original and replacement:
rewrite_dict[original] = replacement
|
a77693fe
tangwang
调整配置目录结构
|
172
|
except Exception as e:
|
33839b37
tangwang
属性值参与搜索:
|
173
|
print(f"Warning: Failed to load rewrite dictionary: {e}")
|
a77693fe
tangwang
调整配置目录结构
|
174
175
|
return rewrite_dict
|
33839b37
tangwang
属性值参与搜索:
|
176
|
|
9f96d6f3
tangwang
短query不用语义搜索
|
177
|
def load_config(self, validate: bool = True) -> SearchConfig:
|
be52af70
tangwang
first commit
|
178
|
"""
|
4d824a77
tangwang
所有租户共用一套统一配置.tena...
|
179
|
Load unified configuration from YAML file.
|
33839b37
tangwang
属性值参与搜索:
|
180
|
|
9f96d6f3
tangwang
短query不用语义搜索
|
181
|
Args:
|
33839b37
tangwang
属性值参与搜索:
|
182
183
|
validate: Whether to validate configuration after loading
|
be52af70
tangwang
first commit
|
184
|
Returns:
|
9cb7528e
tangwang
店匠体系数据的搜索:mock da...
|
185
|
SearchConfig object
|
33839b37
tangwang
属性值参与搜索:
|
186
|
|
be52af70
tangwang
first commit
|
187
|
Raises:
|
9f96d6f3
tangwang
短query不用语义搜索
|
188
|
ConfigurationError: If config file not found, invalid, or validation fails
|
be52af70
tangwang
first commit
|
189
|
"""
|
4d824a77
tangwang
所有租户共用一套统一配置.tena...
|
190
191
|
if not self.config_file.exists():
raise ConfigurationError(f"Configuration file not found: {self.config_file}")
|
33839b37
tangwang
属性值参与搜索:
|
192
|
|
be52af70
tangwang
first commit
|
193
|
try:
|
4d824a77
tangwang
所有租户共用一套统一配置.tena...
|
194
|
with open(self.config_file, 'r', encoding='utf-8') as f:
|
be52af70
tangwang
first commit
|
195
196
|
config_data = yaml.safe_load(f)
except yaml.YAMLError as e:
|
4d824a77
tangwang
所有租户共用一套统一配置.tena...
|
197
|
raise ConfigurationError(f"Invalid YAML in {self.config_file}: {e}")
|
33839b37
tangwang
属性值参与搜索:
|
198
|
|
9f96d6f3
tangwang
短query不用语义搜索
|
199
200
201
202
203
204
205
206
207
208
|
config = self._parse_config(config_data)
# Auto-validate configuration
if validate:
errors = self.validate_config(config)
if errors:
error_msg = "Configuration validation failed:\n" + "\n".join(f" - {err}" for err in errors)
raise ConfigurationError(error_msg)
return config
|
33839b37
tangwang
属性值参与搜索:
|
209
|
|
9cb7528e
tangwang
店匠体系数据的搜索:mock da...
|
210
211
|
def _parse_config(self, config_data: Dict[str, Any]) -> SearchConfig:
"""Parse configuration dictionary into SearchConfig object."""
|
33839b37
tangwang
属性值参与搜索:
|
212
213
214
215
216
217
|
# Parse field_boosts
field_boosts = config_data.get("field_boosts", {})
if not isinstance(field_boosts, dict):
raise ConfigurationError("field_boosts must be a dictionary")
|
be52af70
tangwang
first commit
|
218
219
220
221
|
# Parse indexes
indexes = []
for index_data in config_data.get("indexes", []):
indexes.append(self._parse_index_config(index_data))
|
33839b37
tangwang
属性值参与搜索:
|
222
|
|
be52af70
tangwang
first commit
|
223
224
|
# Parse query config
query_config_data = config_data.get("query_config", {})
|
a77693fe
tangwang
调整配置目录结构
|
225
|
|
33839b37
tangwang
属性值参与搜索:
|
226
|
# Load rewrite dictionary from external file
|
4d824a77
tangwang
所有租户共用一套统一配置.tena...
|
227
|
rewrite_dictionary = self._load_rewrite_dictionary()
|
a77693fe
tangwang
调整配置目录结构
|
228
|
|
9f96d6f3
tangwang
短query不用语义搜索
|
229
230
231
|
# Parse embedding disable thresholds
embedding_thresholds = query_config_data.get("embedding_disable_thresholds", {})
|
be52af70
tangwang
first commit
|
232
|
query_config = QueryConfig(
|
9f96d6f3
tangwang
短query不用语义搜索
|
233
|
supported_languages=query_config_data.get("supported_languages") or ["zh", "en"],
|
2739b281
tangwang
多语言索引调整
|
234
|
default_language=query_config_data.get("default_language") or "en",
|
be52af70
tangwang
first commit
|
235
236
|
enable_text_embedding=query_config_data.get("enable_text_embedding", True),
enable_query_rewrite=query_config_data.get("enable_query_rewrite", True),
|
a77693fe
tangwang
调整配置目录结构
|
237
|
rewrite_dictionary=rewrite_dictionary,
|
be52af70
tangwang
first commit
|
238
|
translation_api_key=query_config_data.get("translation_api_key"),
|
9f96d6f3
tangwang
短query不用语义搜索
|
239
|
translation_service=query_config_data.get("translation_service") or "deepl",
|
522a3964
tangwang
多语言搜索翻译的优化(deepL添...
|
240
|
translation_glossary_id=query_config_data.get("translation_glossary_id"),
|
9f96d6f3
tangwang
短query不用语义搜索
|
241
|
translation_context=query_config_data.get("translation_context") or "e-commerce product search",
|
0064e946
tangwang
feat: 增量索引服务、租户配置...
|
242
|
translation_prompts=query_config_data.get("translation_prompts", {}),
|
325eec03
tangwang
1. 日志、配置基础设施,使用优化
|
243
|
text_embedding_field=query_config_data.get("text_embedding_field"),
|
cd3799c6
tangwang
tenant2 1w测试数据 mo...
|
244
|
image_embedding_field=query_config_data.get("image_embedding_field"),
|
9f96d6f3
tangwang
短query不用语义搜索
|
245
246
|
embedding_disable_chinese_char_limit=embedding_thresholds.get("chinese_char_limit", 4),
embedding_disable_english_word_limit=embedding_thresholds.get("english_word_limit", 3),
|
70dab99f
tangwang
add logs
|
247
248
|
source_fields=query_config_data.get("source_fields"),
knn_boost=query_config_data.get("knn_boost", 0.25)
|
be52af70
tangwang
first commit
|
249
|
)
|
33839b37
tangwang
属性值参与搜索:
|
250
|
|
be52af70
tangwang
first commit
|
251
252
253
|
# Parse ranking config
ranking_data = config_data.get("ranking", {})
ranking = RankingConfig(
|
9f96d6f3
tangwang
短query不用语义搜索
|
254
255
|
expression=ranking_data.get("expression") or "bm25() + 0.2*text_embedding_relevance()",
description=ranking_data.get("description") or "Default BM25 + text embedding ranking"
|
be52af70
tangwang
first commit
|
256
|
)
|
33839b37
tangwang
属性值参与搜索:
|
257
|
|
a00c3672
tangwang
feat: Function Sc...
|
258
259
260
|
# Parse Function Score configuration
fs_data = config_data.get("function_score", {})
function_score = FunctionScoreConfig(
|
9f96d6f3
tangwang
短query不用语义搜索
|
261
262
263
|
score_mode=fs_data.get("score_mode") or "sum",
boost_mode=fs_data.get("boost_mode") or "multiply",
functions=fs_data.get("functions") or []
|
a00c3672
tangwang
feat: Function Sc...
|
264
|
)
|
33839b37
tangwang
属性值参与搜索:
|
265
|
|
a00c3672
tangwang
feat: Function Sc...
|
266
267
268
269
|
# Parse Rerank configuration
rerank_data = config_data.get("rerank", {})
rerank = RerankConfig(
enabled=rerank_data.get("enabled", False),
|
9f96d6f3
tangwang
短query不用语义搜索
|
270
271
|
expression=rerank_data.get("expression") or "",
description=rerank_data.get("description") or ""
|
a00c3672
tangwang
feat: Function Sc...
|
272
|
)
|
33839b37
tangwang
属性值参与搜索:
|
273
|
|
be52af70
tangwang
first commit
|
274
275
276
277
278
|
# Parse SPU config
spu_data = config_data.get("spu_config", {})
spu_config = SPUConfig(
enabled=spu_data.get("enabled", False),
spu_field=spu_data.get("spu_field"),
|
33839b37
tangwang
属性值参与搜索:
|
279
280
|
inner_hits_size=spu_data.get("inner_hits_size", 3),
searchable_option_dimensions=spu_data.get("searchable_option_dimensions", ['option1', 'option2', 'option3'])
|
be52af70
tangwang
first commit
|
281
|
)
|
33839b37
tangwang
属性值参与搜索:
|
282
|
|
0064e946
tangwang
feat: 增量索引服务、租户配置...
|
283
284
285
|
# Parse tenant config
tenant_config_data = config_data.get("tenant_config", {})
|
9cb7528e
tangwang
店匠体系数据的搜索:mock da...
|
286
|
return SearchConfig(
|
33839b37
tangwang
属性值参与搜索:
|
287
|
field_boosts=field_boosts,
|
be52af70
tangwang
first commit
|
288
289
290
|
indexes=indexes,
query_config=query_config,
ranking=ranking,
|
a00c3672
tangwang
feat: Function Sc...
|
291
292
|
function_score=function_score,
rerank=rerank,
|
be52af70
tangwang
first commit
|
293
|
spu_config=spu_config,
|
0064e946
tangwang
feat: 增量索引服务、租户配置...
|
294
|
tenant_config=tenant_config_data,
|
4d824a77
tangwang
所有租户共用一套统一配置.tena...
|
295
|
es_index_name=config_data.get("es_index_name", "search_products"),
|
be52af70
tangwang
first commit
|
296
297
|
es_settings=config_data.get("es_settings", {})
)
|
33839b37
tangwang
属性值参与搜索:
|
298
|
|
be52af70
tangwang
first commit
|
299
300
|
def _parse_index_config(self, index_data: Dict[str, Any]) -> IndexConfig:
"""Parse index configuration from dictionary."""
|
be52af70
tangwang
first commit
|
301
302
303
|
return IndexConfig(
name=index_data["name"],
label=index_data.get("label", index_data["name"]),
|
33839b37
tangwang
属性值参与搜索:
|
304
|
fields=index_data.get("fields", []),
|
be52af70
tangwang
first commit
|
305
|
boost=index_data.get("boost", 1.0),
|
33839b37
tangwang
属性值参与搜索:
|
306
|
example=index_data.get("example")
|
be52af70
tangwang
first commit
|
307
|
)
|
33839b37
tangwang
属性值参与搜索:
|
308
|
|
9cb7528e
tangwang
店匠体系数据的搜索:mock da...
|
309
|
def validate_config(self, config: SearchConfig) -> List[str]:
|
be52af70
tangwang
first commit
|
310
|
"""
|
33839b37
tangwang
属性值参与搜索:
|
311
312
|
Validate configuration for common errors.
|
be52af70
tangwang
first commit
|
313
|
Args:
|
33839b37
tangwang
属性值参与搜索:
|
314
315
|
config: SearchConfig to validate
|
be52af70
tangwang
first commit
|
316
|
Returns:
|
33839b37
tangwang
属性值参与搜索:
|
317
|
List of error messages (empty if valid)
|
be52af70
tangwang
first commit
|
318
319
|
"""
errors = []
|
b926f678
tangwang
多语言查询
|
320
|
|
33839b37
tangwang
属性值参与搜索:
|
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
|
# Validate es_index_name
if not config.es_index_name:
errors.append("es_index_name is required")
# Validate field_boosts
if not config.field_boosts:
errors.append("field_boosts is empty")
for field_name, boost in config.field_boosts.items():
if not isinstance(boost, (int, float)):
errors.append(f"field_boosts['{field_name}']: boost must be a number, got {type(boost).__name__}")
elif boost < 0:
errors.append(f"field_boosts['{field_name}']: boost must be non-negative")
# Validate indexes
if not config.indexes:
errors.append("At least one index domain must be defined")
index_names = set()
|
be52af70
tangwang
first commit
|
340
|
for index in config.indexes:
|
33839b37
tangwang
属性值参与搜索:
|
341
342
343
344
|
# Check for duplicate index names
if index.name in index_names:
errors.append(f"Duplicate index name: {index.name}")
index_names.add(index.name)
|
b926f678
tangwang
多语言查询
|
345
|
|
33839b37
tangwang
属性值参与搜索:
|
346
347
348
349
|
# Validate fields in index
if not index.fields:
errors.append(f"Index '{index.name}': fields list is empty")
|
be52af70
tangwang
first commit
|
350
351
352
353
|
# Validate SPU config
if config.spu_config.enabled:
if not config.spu_config.spu_field:
errors.append("SPU aggregation enabled but no spu_field specified")
|
33839b37
tangwang
属性值参与搜索:
|
354
355
356
357
358
359
360
361
362
363
364
|
# Validate query config
if not config.query_config.supported_languages:
errors.append("At least one supported language must be specified")
if config.query_config.default_language not in config.query_config.supported_languages:
errors.append(
f"Default language '{config.query_config.default_language}' "
f"not in supported languages: {config.query_config.supported_languages}"
)
|
be52af70
tangwang
first commit
|
365
|
return errors
|
33839b37
tangwang
属性值参与搜索:
|
366
367
368
|
def to_dict(self, config: SearchConfig) -> Dict[str, Any]:
"""Convert SearchConfig to dictionary representation."""
|
a77693fe
tangwang
调整配置目录结构
|
369
|
|
33839b37
tangwang
属性值参与搜索:
|
370
|
# Build query_config dict
|
9f96d6f3
tangwang
短query不用语义搜索
|
371
372
373
|
query_config_dict = {
"supported_languages": config.query_config.supported_languages,
"default_language": config.query_config.default_language,
|
9f96d6f3
tangwang
短query不用语义搜索
|
374
375
376
|
"enable_text_embedding": config.query_config.enable_text_embedding,
"enable_query_rewrite": config.query_config.enable_query_rewrite,
"translation_service": config.query_config.translation_service,
|
33839b37
tangwang
属性值参与搜索:
|
377
378
379
|
"text_embedding_field": config.query_config.text_embedding_field,
"image_embedding_field": config.query_config.image_embedding_field,
"embedding_disable_thresholds": {
|
9f96d6f3
tangwang
短query不用语义搜索
|
380
381
|
"chinese_char_limit": config.query_config.embedding_disable_chinese_char_limit,
"english_word_limit": config.query_config.embedding_disable_english_word_limit
|
33839b37
tangwang
属性值参与搜索:
|
382
383
384
|
},
"source_fields": config.query_config.source_fields
}
|
9f96d6f3
tangwang
短query不用语义搜索
|
385
|
|
33839b37
tangwang
属性值参与搜索:
|
386
|
return {
|
be52af70
tangwang
first commit
|
387
388
|
"es_index_name": config.es_index_name,
"es_settings": config.es_settings,
|
33839b37
tangwang
属性值参与搜索:
|
389
|
"field_boosts": config.field_boosts,
|
be52af70
tangwang
first commit
|
390
|
"indexes": [self._index_to_dict(index) for index in config.indexes],
|
9f96d6f3
tangwang
短query不用语义搜索
|
391
|
"query_config": query_config_dict,
|
be52af70
tangwang
first commit
|
392
393
394
395
|
"ranking": {
"expression": config.ranking.expression,
"description": config.ranking.description
},
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
396
397
398
399
400
401
402
403
404
405
|
"function_score": {
"score_mode": config.function_score.score_mode,
"boost_mode": config.function_score.boost_mode,
"functions": config.function_score.functions
},
"rerank": {
"enabled": config.rerank.enabled,
"expression": config.rerank.expression,
"description": config.rerank.description
},
|
be52af70
tangwang
first commit
|
406
407
408
|
"spu_config": {
"enabled": config.spu_config.enabled,
"spu_field": config.spu_config.spu_field,
|
33839b37
tangwang
属性值参与搜索:
|
409
410
|
"inner_hits_size": config.spu_config.inner_hits_size,
"searchable_option_dimensions": config.spu_config.searchable_option_dimensions
|
be52af70
tangwang
first commit
|
411
412
|
}
}
|
a77693fe
tangwang
调整配置目录结构
|
413
|
|
be52af70
tangwang
first commit
|
414
|
def _index_to_dict(self, index: IndexConfig) -> Dict[str, Any]:
|
33839b37
tangwang
属性值参与搜索:
|
415
|
"""Convert IndexConfig to dictionary."""
|
b926f678
tangwang
多语言查询
|
416
|
result = {
|
be52af70
tangwang
first commit
|
417
418
419
|
"name": index.name,
"label": index.label,
"fields": index.fields,
|
33839b37
tangwang
属性值参与搜索:
|
420
|
"boost": index.boost
|
b926f678
tangwang
多语言查询
|
421
|
}
|
9f96d6f3
tangwang
短query不用语义搜索
|
422
|
|
9f96d6f3
tangwang
短query不用语义搜索
|
423
424
|
if index.example:
result["example"] = index.example
|
33839b37
tangwang
属性值参与搜索:
|
425
426
427
|
return result
|
b926f678
tangwang
多语言查询
|
428
|
|
33839b37
tangwang
属性值参与搜索:
|
429
430
431
432
433
434
435
436
437
438
439
440
|
def load_tenant_config(tenant_id: Optional[str] = None) -> SearchConfig:
"""
Load tenant configuration (backward compatibility wrapper).
Args:
tenant_id: Ignored (kept for backward compatibility)
Returns:
SearchConfig loaded from config/config.yaml
"""
loader = ConfigLoader()
return loader.load_config()
|