Files
MtoRagSystem/config/retriex/commerce.yaml
2026-05-03 19:32:18 +02:00

377 lines
10 KiB
YAML

# 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: '|'