"""Configuration helper functions for dynamic multi-language search fields.""" from typing import Dict, List from .config_loader import SearchConfig def _format_field_with_boost(field_name: str, boost: float) -> str: if abs(float(boost) - 1.0) < 1e-9: return field_name return f"{field_name}^{boost}" def _get_boost(config: SearchConfig, base_field: str, language: str = "") -> float: lang = (language or "").strip().lower() if lang: lang_key = f"{base_field}.{lang}" if lang_key in config.field_boosts: return float(config.field_boosts[lang_key]) if base_field in config.field_boosts: return float(config.field_boosts[base_field]) return 1.0 def get_match_fields_for_index(config: SearchConfig, index_name: str = "default") -> List[str]: """ Deprecated compatibility wrapper. `indexes` is no longer used by runtime query building. This function now returns dynamic match fields for the default language based on query_config.search_fields. """ del index_name lang = (config.query_config.default_language or "en").strip().lower() match_fields: List[str] = [] for base_field in config.query_config.multilingual_fields: field_name = f"{base_field}.{lang}" match_fields.append(_format_field_with_boost(field_name, _get_boost(config, base_field, lang))) for shared_field in config.query_config.shared_fields: match_fields.append(_format_field_with_boost(shared_field, _get_boost(config, shared_field))) return match_fields def get_domain_fields(config: SearchConfig) -> Dict[str, List[str]]: """ Get dynamic domain fields for compatibility with old diagnostics endpoints. Returns: A single `default` domain entry generated from dynamic search_fields. """ return {"default": get_match_fields_for_index(config)}