# Commerce / Shopware Store API configuration. # The existing Commerce and Shopware services stay unchanged; these values only centralize wiring. parameters: retriex.commerce.enabled: true retriex.commerce.max_shop_results: '%env(SHOPWARE_STORE_API_MAX_RESULT)%' retriex.commerce.shop_timeout: 15 retriex.commerce.store_api_base_url: '%env(SHOPWARE_STORE_API_BASE_URL)%' retriex.commerce.sales_channel_access_key: '%env(SHOPWARE_SALES_CHANNEL_ACCESS_KEY)%' retriex.commerce.search_repair.enabled: true retriex.commerce.search_repair.max_queries: 2 retriex.commerce.search_repair.min_primary_results_without_repair: 2 # Commerce query parser configuration. # YAML is the only operative source of truth; PHP must not contain parser defaults. retriex.commerce_query.config: known_brands: - heyl - horiba - neomeris phrases_to_remove: - ich suche - suche - habt ihr - gibt es - gebe mir - gib mir - zeige mir - welches gerät - welche gerät - welches modell - welches ist besser - welches ist am besten - alternative - alternativen - unter anderem - u a - welche - welcher - welches - welchen - sind - ist - geeignet - geeigent - verfügbarkeit - verfuegbarkeit - empfiehl - antwort - kurze - ich filter_search_tokens: - auch - noch - nochmal - zusätzlich - dazu - davon - stattdessen - bitte - preiswerte - gern - lösung - eine - größer - würde - gerne - welchem - kann - mit - mein - größer - zeige - zeig - such - suche - finde - find - mir - mal - von - im - in - für - fuer - welche - welcher - welches - welchen - sind - zur - ist - geeignet - geeigent - verfügbarkeit - verfuegbarkeit - prüfe - pruefe - den - die - das - der - dem - des - und - oder - sowie - seine - seinen - seiner - seinem - seines - siene - sienen - siener - sienem - sienes - gebe - gib - nenne - nenn - preis - preise - preisen - kostet - kosten - ua - ein - also - gut - gute - guten - guter - gutes - passen - passend - was search_control_tokens: - shop - store - produkt - produkte - artikel - kaufen - kaufe - bestellen - bestelle - online - suche search_token_corrections: siene: seine sienen: seinen siener: seiner sienem: seinem sienes: seines indicatoren: indikatoren schwinnbad: schwimmbad schwimbad: schwimmbad search_token_canonical_map: indikatoren: indikator indicators: indikator indicator: indikator reagenzien: reagenz reagents: reagenz reagent: reagenz produkte: produkt semantic_shop_search_tokens: - indikator - indicator - reagenz - reagent - zubehör - zubehor - ersatzteil - anschlusskabel - kabel - sensorkabel - elektrodenkabel - verbrauchsmaterial - chemie - indikatorchemie - reagenzchemie - kit - set - filter - pumpe - pumpenkopf - motorblock - lösung - loesung - solution - teststreifen - gerät - geraet - messgerät - messgeraet - analysegerät - analysegeraet - analysator - monitor - controller - system normalization: search: ['€'] replace: [' euro '] text: trim_characters: - space - tab - lf - cr - nul - vertical_tab - '-' - '.' - ',' limits: min_search_token_length: 1 min_direct_product_token_length: 1 direct_product_max_tokens: 4 model_context_token_window: 4 min_meaningful_alpha_token_length: 2 max_shop_search_tokens: 6 patterns: history_context: 'chat|auch|noch|nochmal|zusätzlich|dazu|davon|stattdessen|alternative|alternativen|größer|groesser|kleiner|gleich(?:e|en|er|es)?|derselbe|dieselbe|dasselbe|wie oben|wie zuvor|wie gehabt' history_context_value_template: '/\b({fragment})\b/u' prompt_sanitize: '/[^\p{L}\p{N}\s.,\-]/u' whitespace_collapse: '/\s+/u' whitespace_split: '/\s+/u' history_question: '/^Question:\s*(.+)$/m' price_between: '/\bzwischen\s+(\d+(?:[.,]\d+)?)\s+und\s+(\d+(?:[.,]\d+)?)\s+euro\b/u' price_max: '/\b(?:unter|bis|max(?:imal)?)\s+(\d+(?:[.,]\d+)?)\s+euro\b/u' price_min: '/\b(?:ab|mindestens|min)\s+(\d+(?:[.,]\d+)?)\s+euro\b/u' price_removal_between: '/\bzwischen\s+\d+(?:[.,]\d+)?\s+und\s+\d+(?:[.,]\d+)?\s*euro\b/u' price_removal_minmax: '/\b(?:unter|bis|max(?:imal)?|ab|mindestens|min)\s+\d+(?:[.,]\d+)?\s*euro\b/u' price_removal_intent_template: '/\b(?:{price_pattern})\b/u' direct_product_digit: '/\d/u' model_like: '/\b[a-zäöüß][a-zäöüß®\-]*(?:\s+[a-zäöüß][a-zäöüß®\-]*){0,2}\s+\d{2,5}[a-z0-9\-]*\b/u' accessory_like: '/\b(?:indikator|indicator|reagenz|reagent|kit|set)\s+\d{1,5}[a-z0-9\-]*\b/u' contains_digit: '/\d/u' model_number_token: '/^(?:\d{2,5}[a-z0-9\-]*|[a-z]{1,6}\d{1,5}[a-z0-9\-]*)$/u' model_context_token: '/^[\p{L}][\p{L}0-9®\-]{2,}$/u' model_suffix_token: '/^[a-z]{1,4}\d{0,3}$/u' instruction_or_presentation_token: '/^(?:zeig(?:e)?|such(?:e)?|find(?:e)?|gib|gebe|nenn(?:e)?|liefer(?:e)?|erstelle?|mach(?:e)?|brauch(?:e)?|will|möchte|moechte|hätte|haette|kannst|bitte|mal|alle|alles|komplett|vollständig|vollstaendig|gesamt|ganze|ganzen|liste|listung|auflistung|tabelle|tabellarisch|übersicht|uebersicht|anzeigen?|ausgeben?|darstellen?|antwort(?:e)?|erklär(?:e)?|erklaer(?:e)?|info|infos|informationen|dazu|hierzu|damit|davon|an|als|mit|ohne|inkl|inklusive|also|gut|gute|guten|guter|gutes|passend|passen)$/u' measurement_value_token: '/^\d+[.,]\d+$/u' exact_token_removal_template: '/\b{token}\b/u' brand_part_of_model_template: '/\b{brand}\s+\d{2,5}[a-z0-9\-]*\b/u' # Commerce reference resolver configuration. # YAML is the only operative source of truth for conversation product and focus-term patterns. retriex.commerce_reference_resolver.config: conversation_product_patterns: - '/\b(Testomat\s+2000\s+THCL)\b/ui' - '/\b(Testomat\s+808)\b/ui' - '/\b(Testomat\s+EVO\s+TH)\b/ui' - '/\b(Testomat\s+EVO\s+CALC)\b/ui' - '/\b(Testomat\s+ECO\s+PLUS)\b/ui' - '/\b(Testomat\s+ECO\s+C)\b/ui' - '/\b(Testomat\s+ECO)\b/ui' - '/\b(Testomat\s+LAB\s+CL)\b/ui' - '/\b(Testomat\s+LAB\s+MONO)\b/ui' - '/\b(Testomat\s+2000)\b/ui' focus_term_patterns: indikator: '/\bindikator(?:en)?\b/u' indikatoren: '/\bindikator(?:en)?\b/u' reagenz: '/\breagenz(?:ien)?\b/u' reagenzien: '/\breagenz(?:ien)?\b/u' zubehör: '/\bzubeh[oö]r\b/u' ersatzteil: '/\bersatzteile?\b/u' ersatzteile: '/\bersatzteile?\b/u' service-set: '/\bservice(?:\s|-)?set\b/u' filter: '/\bfilter\b/u' pumpenkopf: '/\bpumpenkopf\b/u' motorblock: '/\bmotorblock\b/u' mehrwertpaket: '/\bmehrwertpaket\b/u' neotecmaster: '/\bneotecmaster\b/u' # Shop matching and presentation configuration. # YAML is the only operative source of truth; PHP must not contain shop matching defaults. retriex.shop_matching.config: top_product_log_limit: 3 # Shop role and focus lists are resolved from config/retriex/vocabulary.yaml. # Direct list overrides may still be added to this parameter if a project needs them. vocabulary_views: device_focus_keywords: shop.device_focus accessory_focus_keywords: shop.accessory_focus device_query_keywords: shop.device_query accessory_query_keywords: shop.accessory_query accessory_product_keywords: shop.accessory_product device_product_keywords: shop.device_product vocabulary_maps: accessory_focus_variant_map: shop.accessory_focus_variants role_guard: filter_accessory_products_for_device_queries: true keep_ambiguous_products_for_device_queries: true scores: exact_product_number_phrase: 160 exact_product_name_phrase: 90 exact_manufacturer_match: 40 brand_contained_in_name: 20 name_token_overlap_weight: 6 product_number_token_overlap_weight: 10 corpus_token_overlap_weight: 2 name_number_overlap_weight: 18 product_number_number_overlap_weight: 28 corpus_number_overlap_weight: 8 size_match: 12 availability_bonus: 1 device_query_device_product_bonus: 60 device_query_accessory_penalty: 120 accessory_query_accessory_product_bonus: 30 accessory_query_device_product_bonus: 10 patterns: contains_digit: '/\d/u' matching_cleanup: '/[^\p{L}\p{N}]+/u' whitespace_collapse: '/\s+/u' token_split: '/[^\p{L}\p{N}]+/u' padding: prefix: ' ' suffix: ' ' price: normalization_search: ['€', ' ', '.'] normalization_replace: ['', '', ''] decimals: 2 decimal_separator: ',' thousands_separator: '.' suffix: ' €' custom_fields: primary: migration_Backup_product_attr1 secondary: migration_Backup_product_attr2 use_cases: migration_Backup_product_attr4 languages: migration_Backup_product_attr5 text: primary_secondary_separator: ': ' use_cases_label: 'Einsatzgebiete: ' languages_label: 'Sprachen: ' custom_field_join_separator: ' | ' description: empty_line_pattern: '/^[ \t]*\R/m' whitespace_cleanup_pattern: '/[ \t]{2,}/' max_length: 1500 seo: relative_prefix: '/' highlight: available_label: Verfügbar unavailable_label: Nicht verfügbar product_number_prefix: 'Produktnummer: ' image: missing_placeholder: no-image deduplication: separator: '|'