363 lines
10 KiB
YAML
363 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
|
|
|
|
filter_search_tokens:
|
|
- auch
|
|
- noch
|
|
- nochmal
|
|
- zusätzlich
|
|
- dazu
|
|
- davon
|
|
- stattdessen
|
|
- bitte
|
|
- gern
|
|
- gerne
|
|
- zeige
|
|
- zeig
|
|
- such
|
|
- suche
|
|
- finde
|
|
- find
|
|
- mir
|
|
- mal
|
|
- von
|
|
- im
|
|
- in
|
|
- für
|
|
- fuer
|
|
- welche
|
|
- welcher
|
|
- welches
|
|
- welchen
|
|
- sind
|
|
- 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
|
|
- kpstet
|
|
- ksotet
|
|
- kosten
|
|
- ua
|
|
- also
|
|
- gut
|
|
- gute
|
|
- guten
|
|
- guter
|
|
- gutes
|
|
- passen
|
|
- passend
|
|
|
|
search_control_tokens:
|
|
- shop
|
|
- store
|
|
- produkt
|
|
- produkte
|
|
- artikel
|
|
- kaufen
|
|
- kaufe
|
|
- bestellen
|
|
- bestelle
|
|
- online
|
|
|
|
search_token_corrections:
|
|
siene: seine
|
|
sienen: seinen
|
|
siener: seiner
|
|
sienem: seinem
|
|
sienes: seines
|
|
indicatoren: indikatoren
|
|
schwinnbad: schwimmbad
|
|
schwimbad: schwimmbad
|
|
kpstet: kostet
|
|
ksotet: kostet
|
|
|
|
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: '|'
|