optimize retrieval

This commit is contained in:
team 1
2026-04-23 15:47:53 +02:00
parent 8a31e99669
commit 87417febf4
13 changed files with 2093 additions and 287 deletions

View File

@@ -12,27 +12,48 @@ final class CommerceIntentConfig
'shop',
'alle',
'preis',
'preise',
'kunde',
'online',
'produkt',
'produkte',
'artikel',
'sku',
'kaufen',
'kostet',
'kosten',
'verfügbarkeit',
'verfuegbarkeit',
// Search / product discovery signals
'suche',
'such',
'finde',
'finden',
'welche',
'welcher',
'welches',
// Product-type signals for technical/commercial requests
// Device / system signals
'analysegerät',
'analysegeraet',
'analysegeräte',
'analysegeraete',
'messgerät',
'messgeraet',
'messgeräte',
'messgeraete',
'gerät',
'geraet',
'geräte',
'geraete',
'analysator',
'analysatoren',
'analyzer',
'system',
'systeme',
'anlage',
'anlagen',
];
}
@@ -46,6 +67,8 @@ final class CommerceIntentConfig
'geeignet',
'empfiehl',
'empfehl',
'vergleich',
'vergleichen',
];
}
@@ -57,6 +80,7 @@ final class CommerceIntentConfig
'eur',
'teuer',
'preis',
'preise',
'kosten',
'kostet',
];

View File

@@ -1,63 +1,94 @@
<?php
declare(strict_types=1);
namespace App\Config;
class CommerceQueryParserConfig
final readonly class CommerceQueryParserConfig
{
public function getKnownBrands(): array
{
return [
'heyl',
'horiba',
'neomeris'
];
/**
* @param string[] $knownBrands
* @param string[] $phrasesToRemove
* @param string[] $filterSearchTokensPattern
* @param string[] $referenceOnlyTokens
*/
public function __construct(
private array $knownBrands = [],
private array $phrasesToRemove = [],
private array $filterSearchTokensPattern = [],
private array $referenceOnlyTokens = [],
) {
}
/**
* @return string[]
*/
public function getKnownBrands(): array
{
return $this->knownBrands;
}
/**
* @return string[]
*/
public function getPhrasesToRemove(): array
{
return [
'ich suche',
'suche',
'habt ihr',
'gibt es',
'zeige mir',
'welches gerät',
'welche gerät',
'welches modell',
'welches ist besser',
'welches ist am besten',
'alternative',
'alternativen',
];
return $this->phrasesToRemove;
}
public function getHistoryContextPattern(): string
{
return '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';
return 'auch|noch|nochmal|dazu|wie oben|wie zuvor|ähnlich|aehnlich|stattdessen|alternative|alternativ|gerät|geraet|das gerät|das geraet|dieses gerät|dieses geraet|das modell|dieses modell|dafür|dafuer|davon|preis|preise|preis dazu|preis dafür|preis dafuer|preis zum gerät|preis zum geraet|was kostet das|was kostet das gerät|was kostet das geraet|und der preis|kosten|verfügbarkeit|verfuegbarkeit|link dazu|shop|bitte';
}
public function getReferenceFollowUpPattern(): string
{
return 'preis|preise|preis dazu|preis dafür|preis dafuer|preis zum gerät|preis zum geraet|was kostet das|was kostet das gerät|was kostet das geraet|gerät|geraet|das gerät|das geraet|dieses gerät|dieses geraet|das modell|dieses modell|dafür|dafuer|davon|verfügbarkeit|verfuegbarkeit|link dazu|shop|bitte';
}
/**
* @return string[]
*/
public function getFilterSearchTokensPattern(): array
{
return $this->filterSearchTokensPattern;
}
/**
* @return string[]
*/
public function getReferenceOnlyTokens(): array
{
if ($this->referenceOnlyTokens !== []) {
return $this->referenceOnlyTokens;
}
return [
'auch',
'noch',
'nochmal',
'zusätzlich',
'preis',
'preise',
'kosten',
'kostet',
'gerät',
'geraet',
'modell',
'produkt',
'artikel',
'dafür',
'dafuer',
'dazu',
'davon',
'stattdessen',
'verfügbarkeit',
'verfuegbarkeit',
'shop',
'link',
'zum',
'zur',
'das',
'dieses',
'den',
'dem',
'bitte',
'gern',
'gerne',
'zeige',
'zeig',
'such',
'suche',
'finde',
'find',
'mir',
'mal',
'von',
'und',
];
}
}

View File

@@ -1,46 +1,78 @@
<?php
declare(strict_types=1);
namespace App\Config;
class ShopServiceConfig
final class ShopServiceConfig
{
public const DEVICE_QUERY_KEYWORDS = [
'analysegerät',
'analysegeraet',
'analysegeräte',
'analysegeraete',
'messgerät',
'messgeraet',
'messgeräte',
'messgeraete',
'analysator',
'analysatoren',
'analyzer',
'gerät',
'geraet',
'geräte',
'geraete',
'monitor',
'monitore',
'controller',
'controller',
'gerät für',
'geraet fuer',
'geräte für',
'geraete fuer',
'system',
'systeme',
'anlage',
'anlagen',
];
public const ACCESSORY_QUERY_KEYWORDS = [
'zubehör',
'zubehor',
'reagenz',
'reagenzien',
'reagent',
'indikator',
'indikatoren',
'indicator',
'kit',
'set',
'ersatz',
'ersatzteil',
'ersatzteile',
'verbrauchsmaterial',
'consumable',
'dazu',
'passend',
'passende',
'passendes',
'nachfüll',
'nachfuell',
'refill',
'filter',
'pumpenkopf',
'motorblock',
'service set',
'serviceset',
'service-set',
];
public const ACCESSORY_PRODUCT_KEYWORDS = [
'reagenz',
'reagenzien',
'reagent',
'indikator',
'indikatoren',
'indicator',
'kit',
'set',
@@ -49,6 +81,8 @@ class ShopServiceConfig
'zubehör',
'zubehor',
'ersatz',
'ersatzteil',
'ersatzteile',
'nachfüll',
'nachfuell',
'refill',
@@ -57,22 +91,44 @@ class ShopServiceConfig
'solution',
'teststreifen',
'test strip',
'filter',
'pumpenkopf',
'motorblock',
'service set',
'serviceset',
'service-set',
];
public const DEVICE_PRODUCT_KEYWORDS = [
'analysegerät',
'analysegeraet',
'analysegeräte',
'analysegeraete',
'messgerät',
'messgeraet',
'messgeräte',
'messgeraete',
'analysator',
'analysatoren',
'analyzer',
'monitor',
'monitore',
'controller',
'online-analysator',
'online analysator',
'online-analysegerät',
'online analysegeraet',
'online-analysegeräte',
'online analysegeraete',
'online analyzer',
'online monitor',
'system',
'systeme',
'anlage',
'anlagen',
'gerät',
'geraet',
'geräte',
'geraete',
];
}