Technische Release Notes NG 1.0.1

Neue Features

GEO-Suche

Neues Modul: Geo-Suche

Es gibt ein neues Modul namens Geo Suche. Dieses wird über den Parameter useGeo=true in den fff.properties aktiviert.  Die Geo Suche erlaubt es Produkte Läden zuzuordnen und die Produkte unterschiedlich zu ranken je nachdem wie weit der Suchende von den Läden entfernt ist. Ebenso ist es möglich ladenspezifische Werte zu den Produkten zu speichern (bspw. stock oder Ladenpreis) und die Produkte anhand dieser Informationen zu ranken. 

GEO-Suche in der Integrationsdokumentation siehe → hier.

GEO-Suche in der FACT-Finder Benutzeroberfläche siehe → hier

After Search Navigation (ASN)

Kategoriepfade können direkt angesteuert werden

Es wurde ein neuer optionaler SearchCallback hinzugefügt: GoToSelectedLevelOfClusteredFacetCallback.  Er kann nach dem letzten SearchCallback, welcher die Facetten bearbeitet, eingefügt werden. Er wird dafür sorgen, dass sich geclusterte Facetten nicht mehr wie Checkboxen verhalten, sondern, bis auf das unterste Level, immer das ausgewählte Level ansteuern.  Ein Beispiel: Es existiert ein Cluster X1, X2, X3. Befindet man sich auf dem Level von X3 und klickt dann auf X2, landet man ohne den Callback auf dem Level von X1. Mit dem Callback würde man die Produkte von X2 angezeigt bekommen. Weil es keinen Sinn machen würde, beim Klick auf X3 auf dem gleichen Level zu verweilen, verhält sich das unterste Level weiterhin wie eine Checkbox und wird beim Klick abgewählt. Der Nutzer sieht die Produkte von X2.  Der Callback bezieht sich normalerweise auf alle Channel und wird automatisch für Facetten angewandt, welche mit einem Feld assoziiert sind, welches CategoryPath als Feldtyp hat. Über die Callback-Konfiguration kann das Defaultverhalten deaktiviert werden. Mit inactiveChannels kann der Callback für spezifische Channel deaktiviert werden. useCategoryPathPerDefault ist der default true, kann aber auch auf false gestellt werden. In diesem Fall wird nur das Verhalten der Cluster-Facetten der definierten Felder angepasst. Die Felder können über die fieldNames-Property definiert werden. Eine Callback-Konfiguration könnte folgendermaßen aussehen

{

    "class": "de.factfinder.search.callbacks.GoToSelectedLevelOfClusteredFacetCallback",



    "config": {

        "inactiveChannels": [

            "channelWithOutThisCallback"

        ],

        "fieldNames": [

            "Kategorie",

            "Unterkategorie"

        ],

        "useCategoryPathPerDefault": "false"

    }

}

Search Behaviour

Parameter disableDeduplication und deduplicationField hinzugefügt

Es gibt zwei optionale Parameter für die Suche um die Deduplizierung für einen einzelnen Request zu beeinflussen.

  • disableDeduplication Falls im Channel standardmäßig die Deduplizierung aktiviert ist kann mit diesem Parameter in einem einzelnen Request die Deduplizierung ausgeschaltet werden. FACT-Finder liefert dann alle Varianten zurück.
  • deduplicationField Standardmäßig werden Varianten bezüglich ihrer Master-Id dedupliziert. Das heißt bei aktiver Deduplizierung wird nur eine Variante pro Master-Produkt zurück geliefert. Mit diesem Parameter kann ein zusätzliches Feld für die Deduplizierung bestimmt werden. Ist der Parameter gesetzt wird nur die erste Variante pro Feld-Wert erhalten. Die Deduplizierung nach Master-ID erfolgt zusätzlich als nachträglicher Schritt.

In NG wurde disableDeduplication in useDeduplication umbenannt und entsprechend ist die Funktionsweise genau umgekehrt zu verstehen.  

Suggest

Multi-Attributsfelder im Suggest wieder unterstützt

Es ist jetzt wieder möglich Multi-Attributsfelder für den Suggest Import zu verwenden.


Priorität der Suggestions soll aktivitätsabhängig gewertet werden

Es wurde ein neuer SuggestionProvider hinzugefügt, welcher eine Priorisierung der über ihn erstellten SearchTerm-Suggestions anhand von Trackinginteraktionen erlaubt.

Dieser Provider benötigt eine laufende Instanz des neuen Analytics und kann mit dem "alten" Analytics nicht betrieben werden.

Der Provider nimmt einige Settings entgegen:

<minSearchCount>2</minSearchCount>

<numberOfDaysToAnalyze>7</numberOfDaysToAnalyze>

<clickWeight>1.0</clickWeight>

<cartWeight>10.0</cartWeight>

<checkoutWeight>20.0</checkoutWeight>

<minInteractionsCount>5</minInteractionsCount>

<redirectCampaignBoost>0.2</redirectCampaignBoost>

Man kann definieren wie oft eine Searchquery mindestens aufgetreten sein muss und wie viele Interaktionen es zu dieser Query mindestens gegeben haben muss (Carts, Klicks und Checkouts), um als Empfehlung berücksichtigt zu werden. Weiterhin kann man den Zeitraum auswählen, für den Such- und Trackinglogs ausgewertet werden sollen.

Die Gewichte legen fest wie stark die einzelnen Interaktionen die Priorität der Empfehlung beeinflussen. Dabei wird das Gewicht mit der Anzahl der Events der entsprechenden Interaktion multipliziert. Der Einfluss von Carts, Klicks und Checkouts werden dann zur Priorität der Empfehlung addiert.

Des Weiteren können aktive, freigegebene Redirect Kampagnen die Priorität einer Empfehlung beeinflussen. Dafür kommen nur Kampagnen in Frage, bei denen alle Kriterien dem folgenden Muster entsprechen: SearchTerm equals <QUERY>.

Wobei QUERY dem Namen der Empfehlung entsprechen muss, um Auswirkung auf deren Priorität zu haben.

Falls es eine entsprechende Kampagne gibt, wird die Anzahl der Suchen mit der Query der Empfehlung mit dem redirectCampaignBoost-Setting multipliziert und zur Priorität hinzuaddiert. 


Neuer Suggesttyp: Query mit Kategoriepfad


Es wurde ein neuer SuggestionProvider hinzugefügt, welcher es möglich macht Suggestions mit automatisch gesetzten Filtern zu erzeugen (SuggestionWithFilterLogfileProvider).

Dieser Provider benötigt eine laufende Instanz des neuen Analytics und kann mit dem "alten" Analytics nicht betrieben werden.

Der Provider nimmt einige Settings entgegen:

<minSearchCount>2</minSearchCount>

<numberOfDaysToAnalyze>7</numberOfDaysToAnalyze>

<clickWeight>1.0</clickWeight> <cartWeight>10.0</cartWeight>

<checkoutWeight>20.0</checkoutWeight>

<minInteractionsCount>5</minInteractionsCount>

<maxNumberOfPairs>1</maxNumberOfPairs>

<couplingString>in</couplingString>

<idField>MasterId</idField>

<fields>

    <field id="67892c7a-3b49-44e9-b761-4d64cb15af6d" name="category1" />

    <field id="002bb410-6bbc-4bda-9257-0568a9acda73" name="CategoryPath" />

</fields>

Man kann definieren wie oft eine Suchquery mindestens aufgetreten sein muss und wie viele Interaktionen es zu dieser Query mindestens gegeben haben muss (Carts, Klicks und Checkouts), um als Empfehlung berücksichtigt zu werden. Weiterhin kann man den Zeitraum auswählen, für den Such- und Trackinglogs ausgewertet werden sollen.

Von den so gewonnenen Empfehlungen werden für die zugehörigen Suchanfragen die Produkte ermittelt. Also die Produkte, die für den Suchbegriff Interaktionen aufweisen.

Um die Produkte korrekt aus der Datenbank auslesen zu können, muss im idField der Name des Feldes hinterlegt werden, dessen Inhalt als Id für die Produkte im Tracking- und Searchlog verwendet wird.

Von allen gefundenen Produkten wird das Produkt ausgewählt, welches den höchsten Wert für den "Interaction-Score" erhält. Dieser berechnet sich aus den Klick-, Cart- und Checkout-Events für dieses Produkt. Die Anzahl der Events wird mit den in den Einstellungen angegebenen Gewichten multipliziert und dann zusammenaddiert.

Pro Suchwort werden Suchwort-Produkt-Paare gebildet. Die maximale Anzahl richtet sich nach dem maxNumberOfPairs Setting.  Für die festgelegten Felder werden die Werte der besten Produkte ausgelesen und diese als Filter zu dem Suchwort hinzugefügt und sind so in den SearchParams für die Empfehlung verfügbar.

Weitere Informationen sind in der config.xml.example für Suggest zu finden.

Operating

Neue Monitoring-Schnittstelle


Es wurde eine Monitoring-Schnittstelle erstellt. Unter manage/info.json bzw. manage/health.json können diverse Monitoring-relevante KPIs und Metriken geprüft werden.

Import

Handling von gleich benannten Feldern verändert


Ein Feld mit einem Namen, den bereits ein anderes Feld hat, wird nun beim Import und über die UpdateDeleteInsert-Schnittstelle ignoriert anstatt den Import des entsprechenden Records abzubrechen.

Dass es keine zwei Felder mit gleichem Namen geben darf, war bereits zuvor Bedingung. Leider konnte es vorkommen, dass virtuelle Felder erstellt wurden, deren Namen mit einem bereits vorhanden normalen oder virtuellen Feld mit anderem Quellfeld übereinstimmen, falls ein Attribute eines Multiattributfeldes einen entsprechenden Namen aufwies. In diesem Fall wurde der Import des Records abgebrochen.

Das entsprechende Feld wird jetzt ignoriert und eine Logmeldung ausgegeben sowie eine Fehlermeldung am Importergebnis hinterlegt. In einem solchen Fall sollte das Attribute umbenannt werden. 

Analysis

Anzahl Suchbegriffe im Excel-Report nun konfigurierbar


Die Anzahl der Suchbegriffe die der Excel What's Hot-Export zurück gibt, ist nun konfigurierbar über die fff.properties.

whatshotSearchTermAmount=500


Installation Assistant / Migrator

Deduplizierung nun einstellbar und deaktivierbar

Die Deduplizierung von Varianten kann nun auf der Ergebnis-Listing-Seite an- bzw. ausgeschaltet werden. Des Weiteren ist es dort möglich anzugeben wie Varianten sortiert werden sollen. Bei aktivierter Deduplizierung wird zu jedem Masterprodukt nur die erste Variante mit zurück geliefert. Bei deaktivierter Deduplizierung werden alle Varianten zurück geliefert. 


Die Anzahl an zurück gegebenen Varianten lässt sich, unabhängig von der Einstellung zur Deduplizierung für einen einzelnen Request überschreiben. Hierfür muss der Parameter maxCountVariants auf die gewünschte Anzahl an zurück gegebenen Varianten gesetzt werden. 

Campaign Manager

Kampagnenkriterien-Operator "dazwischen" implementiert


Es gibt einen neuen Operator für numerische Kriterien. InRange greift, wenn der zu vergleichende Wert innerhalb des definierten Intervalls liegt. Die Grenzen des Intervalls gelten dabei als Teil des Intervalls.

Distanz-Kriterium für Kampagnen

Für das Auslösen von Kampagnen kann nun auch die Distanz zwischen dem Suchenden und einem eingestellten Ort herangezogen werden. 


Es gibt ein neues Kriterium für Kampagnen namens Distanz. Dabei wird im Kriterium eine Position durch die Eingabe von Längen- und Breitengrad angeben. Das Kriterium fungiert dann wie ein normales numerisches Kriterium auf der Distanz, in Kilometern, zwischen dem Suchenden und der eingegebenen Position. Das Kriterium kann nur feuern, wenn die Position des Suchenden übermittelt wird. Die Position wird dabei durch die beiden neuen Suchparameter latitude und longitude übermittelt. 

UI: Management Interface

Notizfeld

Über die Benutzer Profilseite lässt sich ein Notizeditor aufrufen, mit dem eigene Notizen angelegt und bearbeitet werden können.

NG: Der Notizeditor ist nun von jeder Seite aus über den Header erreichbar. 


Die Notizen werden dabei verschlüsselt in der usermanagement_users.xml abgelegt.  Anmerkung: Die Notizen sind ausschließlich auf der Instanz abrufbar auf der sie erstellt wurden, da die usermanagement_users.xml nicht zwischen den Instanzen synchronisiert wird. 

Configuration

Option, um AutoRevert während Transaktion zu verhindern


Fortgeschrittene Nutzer haben nun die Möglichkeit das automatische Zurücksetzen von Änderungen bei Validierungsfehlern innerhalb einer Transaktion temporär zu deaktivieren. Dadurch ist es leichter möglich komplexere Änderungen durchzuführen, wie z.B. die Änderung der Feldrollen oder dem Umbenennen eines Facettenclusters. 

Sonstiges

Request Informationen im ProductCompareCallback verfügbar gemacht


Die ProductCompare Schnittstelle akzeptiert nun auch custom Parameter. Für die Nutzung hat sich das ProductCompareCallback Interface geändert. Die Methode ProductCompareCallback#beforeGetRecordsToCompare erhält nun neben der Suchkonfiguration und der Attribute-Map, eine Instanz der ProductCompareParameters. In diesem Objekt sind die Produkt-Ids, die zu vergleichen sind, enthalten ebenso wie das idsOnly-Flag und die custom Parameter. Die Methode gibt dann eine Instanz dieser Parameter zurück, die dann verwendet wird. 

Majority- und Threshold-Modi implementiert


Es gibt nun zwei weitere Modi, wie die Parent-Konfiguration im Channel-Wizard erstellt wird.

  • Threshold
  • Alle Einstellungen oder Einträge in Listen, die in mindestens X Quell-Channeln vorkommen, wandern in die Parent-Konfiguration. Alle anderen Einstellungen werden mit den Werten aus der Fallback-Konfiguration initialisiert. Der Schwellenwert X kann hierbei vom Nutzer angegeben werden.
  • Majority
  • Funktioniert prinzipiell wie der Threshold-Modus mit dem Unterschied, dass der Schwellenwert automatisch berechnet wird. Einstellungen müssen in mindestens der Hälfte der Quell-Channel vorkommen um in die Parent-Konfiguration zu wandern. Bei einer ungeraden Anzahl von Quell-Channeln wird der Schwellenwert aufgerundet. Bei 3 Quell-Channeln wäre der Schwellenwert bspw. 2.  

Authentifizierung für Monitoring-Schnittstelle eingeführt


Um Zugriff auf die Manage API zu erhalten wird nun die User-Rolle ApiManage oder der Scope manage benötigt. 

Aufwertung durch Ranking Rules ermöglichen

Mit Ranking Regeln können Produkte nun auch aufgewertet werden.

Verbesserungen / Änderungen

Automatic Search Optimisation (ASO)

FFAutomaticSearchOptimization-Feld entfernt


Das Feld FFAutomaticSearchOptimization wird nicht mehr genutzt und wurde entfernt. 

After Search Navigation (ASN)

Support für Regex-Facetten implementiert


Regex-Facetten werden nicht mehr anhand des Attributs erraten, sondern explizit mit einer Checkbox in der UI konfiguriert. 


Facet-ID entfernt


Die facetId Einstellung von Facetten wurde entfernt. Die Identifikation von Facetten erfolgt nun über den internen Namen der Facette. (Das ist nicht der displayName)

Der interne Name hängt vom Feld ab, das die Facette benutzt und wird folgendermaßen definiert:

  • Wenn ein Attribut definiert ist, ist der Grundname das Attribut. (Bei RegEx-Attributen ist dies das RegEx-Muster).
  • Ist kein Attribut definiert ist der Grundname der Feldname
  • Ist ein categoryPathLevel in der Facette definiert wird dieses an den Grundnamen angehängt, ansonsten ist der interne Name der Grundname.

Wie die facetId früher muss der interne Name der Facette eindeutig sein.

Der Tag parentFacetId in der Facetten-XML wird entsprechend in parentFacetName umbenannt. Die Referenzen werden beim Migrieren automatisch aktualisiert.

Ebenso werden Filter-Kriterien in Kampagnen, die Facetten referenzieren, entsprechend beim Migrieren aktualisiert. 

Cache

Suchcaching auf Ehcache umgebaut


Das Suchcaching wurde auf ehcache umgestellt. Das Caching kann dabei über eine xml Konfigurationsdatei konfiguriert werden. Der Pfad zu dieser Datei kann über cache.config in den fff.properties angegeben werden. Standardpfad ist APP_RESOURCES/conf/ehcache.xml. Ist diese Datei nicht vorhanden wird eine interne default Konfiguration verwendet.

In der Konfiguration wird dabei ein cacheTemplate definiert. FACT-Finder wird für jeden Channel einen einzelnen Cache auf Basis der Templates anlegen. Eine Beispielkonfiguration des Template könnte so aussehen:

        <ehcache:cache-template name="searchResult">


               <ehcache:key-type>java.lang.String</ehcache:key-type>
               <ehcache:value-type>de.factfinder.search.ResultWithTimestamp</ehcache:value-type>


               <ehcache:expiry>
                       <ehcache:tti unit="minutes">2</ehcache:tti>
               </ehcache:expiry>


               <ehcache:resources>
                       <ehcache:heap unit="entries">200</ehcache:heap>
                       <ehcache:disk unit="MB">500</ehcache:disk>
               </ehcache:resources>
        </ehcache:cache-template>

Der Name sowie die Definition des Key-Types und Value-Types dürfen nicht verändert werden.

expiry ist optional und gibt an ab wann ein Cache-Eintrag als veraltet gilt. Per default veralten Einträge nicht. Im vorliegenden Beispiel würden Eintrage veralten, wenn sie 2 Minuten lang nicht angefragt wurden (tti = time to idle).

Über resources lässt sich die maximale Größe des Cache einstellen, sowie die verschiedenen Schichten definieren.

Es gibt als erste Schicht immer einen Cache im Heap, der in der Anzahl seiner Einträge limitiert ist. Unten drunter gibt es die Persistenz des Cache auf Disk-Ebene, wobei hier die Speichergröße limitiert ist.

Hierbei ist zu beachten, dass diese Limits pro Cache gelten. Die Ressourcen werden nicht zwischen den Caches geteilt. Wird ein Cache also auf 500MB limitiert und es gibt 10 Channels so kann der gesamte Speicherverbrauch auf bis zu 5000MB ansteigen. Der Pfad, wo der Cache auf Platte persistiert wird, kann nicht mehr eingestellt werden. FF wird beim Start ein temporäres Verzeichnis für diesen Zweck anlegen. Zu erkennen ist ein solches Verzeichnis am ehcache- Präfix. Ist das Verzeichnis aktuell in Benutzung enthält es eine .lock Datei.

Der clearCache Job löscht alle nicht mehr benutzten Cache Verzeichnisse.

Weitere Details finden sich in der offiziellen Dokumentation von ehcache, sowie in einer example-config, die in den defaultResources liegt.


Verbesserung des Cache


Die Performance des Suchcache wurde verbessert.

Suggest

Umgang mit DeduplicateSuggestionsProcessor optimiert


Die optionale Priorisierung von Suggest-Typen hat nun Einfluss auf die letztendliche Sortierung der Suggest-Ergebnisse. 

Suggest-Performance verbessert


Die Suggestkonfiguration wird nicht mehr bei jedem Zugriff kopiert. Zusätzlich wird nicht mehr bei jedem Suggestkonfigurationszugriff auf die Platte zugegriffen. Die deepCopy Operation wird ab jetzt mittels Kryo statt plain-Java Serialisierung durchgeführt. 


Sortieren für Suggest


Die Standard Suggest Felder: name, hitCount, type und priority sind nun sortierbar.  An der SearchWithBlockResponse ist es nun möglich einzelne Felder je Suggest Typ sortierbar zu machen. Standardmäßig sind alle Attribute-Felder nicht sortierbar. Die Konfiguration sieht wie folgt aus:

<fields type="productName">

    <field name="products_price" sortable="true"/>

    <field name="category1" sortable="false"/>

</fields>

Suchstrategien implementiert


In der Suggest Such-Implementation SearchWithBlockResponse ist es nun möglich folgende Such-Strategien festzulegen: ARTICLE_NUMBER, STARTS_WITH, ENDS_WITH, STARTS_OR_ENDS_WITH_WORDWISE, EXACT, PHRASE und FUZZY. Verhalten und mögliche Parameter sind der config.xml.example zu entnehmen. 

minQueryLength, maxQueryLength, minWordCount, maxWordCount implementiert


An den Such-Strategien in der Such-Implementation SearchWithBlockResponse kann man nun folgende Bedingungen festlegen:

  • minWordCount - Der Query darf mindestens x Wörter enthalten.
  • maxWordCount - Der Query darf maximal x Wörter enthalten.
  • minQueryLength - Der Query darf mindestens eine Länge von x haben.
  • maxQueryLength - Der Query darf maximal eine Länge von x haben.  Wenn eine oder mehrere Bedingungen nicht zutreffen wird die Strategie übersprungen.

Die Klasse de.factfinder.suggest.search.SearchWithBlockResponse wurde in de.factfinder.suggest.search.blockresponse.SearchWithBlockResponse umbenannt. 

Suggestion-Relevanz wird nun in der API zurückgeliefert


Die Relevanz (Score) einer Suggestion wird nun über die REST-API zurückgegeben.

Abwertung für Strategien


In der Suggest Such-Implementation SearchWithBlockResponse ist es nun möglich an Strategien eine Abwertung zu definieren, das kann genutzt werden um Ergebnisse bestimmter Strategien über anderen anzuordnen.

Import

Suggestimport wird aufgrund nicht mehr vorhandener Such-Felder nicht abgebrochen


Der Import wird nun nicht mehr unterbrochen. Stattdessen gibt es eine entsprechende Nachricht, die im Minuten-Takt in das Log eingetragen wird.  

Statusnachrichten in ImportReader verfügbar gemacht


Custom ImportReader haben jetzt Zugriff auf (Log-)Messages. 

intermediate Import Thread-Anzahl konfigurierbar gemacht


Die Anzahl der Threads mit der die Zwischendatenbank befüllt wird ist jetzt konfigurierbar. Als default wird die Anzahl verfügbarer Kerne benutzt. 

Import-Rückgabe verbessert


Die Rückgabe der Import REST-API wurde verändert, mehr Informationen sind auf der Swagger-UI https://ng-demo.fact-finder.de/fact-finder/swagger-ui.html zu finden.

RemoveHtmlCodeImportHandler deutlich verschnellert


Die Geschwindigkeit des RemoveHtmlCodeImportHandler wurde deutlich erhöht.

Zwischendatenbank erstellt

Es wurde eine Zwischendatenbank eingefügt, deren Befüllung der erste Schritt im Importprozess ist. 


Für die Zwischendatenbank wurden verschiedene Settings in die fff.properties aufgenommen. Diese sind: importer.username (default: postgres) impoerter.password (default: admin) importer.port (default: 5432) importer.defaultDatabaseName (default: postgres) importer.serverName (default: localhost) importer.tableName (default: data) importer.dialect (default: H2) Für den Einsatz in Produktivsystemen sollte der importer.dialect auf POSTGRES geändert werden.

Feldtypen für CSV eingefügt


Es wurden die neuen Feldtypen Boolean und Date hinzugefügt.

Importfortschrittsanzeige angepasst


Der Fortschrittsbalken für den Import wurde angepasst. Hierdurch gibt es nun zwei Fortschrittsbalken, einen für die Zwischendatenbank und einen für die Worldmatch-Datenbank. Sollte bisher keine Zwischendatenbank vorhanden sein werden nur die importierten Einträge hochgezählt, ohne dass es einen Fortschrittsbalken gibt.

Plausibilität von Artikelnummernfeldern nun prüfbar

Auf der Feldpriorisierungs-Seite ist es nun möglich zu überprüften mit wie vielen Werten ein Muster in der Datenbank übereinstimmt.

NG-Datenbank wird bei vorhandener Zwischendatenbank automatisch geladen


Liegen Daten in der Zwischendatenbank vor aber es existiert keine Worldmatch Datenbank so wird durch einen Versuch die Datenbank zu nutzen automatisch ein entsprechender Import gestartet. Die Anfrage wird durch ein StartAutoImportEvent SystemEvent ausgelöst. Nach erfolgreichem Import wird ein DatabaseImported Event geworfen. 

Anpassungen an Delta-Updates durchgeführt


Die REST-Schnittstelle für Delta-Updates ("/records") wurde umfassend überarbeitet und verändert. Die Dokumentation dazu findet sich in der Swagger-UI (https://ng-demo.fact-finder.de/fact-finder/swagger-ui.html). 

Analysis

Leere ProductEventData-Dateien werden nicht mehr geschrieben


Leere ProductEventData-Files werden auf Seite von FACT-Finder nun nicht mehr persistiert, sofern zuvor bereits ProductEventData mit Daten vorlagen. Auf diese Weise können Lücken später noch gefüllt werden, sobald entsprechende Daten vorliegen. Zusätzlich ist die Generierung der ProductEventData nun nicht mehr mit dem Vorhandensein von Logfiles für einen Channel verknüpft, da diese nicht relevant sind. ProductEventData werden nur auf Grundlage von SCIC-Logs erstellt. 

Tracking


Der cookieId Parameter wurde von der Tracking-API entfernt. 

queryFromSuggest wird standardmäßig mitgeschickt


queryFromSuggest ist jetzt in den Params der Suggest-Response enthalten. 

Campaign Manager

Kampagnen zum Transaktionsmanagement hinzugefügt


Kampagnen wurden zum Transaktionsmanagement hinzugefügt. Um Kampagnen zu löschen, zu bearbeiten, hinzuzufügen oder zu klonen muss für den entsprechenden Ziel-Channel eine Transaktion offen sein. 

InResult Kriterium entfernt


Das InResult Kriterium für Kampagnen wurde entfernt. 

Detailseiten API


Es wurde eine DetailPage REST-Api hinzugefügt welche die Record, SimilarProduct, Recommendation und (Page)Campaign REST-Api bündelt. Weitere Informationen wie Parameter sind auf der Swagger-UI https://ng-demo.fact-finder.de/fact-finder/swagger-ui.html vorzufinden. 


Distanz-Kriterium-Abhängigkeit vom GeoSearch-Modul


Das Distanz-Kriterium für Kampagnen ist nur verfügbar wenn das GeoSuch-Modul aktiviert ist. Über den Parameter useGeo=false kann es aber auch request-weise abgeschaltet werden. Bestehende Distanz-Kriterien würden in diesem Fall nicht treffen, unabhängig von der übermittelten Position.

Instore Ads

ProductFeedAction ersetzt


Der InstoreAds-Productfeed wurde auf REST umgestellt, da FACT-Finder die xml- bzw. nicht-REST json-Schnittstelle nicht mehr unterstützt.

Der Feed kann jetzt unter .../rest/v2/productfeed/CHANNELNAME abgerufen werden. Man benötigt dazu einen User mit Berechtigung für InstoreAds und den entsprechenden Channel.

Der Name des Feed, der Content-Type und die Content-Disposition bleiben unverändert. Früher wurde ein 501 HTTP-Status (not implemented) geworfen, falls für den gewünschten Channel kein Feed erstellt werden kann, weil InstoreAds für diesen Channel nicht aktiviert ist oder der Channel keinen InstoreAds-Supplier hat, der einen Feed benötigt. Dieser Status wurde für den Fall, dass kein Supplier mit Feed für den Channel existiert, auf 404 (not found) umgeändert, um deutlicher auszudrücken, dass die Schnittstelle zwar existiert, jedoch für den entsprechenden Aufruf nicht zur Verfügung steht. Im Falle eines nicht aktivierten InstoreAds-Moduls wird nun HTTP-Status 500 zurückgegeben. 

SEO Enhancer

SEO Enhancer aus Code entfernt


Der SEO-Enhancer und zugehörige Konfigurationseinstellungen wurden entfernt. 

Response/APIs

Alte Displayoptionen aus Suchergebnis entfernt


  • Die Konfiguration für das Aufteilen des Suchergebnisses in Seiten wurde verkleinert. Es gibt nur noch die Möglichkeit die standardmäßige Seitengröße anzugeben.
  • Die Seiten-Informationen im Suchergebnis enthalten nur noch zwei Seitenlinks. Den zur nächsten und zur vorherigen Seite. Die Beschriftung der Seitenlinks ist entfallen.
  • Die Informationen über die aktuelle Sortierung des Suchergebnisses ist nicht mehr im Suchergebnis enthalten.  

XML API-Support entfernt


Die Unterstützung für XML in der REST-Api wurde entfernt. 

Authentifizierungs-Optionen für API überarbeitet


Die alte Authentifizierung wurde in der REST-Api entfernt. Es ist nun nur noch möglich sich mit Basic Authentication oder OAuth2 zu authentifizieren.

Um sich mit Basic Authentication zu authentifizieren, muss der Authorization-Header folgendes enthalten: das Wort Basic gefolgt von einem Leerzeichen und der Base64-Encodierten username:passwort Zeichenkette

Ein Header mit den Anmeldedaten factfinder / pw würde so aussehen:

Authorization: Basic ZmFjdGZpbmRlcjpwdw==

ZmFjdGZpbmRlcjpwdw== ist hierbei die Base64-Representation von factfinder:pw.

OAuth2 unterstützt verschiedene Abläufe für die Authentifizierung, momentan wird nur der Password-Flow von FACT-Finder unterstützt. Der Ablauf ist wie folgt:

  • Anwendung sendet Anmeldedaten + ClientID zu FACT-Finder
  • FACT-Finder antwortet bei erfolgreicher Authentifizierung und Autorisierung mit einem Access-Token
  • Anwendung nutzt Access-Token um sich in der REST-Api zu authentifizieren

In OAuth2 gibt es Scopes, mit welchen es möglich ist ein Access-Token in der Berechtigung einzuschränken. Eine aktuelle Liste aller Scopes sind auf der Swagger-UI vorzufinden (https://ng-demo.fact-finder.de/fact-finder/swagger-ui.html).

Die Client Konzept in OAuth2 ist für Third-Party Anwendungen gedacht, mit diesem wäre es möglich die Scopes für verschiedene Clients einzuschränken. In FACT-Finder ist dies aber bereits mit den User-Rollen möglich, deswegen soll der Client mit der ID ff und leerem ClientSecret verwendet werden.

Beispiel Anfrage für einen Access-Token GET-Request: example.de/fact-finder/oauth/token?grant_type=password&username=factfinder&password=pw&client_id=ff

Rückgabe

{
        "access_token": "30993c9f-5ed2-4ecd-8e57-c2b6721a656e",
        "token_type": "bearer",
        "refresh_token": "c11726cb-9b73-44df-8797-fb9c5be758c8",
        "expires_in": 3599,
        "scope": "public_queries import database config analytics"
}

In diesem Beispiel wurden die Scopes nicht limitiert, dies wäre möglich mit dem query-Parameter scope

Beispiel:  example.de/fact-finder/oauth/token?grant_type=password&username=factfinder&password=pw&client_id=ff&scope=import config

Scopes werden mit einem Leerzeichen getrennt.

Mit dem Bearer-Keyword und dem Access-Token im Authorization-Header kann nun die API angesprochen werden.

Beispiel:

Authorization: Bearer 30993c9f-5ed2-4ecd-8e57-c2b6721a656e

 Mit der Anfrage eines Access-Token wird auch ein Refresh-Token zurückgegeben. Mit diesem ist es möglich einen neuen Access-Token zu erhalten ohne erneutes senden der Anmeldedaten. Beispiel Anfrage: GET-Request: example.de/fact-finder/oauth/token?grant_type=refresh_token&refresh_token=c11726cb-9b73-44df-8797-fb9c5be758c8

Es sind Rollen mit dem Prefix Api hinzugekommen, welche die einzelnen OAuth2 Scopes repräsentieren.

Beispiel:

Scope public_queries repräsentiert die Rolle ApiPublicQueriesimport -> ApiImport usw.. 

Rückgabestruktur von "Records" angepasst

Die Struktur der Records im Suchergebnis wurde angepasst.


Jeder Record ist jetzt aufgeteilt nach Master- und Variantenfeldern. Die Variantenfelder sind als Map zwischen VariantenId und den entsprechenden Variantenfeldern dargestellt. Zur Begrenzung der Anzahl der Varianten kann ein maxVariantCount übergeben werden. 

POST-Support im SuggestController der REST-API eingeführt


Die REST-API unterstützt nun die Suggestabfrage mittels POST. 

REST: Filter und Sort in Swaggerfreundliches Format umgestellt


Die Filter und Sort Parameter für die Search und Suggest GET API wurde verbessert und sind nun über die SwaggerUI hinzufügbar. Format und Beispiele sind auf der SwaggerUI vorzufinden.

https://ng-demo.fact-finder.de/fact-finder/swagger-ui.html

DatabaseChangeEvent entfernt


Das DatabaseChangeEvent wurde entfernt. Damit ist es nicht mehr möglich Update-Operationen für einzelne Datensätze per Eventlistener zu verbieten. Es wird weiterhin ein DatabaseChangedEvent nach erfolgreichem Update für jeden Datensatz gefeuert. 

XFire entfernt


Die XFire dependency und einige zugehörige Objekte und Schnittstellen wurden entfernt.

RefreshDatabases gelöscht


Das refreshDatabases Interface (und der Reload Databases button) wurden entfernt. Die Recommendation-Datenbank kann über die Import-Schnittstelle neu geladen werden.

ApiError überarbeitet


Im Fehlerfall gibt die REST-API keine Liste an Fehlermeldungen sondern nur noch eine zurück. Mehr Informationen sind auf der Swagger-UI (https://ng-demo.fact-finder.de/fact-finder/swagger-ui.html) zu finden. 

Monitoring-API und Rest-API auf verschiedene Pfade aufgeteilt


Die Pfade zur API wurden in REST-API (erreichbar unter /rest) und Monitor-API (erreichbar unter /manage) aufgeteilt. Welche API wie genau zu erreichen ist, ist der SwaggerUI zu entnehmen.

Versionierung der REST-API


Die Rest-API von NG ist unter rest/v2 zu erreichen. 

FollowSearch-Parameter gelöscht


Der Parameter followSearch hat in NG keine Bedeutung mehr und wurde entsprechend entfernt. 

REST: Delete Record ID-Switch


Die Update- und Delete-Schnittstelle der REST-API kann nun Datensätze mittels Id oder Produkt-Nummer identifizieren. 

Struts APIs entfernen, die WebComp nicht nutzt und bereits ersetzt sind


Folgende APIs wurden entfernt:

  • Import.ff
  • Update.ff
  • Delete.ff
  • Insert.ff
  • CommunityThesaurus.ff
  • RefreshDatabases.ff

Die Funktionalität steht zukünftig weiterhin über die REST-API zur Verfügung.  

SuchCacheFlush in REST-Api aufgenommen


In der REST-API ist es nun möglich den Such-Cache zu flushen. 

REST-API um Funktionen bezüglich AppLog erweitert und aus Struts entfernt


Die REST-API wurde erweitert. Folgende Operationen sind nun möglich:

  • Das explizite flushen aller Logdateien
  • Das Ändern des Loglevel
  • Abfrage der letzten Zeilen aus dem Application Log  

Ersatz für die SystemInformation-Seite erstellt und aus Struts entfernt


Im Zuge der Entfernung der alten UI wurde auch die Systeminformations-Seite entfernt. Bitte nutzen Sie als Ersatz die diversen neuen Monitor-Schnittstellen (z.B. /manage/health.json/manage/env.json). Für das Starten von Jobs und Neuladen der Konfigurationsseiten kann die REST-Schnittstelle verwendet werden. 

Anpassungen in APIs


Folgende Änderungen an der REST-API wurden vorgenommen

  • TagCloud.nr wurde entfernt
  • TagCloud.params wurde in searchParams umbenannt
  • SimilarProducts.records wurde in hits umbenannt
  • Facet.facetOrder wurde entfernt
  • Such API Parameter productsPerPage wurde in hitsPerPage umbenant
  • Such Rückgabe recordsPerPage und productsPerPage wurden in hitsPerPage umbenannt

PagePermissions entfernt


Das Feature Page Permissions wurde entfernt. 

articleNumberSearch und noArticleNumberSearch zusammengefasst


isArticleNumber und isNoArticleNumberSearch wurden durch articleNumberSearch ersetzt. Mögliche Werte:

  • ALWAYS: Eine Artikelnummern-Suche durchführen, mit allen Feldern die Artikelnummern-Suche genutzt werden.
  • DETECT: Eine Artikelnummern-Suche durchführen, wenn der artNoRegEx von einem oder mehreren Feldern mit dem Suchbegriff übereinstimmt.
  • NEVER: Keine Artikelnummern-Suche durchführen.

Attribute in APIs umbenannt


recordCount wurde in Facets und dem SingleWordSearchResult in totalHits und disableCache in den SearchControlParams wurde in useCache umbenannt. Mehr Informationen sind auf der SwaggerUI vorzufinden.

AppliedPreprocessorEntries entfernt


Die appliedPreprocessorEntries wurden aus dem Suchergebnis entfernt. 

Neuer SearchControlParams: useSearch


useSearch ist als SearchControlParam hinzugekommen. Mehr Informationen sind auf der SwaggerUI vorzufinden. 

Navigation als eigenen API-Endpunkt erstellt


Die API für die Suche und Navigation wurde getrennt und ist nun über zwei verschiedene APIs erreichbar. Mehr Information sind auf der Swagger-UI vorzufinden.

ignoreForCache umgebaut und über POST ermöglicht


Der ignoreForCache Parameter mit dem man angeben kann welche custom parameter für das caching nicht relevant sind wurde in cacheIrrelevant umbenannt. Ebenso wurde in der externen API CustomParameter.cacheRelevant in CustomParameter.cacheIrrelevant umbenannt. Der XML-Tag cacheIgnored wurde ebenso in cacheIrrelevant umbenannt. Hierbei wurde auch der Bug gefixt, dass cacheIgnored dem cacheRelevant entsprach und somit die gegenteilige Bedeutung hatte dessen was der Name suggeriert. 

disableDeduplication umbenannt und bei SearchControlParams platziert


disableDeduplication wurde sowohl in der API als auch in der Suggest-Konfiguration in useDeduplication umbenannt. Zusätzlich wurde der API-Parameter zusammen mit dem deduplicationField in die SearchControlParams verschoben. Mehr Informationen sind auf der SwaggerUI vorzufinden.


Gruppierung der REST-APIs verbessert


Die URLs einiger REST-API Aufrufe hat sich geändert. Nähere Informationen sind in der Swagger-UI zu finden. 

FieldRole-Field-Mapping eingebaut


Folgende REST-API Rückgaben enthalten nun auch die Feldrollen:

  • CompareProducts
  • Recommendation
  • SimilarProducts
  • DetailPage

Weitere Informationen sind auf der Swagger-UI vorzufinden.

UI: Management Interface

Unnötige Aufforderungen zu Import oder Cache-Leerung vermeiden; ansonsten bei Bedarf deutlich hinweisen


Die Meldungen tauchen nun nicht mehr gleichzeitig auf. Ist ein Import notwendig, so wird zunächst nur die Import-Message angezeigt. Erst wenn kein Import mehr notwendig ist, wird die Cache-Flush Meldung angezeigt.

Wertevorschau für numerische Facetten entfernt


Bei numerischen Facetten gibt es nun keine Wertevorschau mehr.  

Konfigurationsmöglichkeit zur unterschiedlichen Gewichtung je Ebene in Kategoriepfad eingerichtet


Auf der Feldgewichtungs-Seite kann nun, wenn ein Kategorie-Pfad Feld definiert ist, die Gewichtung pro Kategorie-Ebene definiert werden. Ebenso kann eine Standardgewichtung angegeben werden falls ein Pfad mehr Ebenen enthält, als hier konfiguriert sind. 

UI für Channelmanagement erstellt

Das Nutzerinterface bietet in der linken Navigationsleiste nun den Reiter Channelmanagement. Dort gibt es die Optionen ChannelbearbeitungChannel-Wizard und Sicherungen. Die Installer-Seite wurde umgestaltet und in Channelbearbeitung umbenannt. Sie enthält weiterhin die Optionen Channel zu erstellen, zu klonen und zu löschen. Auch kann man weiterhin den Installer-Prozess starten und sich eine Übersicht über den Sperr-Zustand der Channels verschaffen sowie Sperrungen entfernen. Neu hinzugekommen ist eine Suchfunktion für Channel.

Die Sicherungswiederherstellungsfunktion wurde von der Installer-Seite entfernt und auf eine eigene Seite verschoben. Dies ermöglicht es, die Übersicht über vorhandene Sicherungen auch anzuschauen, wenn ein Wiederherstellen aktuell nicht möglich ist, weil der entsprechende Channel gesperrt ist. Die Channel-Wizard-Seite bietet eine neue Funktionalität: Die Möglichkeit aus bestehenden Channeln, welche bisher in keiner Hierarchie verwendet werden, eine Parent-Child-Hierarchie zu erstellen.


Für den Channel-Wizard müssen mindestens zwei normale Channel als Quell-Channel ausgewählt werden. Bisher kann lediglich eine der drei Optionen zur Erstellung des neuen Parent verwendet werden: Der Parent wird auf Basis eines weiteren Quell-Channels erstellt werden. Der Parent wird also alle Settings aus diesem Quell-Channel übernehmen. Die fehlenden zwei anderen Erstellungsoptionen werden in Kürze folgen. S. http://jira.omikron.net/browse/FF-12160

Switch um Fehlermeldungen in der UI zu deaktivieren eingeführt


Die Benutzer-Einstellungen haben die zusätzliche Option ```hideErrorNotifications``` bekommen, mit der Fehlermeldungen im Backend ausgeblendet werden können. 

Code Structure

campaignProductNumber entfernt


Die Feldrolle campaignProductNumber wurde entfernt. Wenn gepushte Produkte mittels des Suchdialoges definiert werden, werden die productNumber Werte der Produkte abgespeichert. Im Fall der manuell eingegebenen Produktnummern muss der Nutzer das Feld angeben, aus dem sie stammen. In der XML-Datei wird diese Information im field-Attribut des entsprechenden pushedProduct-Tag abgespeichert. 


Einige Konfigurationssettings umbenannt


Es wurden einige Konfigurationssettings umbenannt:

  • In der Suggestkonfiguration und in der Suchkonfiguration heißen alle minSimi Elemente nun minScore
  • In der Suchkonfiguration wurde das Attribut simiThreshold im singleWordSearch - Element anpasst und lautet nun scoreThreshold.

Die Umbenennungen sollen dem Umstand Rechnung tragen, dass sich in NG die Bedeutung des Ähnlichkeit-Wertes verändert hat.

Der Migrator nimmt die Änderungen automatisch vor. 

Operating

DeploymentAction in REST-API übertragen


Die Deployment-Api wurde zur REST-Api hinzugefügt und aus der alten Api entfernt. Mehr Informationen wie mögliche Parameter sind auf der Swagger-UI vorzufinden https://ng-demo.fact-finder.de/fact-finder/swagger-ui.html


Backup Manager

Backups nun im Parent-Channel


Werden Änderungen in einem Parent- oder Child-Channel gespeichert so wird immer ein Backup von allen Channeln der entsprechenden Vererbungsstruktur gemacht. Beim Wiederherstellen des Backups werden alle beteiligten Channeln wieder zurückgesetzt. Aus diesem Grund ist das Wiederherstellen von Backups in Child-Channeln nicht mehr möglich. Das entsprechende Backup muss stattdessen im Parent-Channel wiederhergestellt werden.

Sonstiges

DatabasesService umgestellt

Die Anzeige der importierten Datenbanken wurde entsprechend den NG-Gegebenheiten angepasst. Hierdurch gibt es nun zwei Datenbanken, die ggf. nicht importiert sind - die Worldmatch-Datenbank und die Zwischendatenbank.

Anpassung an Kampagnen-Operatoren


Das Verhalten der Kampagnen-Operatoren "ist gleich" / "ist nicht gleich" hat sich leicht verändert. Beispielsweise werden Sonderzeichen wie "_()!:" nicht mehr ignoriert und Umlaute nicht automatisch normalisiert. Stattdessen wird die konfigurierte Phonetik der Suche zur Normalisierung verwendet.

Fehlerweiterleitung von Channelservice verbessert


Wenn der Channel Wizard fehlschlägt, so wird dieser Fehler nun auch in der UI korrekt dargestellt.

Deployment Modul: Nur noch Übertragung ganzer Vererbungs-Hierarchien erlaubt


Das Verhalten des Deployment-Moduls wurde im Zuge von Multi-Channel angepasst. Das Deployen von Ressourcen eines Channels, welcher zu einer Vererbungshierarchie gehört, zieht nun das automatische Deployen der gleichen Resourcentypen für alle anderen Channel der Hierarchie nach sich. Dies ist notwendig, da ein vererbter Channel nur im Zusammenspiel mit seinem Parent-Channel valide ist. Kampagnen sind von diesem Verhalten ausgeschlossen, da sie nicht an der Vererbung teilnehmen. Tritt während des Deployment eines der Channel ein Fehler auf, dann werden alle Aktionen zurückgesetzt und die alten Dateien für alle Channel der zu deployenden Hierarchie eingespielt, um einen konsistenten Endzustand zu gewährleisten. 

Temp-Conf Handling abschaffen


  • CampaignConfigurationSaved Event hat versehentlich die falsche Basis-Klasse erweitert: ConfigurationSave. Nun wird die korrekte Klasse erweitert: ConfigurationSaved.
  • Reihenfolge der ConfigurationSaveConfigurationSaved und ConfigurationFlush Events geändert. Vorher:
  • ConfigurationSave
  • ConfigurationSaved
  • ConfigurationFlush
    Jetzt:
  • ConfigurationSave
  • ConfigurationFlush
  • ConfigurationSaved
    Begründung: ConfigurationFlush sorgt dafür, dass die Caches der Configuration-Reader freigegeben werden, und dass der nächste Aufruf von ConfigurationReader.getConfiguration() die neue Version liefert. Wenn ConfigurationSaved vor ConfigurationFlush ausgelöst wird, und Event-Listener von ConfigurationSaved ConfigurationReader.getConfiguration() aufrufen, würden sie die alte Version der Konfiguration sehen.
  • (migration-required) FACT-Finder erstellte beim Bearbeiten von Konfigurationen Kopien der Konfigurations-Dateien. Darin wurden die Änderungen zwischengespeichert. Diese Dateien waren auch als "Temp-Konfigurationen" bekannt. Diese sind vollständig entfernt worden. Der Bearbeitungszustand wird nun ausschließlich im Arbeitsspeicher gehalten. Gelöschte fff.properties Einstellungen:
  • recommendationConfig.tmp
  • rankingConfig.tmp
  • dqServicesConfig.tmp
  • campaignsFile.tmp
  • xmlConfig.tmp
  • xmlConfig.suggest.tmp

Tooltips für die neuen Channel-Icons hinzugefügt

Einige Icons auf der neuen Channel-Bearbeiten-Seite sowie der BackupManager-Seite haben nun Tooltips. 

StatusMessage severity nicht mehr an Container gebunden


Einzelne Messages sind jetzt selbst mit einer "Severity" ausgestattet (analog Log4j), statt Separat in containern nach Error/Warning transportiert zu werden.

OneFacetPerFieldValidator aktiviert


Es kann nur noch eine Facette pro Feld konfiguriert werden.

DuplicateFilterField durch masterId ersetzt


Die Einstellung duplicateFilterField wurde entfernt. Stattdessen gibt es nun die Feldrolle masterId die angibt in welchem Feld die Produkt Nummer des Master Artikels steht. Bei der Migration erhält das als duplicateFilterField eingestellte Feld diese neue Feldrolle. 

FACT-Finder an neue minSimi-Bedeutung angepasst


Die Abwertung per Ranking Regeln führt nicht mehr zu einem Ausschluss eines Produktes aus dem Suchergebnis. Stattdessen gibt es für TextCompare und TimeRank Regeln nun eine extra Einstellung um Produkte aus dem Suchergebnis zu entfernen. Bei TimeRank Regeln werden dabei nur Produkte entfernt die älter als alle eingestellten TimeRanks sind. 

Swagger Model-Dokumentation hinzugefügt


7.3, NG: Die Dokumentation der REST-Schnittstelle beinhaltet nun auch Informationen dazu, ob ein Parameter required ist. Solche Parameter müssen bei einer Anfrage übergeben werden. Falls dieser Marker an einem Parameter einer Rückgabe steht bedeutet dies, dass dieser Parameter nicht null sein kann. NG: Die REST-Schnittstelle hat nun bessere Dokumentationstexte erhalten. 

Verhalten von VirtualFields geändert

Die Rückgabe der Ergebnisse wurde geändert. Attribute aus Multiattributsfeldern werden jetzt wie jedes andere Feld dargestellt und nicht mehr unter dem ursprünglichen Multiattributsfeld untergeordnet. 


Ausnahmen für Multiattributsfelder und somit die entsprechenden Virtuellen und Attributsfelder wurden soweit möglich entfernt. Weiterhin erforderlich sind diese für die Konfiguration und den Import.  

Zugriff auf Parentchannelsuche blockiert


Da Parentchannel nicht als Produktivchannel benutzt werden sollen, ist die Suche für solche Channel nun blockiert. Über die Webservices, XML-, JSON- und REST - Schnittstellen erhält man eine 400 (Bad Request) Rückgabe. Die Suche im Demoshop der Ui ist nicht möglich. Damit man die Konfiguration dennoch in der Diagnosesuche bearbeiten kann, ist ein Suchen für Parentchannel hier erlaubt.

Neuer GTIN Datentyp für Suchfelder integriert


Es gibt einen neuen GTIN Datentyp in der Feldkonfiguration, der in der Feldübersicht oder direkt in der config mit <type>GTIN</type> eingestellt werden kann. 

Mülleimer umbenannt und Funktionalität beschnitten


Der xml-tag afterSearchReordering in der Suchkonfiguration wurde in trashCan umbenannt. Das malus-Attribut der eigentlichen Einträge wurde entfernt. 

trackingProductNumber, displayProductNumber, campaignProductNumber und record/productId vereinheitlicht


Die Feldrollen displayProductNumber und trackingProductNumber wurden entfernt. Stattdessen gibt es jetzt die productNumber Feldrolle, die beide Bedeutungen beinhaltet. Bei der Migration wird das Feld mit der trackingProductNumber die neue Feldrolle erhalten. 

Security: Salted Hashes speichern


Mit der Einführung von OAuth2 und Basic Authentication sind die Authentifizierung Einstellungen überflüssig geworden und wurden deswegen entfernt. Passwörter werden nun in einem BCrypt Hash gespeichert, die Stärke von diesem Hash ist in der fff.properties über die Property password.strength einstellbar.

Wartezeit eingebaut, falls der DQ-Server bei der Attributisierung nicht erreichbar ist

Für das Modul "Attribute Generator" ist eine Anwendungseinstellung hinzugekommen, mit der es möglich ist einzustellen, ob Datensätze, für die beim Importvorgang kein Cacheeintrag gefunden wird, an den DQ-Server geschickt werden sollen, damit bei diesem, eventuell nochmalig, eine Attributisierung durchgeführt wird. Per Standard ist diese Einstellung deaktiviert. Bitte beachten Sie, dass die Attributisierung unter Umständen lange dauern kann und diese Einstellung den Importvorgang verlängern kann. 


Der DQ-Attributisierungsprozess wurde angepasst. Bisher wurde direkt mit dem nächsten Workflow oder Record fortgefahren, wenn das Holen der Attribute vom DQ-Server fehlschlug, weil der Server offline war. Nun gibt es maximal 20 weitere Versuche den Server zu erreichen und die Attribute zu einer Anfrage abzuholen. Zwischen den Versuchen wird jeweils 5 Sekunden gewartet. Falls der DQ-Server auch nach dem 20ten Versuch nicht antwortet, gilt er als offline.

Im Falle des Cache-Updates wird der Prozess dann abgebrochen. Falls der Server angefragt wurde, weil gerade ein Import stattfindet, zu einem Produkt keine Attribute im Cache vorliegen und die Option aktiv ist, dass in diesem Fall der DQ-Server angefragt werden soll, so wird der DQ-Server für den restlichen laufenden Import nicht mehr angefragt.

Falls die Anfrage an den DQ-Server aufgrund eines Fehlers fehlschlägt und nicht weil der Server offline ist, wird die Retry-Funktion nicht aktiv.

Die Einstellung lässt sich in der fff.properties über den Key dqServicesConf.updateAttributesOnCacheMiss und mit den Werten true für aktiv bzw. false für inaktiv setzen. Standard ist false.

Verlinkung zum Doku-Portal im FF Backend eingerichtet

Auf allen Einstellungsseiten gibt es nun einen Link zu der entsprechenden Seite im FF-Dokumentations-Portal. Neben dem Textlink führt ein großes Info-Icon neben der Channelauswahl ebenso ins Dokumentations-Portal.

Diagnostik-Suche: Schnellwahl der dargestellten Facetten implementiert

In der Filter- und Navigationsleiste der Suchdiagnose wurde eine Möglichkeit hinzugefügt schnell zwischen oft genutzen Filtersets zu wechseln. Man kann sich die Filter die für Suche bzw. Navigation konfiguriert sind anzeigen lassen, sämtliche möglichen oder keine Filter anzeigen lassen.


Parsing des Datumsfelds verbessert


Das in einem Export zulässige Datumsformat wurde angepasst, um ein sicheres Erkennen der Daten sicherzustellen. In Export-Dateien sind nun folgende zwei Datumsvarianten erlaubt:  - als long: z.B. 183543957000 entspricht dem 26.10.1975 9:25:57 CET  - im ISO-8601 mit Zeitzone - Format: z.B. 1980-02-01T18:21:02+00:00 entspricht dem 1.2.1980 18:21:02 UTC  Bisher wurden invalide Datums-Werte ignoriert und der Record trotzdem importiert. Dies wurde geändert und der entsprechende Record wird nun als fehlerhaft übersprungen. Damit verhält sich der Datumsparser analog zu den Parsern anderer Feldwerte, beispielsweise Gtin.  


InstoreAds: Schnittstelle zum Reportabruf


Bisher wurden im 5-Minuten Takt gesammelte InstoreAd-Events an konfigurierte Stellen abgeschickt. Jetzt gibt es zusätzlich die Möglichkeit die InstoreAds-Events für jeweils einen Tag in einer Datei zusammenzufassen und über REST-API für Kairion verfügbar zu machen. In den InstoreAdsSupplier-Einstellungen in der search.xml sind die Eigenschaften storeReports und reportFolder hinzugekommen. 

<instoreAds>

    <suppliers>

        <supplier>

            <name>InstoreAudience</name>

            <shopId>OmikronDemo</shopId>

            <campaignUrl>UrlToCsvWithSponseredProducts</campaignUrl>

            <reportingUrl>reportingUrl</reportingUrl>

            <fileName>fileNameToSaveTheFileOnDisc</fileName>

            <storeReports>true</storeReports>

            <reportFolder>{APP_RESOURCES}/instoreAds/{CHANNEL}</reportFolder>

        </supplier>

    </suppliers>

    <maxPushedProducts>3</maxPushedProducts>

    <prioritized>true</prioritized>

</instoreAds>

  • {storeReports}
    ist ein Flag (standardmäßig false), dass steuert ob report-Dateien angelegt werden sollen. Wenn aktiv findet kein Melden von instoreAds Events an die reportingUrl mehr statt.
  • {reportFolder}
    gibt die Möglichkeit einen alternativen Ort zum Speichern der report-Dateien einzustellen. Der Standard-Wert ist \{APP_RESOURCES\}/instoreAds/\{CHANNEL\}. Beim Überschreiben des Wertes ist darauf zu achten \{CHANNEL\} im Pfad zu haben um nicht Reports verschiedener Channel zu vermischen.
  • Um den Report über alle InstoreEvents für einen Channel an einem Tag 20.3.2018 zu kriegen kann man über die Rest-API

factfinder/rest/v2/instoreAdsReport/channel?date=2018-03-20

  • aufrufen und erhält einen Report im json-Format.
  • date ist im Format yyyy-mm-dd anzugeben.
  • Der json-Report ist wie folgt aufgebaut:

{"counters":    [      {"campaignId":"Kairion_ia-mythos","views":11,"clicks":4,"carts":2,"checkouts":1,"boughtCount":1,"turnover":39.95},      {"campaignId":"Kairion_ia-salomon-shoes2","views":31,"clicks":12,"carts":5,"checkouts":2,"boughtCount":2,"turnover":119.90}      ....    ] }

  • In 7.3 und früher muss auf die URL fact-finder/InstoreAdsReport.ff?channel=channel&date=2018-03-20 zugegriffen werden. Der json-Report ist identisch.

FF-13119

URL-Umstellung auf https für RSS & Advertisement-Banner


Es wurde ein Fehler behoben, der verhinderte, dass das Werbebanner auf der Loginseite und der RSS-Feed auf der Modulübersichtsseite angezeigt werden konnten. Die Default-URLs für diese Ressourcen verwenden nun das https-Protokoll anstelle von http. 

Getroffene Ranking Regeln nun sortiert


Der Tooltip, der in der Diagnosesuche die getroffenen Regeln anzeigt ist nun scrollbar. Die Regeln werden nun auch absteigend nach Aufwertung sortiert. 

Feldtyp Integer


Es gibt einen neuen Feldtyp INTEGER der für reine Ganzzahlen verwendet werden kann. Der vorherige Typ Number wurde in FLOAT umbenannt. 

fieldContentDelimiter entfernt


Die fieldContentDelimiter-Einstellung wurde entfernt. Sie befand sich früher an Feldkonfigurationen. Die groupDelimiter -Einstellung von Feldern heißt nun valueDelimiter, um ihre Funktion als Trenner für einzelne Werte in einem Multi-Wert-Feld besser auszudrücken.

Deduplizierung nach der Suche


Die Suggestion die während des Imports genutzt wird ist nun keine einzelne Suggestion mehr, sondern eine Liste aus Suggestion.Varianten. In der Suggest-Rückgabe wird jeweils immer die Variante mit der höchsten Relevanz zurückgegeben.   Da Varianten oft gleiche Namen haben, wurde die Deduplizierung während des Imports für alle Suggestions mit mehr als einer Variante und für den type productName deaktiviert. Um dem entgegenzusteuern wurde Deduplizierung zur SuggestSearchLogic hinzugefügt. Die Deduplizierung kann an den conf-Element an den SearchWithListResponse und SearchWithBlockResponse konfiguriert werden:

<deduplicateMode>ALL</deduplicateMode>

Mögliche Werte sind:

  • ALL: entferne Suggestions mit gleichem Namen
  • TYPE: entferne Suggestions mit gleichem Namen und Typ
  • NONE: entferne keine Suggestions

Durch die Deduplizierung können Suggestions gelöscht werden, dadurch kann es vorkommen, dass maxReturnCount nicht mehr eingehalten wird.  Für dieses Problem wurde eine neue Einstellung names maxReturnCountBuffer für SuggestTypen hinzugefügt. Die Einstellung gibt die Anzahl an Suggestions an, die zusätzlich zur maxReturnCount angefragt werden sollen. 

Bugfixes

Search Behaviour

Aktivierungsverhalten der Single-Word-Search angepasst


Die Einzelwortsuche wird jetzt korrekt je nach Wert des active-Flag in der Such-Konfiguration angewendet.

Erneute Substringfilterung mit selbem Begriff nach neuer Suche funktioniert nicht


Ein Substring-Filter, der bei einer alten Suche in der Diagnose-Suche verwendet wurde, funktioniert nun auch in einer neuen Suche. 

After Search Navigation (ASN)

Start der Anwendung bei invalider Konfiguration von Cluster-Facetten wird nun verhindert


Cluster-Facetten mit Auswahltyp multiSelectOr verhindern nun den erfolgreichen Start des FACT-Finders, da so eine Konfiguration invalide ist. 

Slider-Facetten überschreiben nun den Auswahl-Typ der jeweiligen Facette


Eine numerische Attributs-Facette, die als Slider konfiguriert ist, überschreibt nun korrekterweise den Auswahl-Typ der Multi-Attributs Facette. 

Slider-Verhalten angepasst

Beim Wechseln auf den Rangetyp Slider wird der Auswahltyp nun auf den Standard-Wert zurückgesetzt. 

Suggest

Fehler beim Suggest-Import von chinesischen und indischen Suchdatenbanken behoben


Bei bestimmten Locals konnte der Suggest-Import keine Daten aus der Suchdatenbank lesen, dies wurde behoben. 

Darstellungsfehler von Suggest-Postprozessoren und Sourceprovider behoben

Diverse Einstellungen des Suggest-Imports werden in Kindchanneln nun immer mit dem korrekten Vererbungsstatus angezeigt.

Konfigurierte Suggest-Rückgabefelder verschwinden beim Wechsel zwischen den Channels nicht mehr

Fehler die Felder auf der SuggestImport-Seite verschwinden ließen wurden behoben. 

Fehler beim Setzen der maximalen Trefferanzahl je Vorschlagstyp behoben


Die maximale Trefferanzahl je Vorschlagstyp im Suggest kann auf 0 gesetzt werden. 

Import

Fehlgeschlagener Download bricht Importvorgang nicht mehr mit irreführender Meldung ab


Fehlgeschlagene Downloads von sekundären Importdateien über die UI führen nicht mehr zum Abbruch des Importvorgangs. 

Fehler behoben, der zum Nutzen der falschen Multichannel-Konfiguration gesorgt hat


Ein Fehler im Konfigurations-Management von Parent- und Child-Channels hat dazu geführt, dass die Parent-Konfiguration anstelle der des Childs verwendet wurde. 

Seltsame Fehlermeldungen beim Datenimport entfernt


Nutzer die nur eine eingeschränkte Anzahl an Channels sehen, kriegen beim Import nun keine Fehlermeldungen über fehlende Channelberechtigungen mehr. 

Nicht informativer Exception-Auswurf bei der Bildermittlung für Suggest-Whitelisteintrag ersetzt


7.2, 7.3: Bei einem falsch konfigurierten Suggest Whitelist Kategorie-Eintrag wird nun eine aussagekräftigere Fehlermeldung ins Log geschrieben.

NG: Suggest Whitelist Kategorie-Einträge werden nun validiert.   

Fehler beim Importverhalten von Varianten behoben


Es wird validiert, dass Felder mit productNumber role als variierend markiert sind (falls Varianten existieren). 

Update/Delete/Insert Timeout nun konfigurierbar


Der Timeout für Update-Operationen kann nun in der Suchkonfig über den XML-Tag import/updateTimeout eingestellt werden. Der Timeout wird in Sekunden angeben und muss mindestens 1 Sekunde betragen. 

ArrayIndexOutOfBoundException-Fehlermeldung beim Recommendations-Import angepasst


Die Fehlermeldung wenn beim Laden oder Speichern der Recommendation Datenbank etwas schief geht wurde verbessert. 

FF sendet beim Import keine unnötige Anfragen an DQ-Server mehr


Wenn das Aktualisieren von fehlenden DQ-Attributen deaktiviert ist, wird der DQ-Server überhaupt nicht mehr angefragt. 

Analysis

KPIs BounceRate und ExitRate können deaktiviert werden

Die beiden KPIs BounceRate und ExitRate können nun in der Konfiguration deaktiviert werden, um Analysen zu beschleunigen. In diesem Fall führt eine Abfrage dieser KPIs immer zu einem Ergebnis von 0.


Es wurden zwei sehr zeitaufwändige KPIs identifiziert, die die Analysedauer stark beeinflussen. Es handelt sich dabei um die BounceRate und die ExitRate. Diese können nun über den Parameter ffa.job.analyzeBounceAndExitRate=false in den application.properties deaktiviert werden. Standardmäßig sind die beiden KPIs für Analysen aktiviert.

Besserer Umgang mit Schriftart beim Whatshot-Report


Die Default-Schriftart für What's Hot Reports wird auf case-sensitive Filesystemen wieder gefunden.

Behoben: Werte in What's Hot Grafiken fehlen

Die Zuweisung der Größe für die Diagramme zur Click Through Rate in den What's Hot Reports wurde angepasst, sodass die Diagramme nun sichtbar sind. 

Berechnung der Conversion Rate korrigiert


Analytics hat in einigen Fällen Werte vergessen, wodurch die Conversion Rate falsch berechnet wurde. Dieser Umstand wurde behoben. 

Anzahl initialer Suchen in Logfile-Analyse nun korrekt

Ein Fehler bei der Übergabe des gefilterten Analysezeitraums hat dazu geführt, dass jeweils der letzte Tag des gewählten Zeitraums ignoriert wurde. Besonders deutlich wurde dies bei der Filterung nach einem einzigen Tag, bei dem es dann keine Werte gab. Nun wird auch der letzte Tag mit einbezogen.

What's Hot Report weist keine unvollständigen Feedback-Trackingdaten auf


Feedback-Events werden jetzt wieder vollständig im What's Hot Report dargestellt.

What's Hot REST API kann jetzt den WH-Job auslösen


Über die REST-Api kann nun der WhatsHot Job angestoßen werden.

Analytics fabriziert wieder ProductEventData-Files im Rahmen der What's Analyse


Ein Fehler beim Erstellen der What's Hot Reports führt nicht mehr dazu, dass keine ProductEventData generiert werden. Außerdem werden bei der Ausführung des WhatsHotQuartzJob nun zunächst die ProductEventData erstellt und erst danach die What's Hot Reports. 

Nachkommastelle in CSV-Export der Logfileanalyse unterscheidet sich nicht mehr von UI

Der Export der Suchbegriffstabelle von Analytics weist die CTR nun genauso wie die Tabelle mit zwei Nachkommastellen aus. 

ProductEventData-Abfrage angepasst


Analytics liefert nun wieder eine korrekte HttpResponse mit Fehlercode 404 zurück, wenn ein angefragter Job nicht existiert. Dadurch kann FACT-Finder dann anschließend einen neuen Job erstellen. 

BouncyCastle dependency für PDF-Reporterzeugung wieder implementiert


Die BouncyCastle dependency wurde wieder hereingenommen, da sie für den PDF Export zwingend erforderlich ist. Es ist nötig bei bestehenden Setups veraltete BouncyCastle Versionen aus dem Tomcat/lib Verzeichnis zu löschen oder zu aktualisieren. 

Analytics-Proxy Requests auf nicht Analytics-Seiten behoben

Es wurde ein Fehler behoben, welcher jede Sekunde Tabellen neu laden ließ.

Cluster-Eigenschaft geht in CategoryPath-Facetten nicht mehr durch Namensänderung verloren


Das cluster-Attribut von KategoriePfad-Facetten bleibt nun erhalten, wenn der Name der Facette geändert wird.

Übernahme eines Thesaurus-Eintrags vom Child- in den Parent-Channel nun korrekt möglich

Das Info-Icon für Einträge, die nur in einem Kindchannel existieren, suggeriert nicht mehr das der Eintrag über einen Klick in den Eltern-Channel übernommen wird, da diese Funktion nicht existiert. 

Thesaurus Einträge lassen sich über die Suchdiagnose nun korrekt bearbeiten

Thesaurus Einträge lassen sich nun auch wieder über die Suchdiagnose bearbeiten. 

Speichern der Facettenkonfiguration angepasst


  • Das Speichern der Konfigurationen wurde umgestellt, sodass es nicht mehr zu einem inkonsistenten Zustand zwischen Parent und Child Channeln während des Speicherns kommen kann.
  • CampaignConfigurationSaved Event hat versehentlich die falsche Basis-Klasse erweitert: ConfigurationSave. Nun wird die korrekte Klasse erweitert: ConfigurationSaved.
  • Reihenfolge der ConfigurationSaveConfigurationSaved und ConfigurationFlush Events geändert.
    Vorher:
  • ConfigurationSave
  • ConfigurationSaved
  • ConfigurationFlush

Jetzt:

  • ConfigurationSave
  • ConfigurationFlush
  • ConfigurationSaved
    Begründung:
    ConfigurationFlush sorgt dafür, dass die Caches der Configuration-Reader freigegeben werden, und dass der nächste Aufruf von ConfigurationReader.getConfiguration() die neue Version liefert. Wenn ConfigurationSaved vor ConfigurationFlush ausgelöst wird, und Event-Listener von ConfigurationSaved ConfigurationReader.getConfiguration() aufrufen, würden sie die alte Version der Konfiguration sehen.
  • (migration-required) FACT-Finder erstellte beim Bearbeiten von Konfigurationen Kopien der Konfigurations-Dateien. Darin wurden die Änderungen zwischengespeichert. Diese Dateien waren auch als "Temp-Konfigurationen" bekannt. Diese sind vollständig entfernt worden. Der Bearbeitungszustand wird nun ausschließlich im Arbeitsspeicher gehalten. Gelöschte fff.properties Einstellungen:
  • recommendationConfig.tmp
  • rankingConfig.tmp
  • dqServicesConfig.tmp
  • campaignsFile.tmp
  • xmlConfig.tmp
  • xmlConfig.suggest.tmp

Feldübersicht ohne ConfiguratorModul nicht mehr nutzbar


Die Feldübersichtsseite bleibt nun deaktiviert wenn der Nutzer keine Berechtigungen hat Feldeinstellungen zu ändern, die Seite aber betreten darf. Dies trifft beispielsweise auf ImportManager zu. 

Tracking

Tracking-Validierung berücksichtigt nun pos-Parameter


Die Tracking-Validierung berücksichtigt nun auch den pos-Parameter.

Campaign Manager

Behoben: ActiveTimes der Kampagnen nach Editieren deaktiviert


Vorhandene ActiveTimes im Kampagnen Editor werden jetzt nach dem Editieren wieder aktiviert.

Fehler bei Kategoriepfad-Filterverarbeitung in Beraterkampagnen-Produktsets behoben


Über Suchparameter gepushte Produkte haben zu 0-Treffer Seiten geführt, wenn diese Suchparameter einen Filter auf ein KategoriePfad-Feld enthielten. Dies wurde behoben.

Anzeige von langen Kampagnennamen geändert

Die Anzeige von langen Namen von Kampagnen und manuellen Empfehlungen wurde behoben.

Substringfilter in Produktliste wird nun korrekt angewendet


Substring Filter werden nun auch in der UI korrekt angewendet. 

Kriterium Parameter: simiFirstRecord eingebaut


Der Kampagnen Parameter result:simiFirstRecord heißt nun result:scoreFirstHit

Mehrfach-Deaktivierung von Kampagnen wird nun dauerhaft gespeichert


Das Deaktivieren von Kampagnen über die Mehrfachauswahl funktioniert jetzt auch für Childchannel. 

Neue Einstellung zur Suchergebnisdefinition in Beraterkampagnen


Es wurde eine neue Einstellung hinzugefügt, welche es erlaubt zu entscheiden, ob das Suchergebnis den gesamten Fragen-Antwort-Baum von Beraterkampagnen enthalten soll, falls eine Beraterkampagne aktiv ist. Die Einstellung befindet sich in den fff.properties und heißt generateAdvisorTree. Der Defaultwert ist true und damit analog zum bisherigen Verhalten.

Bug behoben, der zu Endlosschleife in der Suchoberfläche geführt hat

Ein Filter direkt auf einem Multi-Attributsfeld konnte in manchen Fällen zu einer Endlosschleife in der Suchoberfläche führen. Dies wurde behoben. 

Fehler beseitigt, der dazu führte, dass InstoreAds werden nicht gespeichert wurden


Es konnte passieren, dass InstoreAds Änderungen nicht gespeichert wurden, wenn ein Fehler während einer Transaktion auftrat. Dies wurde behoben.

Anwendungsstart wird nicht mehr durch NoSuchMethodException im Kampagnen-Handling verhindert


7.3: Validierung für doppelte FeedbackTextSettings-Labels wurde entfernt.

NG: Migration für doppelte FeedbackTextSettings-Labels wurde hinzugefügt. 

Fehlermeldung für ungültige Kampagnenkonfiguration angepasst


Die Fehlermeldung wenn eine ungültige Kombination von Kampagnentyp, Kriterien und PushedProducts-Modus eingestellt wird, wurde verbessert. 

Bug, der das Löschen von Kampagnen verhinderte, behoben

Kampagnen ohne definiertes Anfangsdatum können nun auch über die Oberfläche gelöscht werden. 

Namenskonflikte bei Custom-Parametern verhindert


Ein custom parameter innerhalb eines Kriteriums wird nun in der Form custom:<parameter> abgespeichert um Namenskonflikte mit anderen Parametertypen zu verhindern.

7.2 und 7.3 Aus Kompatibilitätsgründen werden custom parameter ohne den custom-prefix immer noch akzeptiert.

AdvisorStatus-Fehlermeldungen angepasst


Die Fehlermeldungen bei falscher Benutzung des AdvisorStatus wurden verbessert.

Kampagnentrigger-Felder müssen kein Teil des Suchergebnisses mehr sein


Kampagnen, welche auf der Detail- oder Warenkorbseite angezeigt werden sollen und "Feld" als Kriterium ausgewählt haben, werden nun korrekt angezeigt auch wenn das Kriteriumsfeld kein Suchergebnisfeld ist. Vorher konnten solche Felder Kampagnen nicht auslösen. 

Personalization

Verbessertes Verhalten bei invaliden Kampagnen


Kampagnen und die dazugehörigen Einstellungen für Feedback Texte werden jetzt beim Start von FACT-Finder korrekt validiert. 

Recommendation Engine

Recommender-Verhalten nun abhängig von anfragendem Service


Es wurden einige Änderungen in Bezug auf den Recommender vorgenommen. Wenn der Recommender bei einer Anfrage nicht verfügbar ist, unterscheiden sich die Reaktionen je nach anfragendem Service:

  • Bei einer Suchanfrage wird dem Suchergebnis ein leeres Empfehlungsergebnis hinzugefügt, um zu verhindern, dass Suchen sich verzögern oder Fehler werfen.
  • Werden direkt Empfehlungen zu einem Produkt oder Produkten angefragt, beispielsweise über den RecommenderWebservice, wird eine RecommenderNotReadyException geworfen, damit ersichtlich ist, dass der Recommender im Moment nicht antworten kann.
  • Sollten Kampagnen angefragt werden und der Recommender ist nicht verfügbar, gibt der Recommender ein leeres Ergebnis zurück, damit andere definierte Produktsets ausgespielt werden können. Es wird maximal alle 10 Minuten eine Logausgabe erzeugt.  

Reco-Tool auf Produktdetailsseite aktualisiert sich nun sofort

Das Reco-Tool auf der Produktdetail-Seite aktualisiert sich nun sofort mit jeder Änderung und nicht erst nach dem Speichern einer Transaktion.

matchOn-Feld entfernt


Das Recommender-setting matchOn zur Produkt-Identifikation wurde entfernt. Diese Aufgabe wird ab jetzt ausschließlich durch das Feld mit der Rolle trackingProductNumber abgedeckt. Bei der Migration auf FF 6.11 wird versucht das trackingProductNumber field entsprechend zu setzen. Ab NG gibt es auch die trackingProductNumber nicht mehr. Stattdessen wird hier die Rolle productNumber verwendet.

Produktabruf funktioniert nun auch bei nicht übereinstimmenden TrackingProductNumber- und Id-Feld


7.3: Es wurde ein Fehler behoben, der das korrekte Holen der Produkte für die Recommendation Engine verhinderte, wenn das TrackingProductNumber-Feld nicht mit dem Id-Feld für den Datensatz übereinstimmte.

Fehler, der Recommendation Engine-Einstellungen zurücksetzt, wurde behoben


Ein Fehler, durch den Änderungen verschiedener Einstellungen auf der Recommendation Engine - Seite die Recommendation Engine Matrix zurücksetzten, wurde behoben.

Performance der Recommendation Engine verbessert


Die Performance der Recommendation Engine wurde verbessert.

Start der Anwendung wird bei fehlerhafter Konfiguration nun verhindert


Wenn das Lesen der Recommender-Konfiguration fehlschlägt, bspw. aufgrund von xml-fehlern, so wird FF nun korrekterweise nicht starten.

Upselling Pushed Products bei deaktivierter Recommendation Engine nicht mehr anwählbar


Die Option der Upselling Pushed Products steht für Kampagnen nicht mehr zur Verfügung, wenn die Recommendation Engine deaktiviert ist, da diese darauf basieren.

Paralleler Ladevorgang der Recommendations-DB beim App-Start verhindert


Die Recommendation-DB wird nicht mehr von mehreren Threads gleichzeitig geladen. 

Installation Assistant / Migrator

Installer speichert unbekannte Produktdateien nun als CSV


Wird per Installationswizard eine Produktdatei von einer URL geladen, die keine ersichtliche Endung enthält, speichert der Wizard die Datei als CSV-Datei ab.   

Löschen und neu Erstellen eines Channels speichert die alte Konfiguration nicht mehr


Der Cache wird nun nach dem Löschen geleert, so dass ein Erstellen eines gleichnamigen Channels keine alten Konfigurationen mehr erhält. 

Kampagnen des Quell-Channels in Children bei Parent-Channel-Einrichtung werden nun übernommen


Der Prozess des Klonens eines Channels wurde angepasst: Die geklonten Kampagnen behalten ihren Releasestatus nun bei. Früher wurden sie deaktiviert. Dies soll den Bearbeitungsaufwand für einen geklonten Channel verringern. Weiterhin werden keine Instore-Ads-Kampagnen mehr mitgeklont. Wird ein Channel als Parent geklont, erhalten der Parent selbst sowie alle Kinder, welche zusammen mit dem Parent erstellt werden, die Kampagnen des Ausgangschannels.

Auf der Kampagnenübersichtsseite gibt es nun zwei neue Buttons, welche es erlauben alle selektierten Kampagnen zu releasen oder zu deaktivieren. Außerdem wurde dem "Kampagne-Klonen"- Button auf der Kampagnenübersichtsseite eine Option hinzugefügt, mit deren Hilfe festgelegt werden kann, ob die geklonte Kampagne ihren Releasestatus beibehalten oder deaktiviert werden soll.

Channel-Wizard erstellt nun keine invalide Suggest-Konfigurationen mehr


Der Channel-Wizard konnte invalide Suggest-Konfigurationen erzeugen, wenn PostProcessoren oder Provider im erzeugten Child überschrieben oder gelöscht waren. Dieses Problem wurde behoben. 

Migrator kann nun auch mit Bean-Namen in Suggest-Konfiguration umgehen


Die in der Suggest Konfiguration referenzierten Klassen werden nun auch dann korrekt interpretiert, wenn der Klassenname als Beanname angegeben ist.

Überprüfung von Felder-Facetten-Paaren auf steps und number implementiert


In der Migration nach 7.1 wurden zwei Fehler behoben: Der Migrator wird die minResultCoverage einer Facette auf 100 (%) begrenzen, falls der Wert 100 übersteigen sollte.

Der Migrator wird weiterhin sicherstellen, dass Felder vom Typ "number" nur Facetten mit "steps" zugeordnet sind. Falls eine Facette mit "steps" einem nicht-nummerischen Feld zugeordnet ist, wird der Feldtyp auf "number" geändert. Fehlende virtuelle Felder für Facetten mit "steps" werden der Konfiguration mit dem Typ "number" hinzugefügt. Falls eine Facette mit "steps" auf ein normales, nicht existentes Feld verweist, wird eine Fehlermeldung ausgegeben, damit dieses Problem vom Nutzer behoben werden kann.

Datenimport-Oberfläche sollte nun nicht mehr grundlos deaktiviert werden

Ein Fehler wurde behoben durch den das Panel zur Einstellung automatischer Datenimports im Einrichtungsassistenten deaktiviert wurde.

Channelwizard schlägt bei unterschiedlichen Quellen nicht mehr fehl


Ein Fehler wurde behoben durch den der Channel Wizard fehlschlagen konnte und in der UI dennoch ein Erfolg vermeldet wurde.

UI: Management Interface

Alignment Issue im PreprocessorTool behoben


Der Lösch-Button ist nun neben dem Textfeld für die Source Words.

RankingRules: Darstellung von Oder-Kriterien wurde angepasst

Verschiedene Criteria von einer TextCompare-Rankingregel werden in der Rankingregel-Beschreibung mittels "oder" verknüpft. 

Deployment-Fehlermeldungen nun wieder lesbar


Fehlermeldungen auf der Deploymentseite werden nun wieder lesbar angezeigt. Die Deploymentseite erlaubt das Deployen der Ressourcen eines Moduls nun nur noch, wenn das Modul auch aktiviert ist. 

Korrektes Zurücksetzen der Konfigurationsänderungen bei Recommendation-Validierungsfehlern


Validierungsfehler auf der Recommendations-Seite setzen die Konfigurationsänderungen korrekt zurück.

DifferenceTooltip zeigt nun aktuellen Wert an gelöschten Matrix Setting

Die Tooltips in der Recommendation-Matrix, die über Unterschiede in der Konfiguration von Parent- und Child-Channels informieren sollen, aktualisieren sich nun ordnungsgemäß mit Änderungen in der Matrix.

Analytics zeigt "es ist ein parent"-Meldung für Nicht-Parent-Channel nicht mehr an


Eine fehlerhafte Fehlermeldung im Analytics-Ergebnis, die behauptet, dass der untersuchte Channel ein Parent-Channel sei, wurde entfernt.

Einstellung für parallele und aufeinanderfolgende Anfragen implementiert


Die Diagnose-Such-Seite führt eine Vielzahl von Service-Anfragen an FF durch. Diese Anfragen werden normalerweise parallel ausgeführt, um die Ladezeit der Seite zu reduzieren. Wenn eine Transaktion offen ist, kann es passieren, dass manche der Service-Anfragen in einen Timeout laufen, weil eine langsame Anfrage das Lock auf die Transaktion noch hält. Es gibt nun ein neues Setting in der fff-ui.properties Datei, mit dem man die UI anweisen kann diese Anfragen seriell anstatt parallel abzuschicken. server.servicecall.diagnostic.mode kann demnach die Werte PARALELL (default) und SERIAL annehmen. 

Parent-Channel zeigt keine Parent-Channel-Fehler in der Analytics-Diagnose mehr


Die Analytics-Diagnose zeigt keine Fehler mehr für Parent-Channel an. 

Listing-Seite nun auch mit unbenannten virtuellen Feldern möglich


Virtuelle Felder ohne Namen verhindern nun nicht mehr die Benutzung der Listing Seite.

Versionsangaben finden sich wieder unter System -> Systeminformationen


Die Anzeige der Versionsnummern in der Systemübersichts-Seite wurde gefixt. 

Leere Tooltips werden nicht mehr angezeigt

Es werden keine Tooltips mit leeren Nachrichten angezeigt.

In Analytics werden keine scheinbar unpassenden Thesauruseinträge mehr gezeigt


Die Übersicht über die für einen Suchbegriff aktiven Thesauruseinträge im Analytics-Bereich zeigt nun nur noch Thesauruseinträge, die auch tatsächlich bei einer Suche greifen würden. Bisher wurden fälschlicherweise auch Begriffe angezeigt, welche den Suchbegriff lediglich enthielten.

Thesaurus View: Sortieren nach "Bidirektional" liefert keine NullPointerException mehr


Ein Fehler wurde behoben, der verhinderte, dass Thesauruseinträge auf der Thesaurusseite des Uis nach Bidirektionalität sortiert werden können. 

Stopwort Relevanz Checkbox verursacht keine Transaktionstimeouts mehr


Die Checkbox auf der Stopwort-Seite um die Relevanz aller Stopwörter auf einmal zu ändern konnte zu Transaktionstimeouts führen. Dies wurde behoben. 

Problem mit ASN Filter bei CWM8 (ITB) behoben


Ein Fehler wurde behoben, der verhinderte, dass Facetten, die von einer Facette mit vielen Werten abhängen, zum Editieren geöffnet werden konnten. 

Thesaurus: Anzeige doppelter Validationsnachricht behoben

Beheben von einem Fehler, bei welchem eine Validierungsnachricht doppelt angezeigt wurde. 

Bug bei Weiter-Button im Kampagnen-Assistenten behoben

Es wurde ein Fehler behoben, bei welchem der Weiter-Button vom Kampagnen-Assistenten permanent deaktiviert blieb. 

Behoben: Fehler nach dem Aktivieren von Stoppwörtern


Änderungen an den Einstellungen der Suchlogik innerhalb von Suggest eines Parent Channels konnte zu Fehlermeldungen führen. Dies wurde behoben. 

Von XML nicht unterstützte Zeichen werden nun nicht mehr übertragen


Zeichen, die für die Übertragung per XML invalide sind, werden jetzt vor der Übertragung entfernt. So werden Fehler vermieden, die vorher zum Beispiel dann aufgetreten sind, wenn man über den Installer einen Channel mit einer Importdatei, welche Steuerzeichen enthält, einrichten wollte. 

Dropdown-Menüs sind nun dynamisch


Dropdown-Menüs wachsen mit dem Inhalt bis zu einer bestimmten Größe, sodass die Inhalte besser sichtbar sind. 

Feldpriorisierungsseite: Validierungsfehler beseitigt


Wenn mehrere Einträge auf der Feldpriorisierungsseite invalide sind wird die Fehleranzeige nun korrekt aktualisiert sobald ein Fehler behoben wurde. 

Diverse Fehler in der Suchdiagnose behoben

Es wurden Fehler auf der Such Diagnose Seite behoben, die das zurück gehen im Browser verhinderten. 

Bug behoben, durch den beim Ändern des Display-Modus kürzlich hinzugefügte Suggest-Typen verloren gingen


Ein Fehler auf der Suggest-Einstellungsseite wurde behoben durch den ein neu hinzugefügter Suggesttyp verschwinden konnte, wenn der Display-Modus gewechselt wurde.

Umbenennen von Suggest-Typen führt nicht mehr zu Fehlermeldungen


In bestimmten Fällen konnte das Umbenennen von Suggesttypen zu einer Fehlermeldung in der UI führen. Dieser Fehler wurde behoben. 

Hinzufügen von Thesaurus & Campaigns auf Searchterms-Seite nicht mehr fehlerhaft

Die Buttons von Thesaurus- und Präprozessor-Einträgen auf der Analyse-Suchbegriffe Seite sind nun nicht mehr deaktiviert wenn eine Transaktion gestartet wird. 

Navigationsseite bei gelinkten Facetten nicht mehr aktiv

Ein Fehler wurde behoben, bei welchem die Navigations-Facette im verknüpften Modus bearbeitbar war.  

UI: Search

Suchdiagnose lädt nicht mehr endlos nachdem Parent-Channel in den Bearbeitungsmodus versetzt wird

Ein Fehler wurde behoben, durch den in manchen Fällen die Diagnosesuche nicht mit dem Laden fertig wurde.

Suchdiagnose-UI lädt nicht mehr endlos im Child-Channel


Ein Fehler wurde behoben durch den bei Verwendung des UI-Parameters server.servicecall.diagnostic.mode mit Wert SERIAL die Diagnose-Suche endlos lief. 

Operating

Speicherverbrauch durch Recommendation-Engine während Table-(Re-)Load angepasst


Das Format der Recommendation-Datenbank wurde angepasst. Dadurch belegt die Datenbank nicht nur weniger Platz auf der Platte sondern benötigt beim Neuladen auch deutlich weniger Speicher im Heap. Aufgrund dieser Änderung muss ein erneuter Recommendation-Import durchgeführt werden. Recommendation-Datenbanken im alten Format werden nicht mehr gelesen. 

Klarere Fehlermeldung für Probleme beim Erstellen temporärer Dateien


Die Fehlermeldung, wenn das Erstellen einer temporären Datei fehlschlägt, wurde verbessert. Nun wird das tatsächliche Verzeichnis genannt, in dem die Datei erstellt werden sollte. 

Response / APIs

%25 führt nicht mehr zu Parsefehlern, wenn man es in einer Rest-Anfrage verwendet


Ein Fehler wurde behoben, bei welchem in der REST-API Parameter doppelt URL decodiert wurden.

reloadConfiguration lädt nicht mehr alle Channels neu


Ein Fehler wurde behoben bei welchem die REST-API reloadConfiguration immer Konfigurationen aller Channels neu geladen hat. 

AdvisorCampaign answerPath kann nun geparsed werden


Ein Fehler wurde behoben der das korrekte Verarbeiten des AdvisorStatus über die REST-API verhindert hat. 

Sonstiges

Default-Werte überschreiben implizit Einstellungen der Parent-Konfiguration in der Laufzeit-Konfiguration des Child-Channels nicht mehr


Das duplicateFilterField und die Einstellungen bezüglich des Suchcaches, wurden in die Vererbung aufgenommen. 

Textvergleich-Kriterien UI im View-Modus nun deaktiviert

Ohne offene Transaktion sind die Boxen im Textvergleich Ranking-Regeln Dialog nun deaktiviert. 

Backup kopiert Fallback nun


Es gibt nun auch eine standardmäßige Fallback-Datei für Kampagnen (campaigns/campaigns.xml). Dies ist nötig um unter anderem das korrekte Erzeugen eines Backups bei Transaktionsende zu gewährleisten. 

Attribut für Filtern nach unfacettierten Feldern eingeführt


Felder können bzw. müssen jetzt als <filterable> markiert werden (default ist true).

Sortierung nach Fuzzy / Exact auf FieldPrio Seite wirft keine ClassCastException mehr


Ein Fehler der zu Exceptions beim Sortieren auf der FieldPrio-Übersichtsseite führte, wurde korrigiert.

Unerklärliche Violation Exception beseitigt


Die Fehlermeldung wenn mehrere Facetten in einem Cluster von keiner Facette abhängen wurde verbessert.

Fehler bei Stopwords und ASO "überschrieben"-State behoben


Es wurde ein Fehler behoben, der dazu führte, dass der Überschrieben-Status von Stopwords-Einträgen und des "aktiv"-Häkchens der ASO falsch dargestellt werden konnte. 

ChannelWizard ist bei leerer Configuration nun deaktiviert


Es ist nun nicht mehr möglich den Channel Wizard zu starten wenn es keine konfigurierten Channel gibt, oder das Erstellen neuer Channel deaktiviert ist. 

UI-Validierungsfehler nun im Info-Level


Validierungsfehler die in der UI auftreten, werden nun im info-level statt im error-level geloggt. 

Weiterleitung zur SwaggerUI angepasst


Die Swagger-UI ist nun unter https://ng-demo.fact-finder.de/fact-finder/swagger-ui.html erreichbar, außerdem wurde eine Weiterleitung von ./ zur Swagger-UI hinzugefügt. 

SuggestWhitelist zeigt keine invaliden Änderungen mehr

Validation Fehler auf dem Suggest Whitelist Hinzufügen/Löschen-Dialog lassen die Tabelle nicht mehr neuladen.  

Reload Configuration lädt Channel-Liste nun neu


Der Reload Configuration Link auf der System-Übersichtsseite führt nun auch zu einem korrekten Neuladen der Channel-Liste. 

Download des Exports gibt keine 403 Fehler mehr aus


Beim Download von Export-Dateien wird der HTTP-User-Agent nun per Default auf "factfinder/version" gesetzt, wobei "version" durch die aktuelle FACT-Finder-Version ersetzt wird. Um den HTTP-User-Agent nicht zu setzen, kann den fff.properties der Eintrag httpUserAgent= hinzugefügt werden.

Keine doppelte Blacklist-Filterung der Tag Cloud mehr


Das TagCloud-Limit wird jetzt nach der Blacklist-Filterung angewendet. 

ProductCampaign berücksichtigt nun Ranking


Das Feature Ähnliche Artikel und dadurch auch die PushedProducts-Variante der Beliebtesten Artikel berücksichtigt nun die eingestellten Rankingregeln.

Ranking-Einfluss von 0% wird nun angezeigt


Der Einfluss des Rankings wird in der Suchergebnistabelle nun auch angezeigt, wenn dieser für ein Produkt bei 0% liegt.

Kategoriepfad nun möglich als Trigger für ProduktDetail-Kampagnen

Es wurde ein Fehler behoben, welcher das Hinzufügen von einem Kategoriefeld als Kampagnenauslöser in einer Produktkampagne verhinderte. 

Multi-Attribut-Facetten - Deaktivierung für die ASN beziehungsweise Navigation nun möglich

Es ist nun möglich Facetten explizit für die Suche oder Navigation zu deaktivieren und damit von der ASN-Generierung auszuschließen.

Hat man beispielsweise eine Multiattributs-Facette MultiFilter angelegt und eine Facette für das spezielle Attribut Gewicht aus diesem Feld so war es bisher nicht möglich das Attribut Gewicht von der ASN-Generierung auszunehmen. Die Deaktivierung der Gewichts-Facette wird nun dafür sorgen, dass keine Facette für dieses Attribut generiert wird. 


Alle Facetten müssen nun jederzeit sowohl in der Such- als auch der Navigationsliste stehen. Durch die Migration kann es dabei zu teilweise invaliden Konfigurationen kommen wenn Teile eines Clusters kopiert werden, die in der anderen Liste nicht existieren. Hier ist eine manuelle Bearbeitung erforderlich. 

Anlegen einer Ranking-Rule bei ehemals existierender Gruppe jetzt möglich

Ein Problem wurde behoben, dass das Anlegen einer Ranking Regel in einer existierenden aber leeren Gruppe verhindert hat. 

Ranking-Einfluss von 0% wird nun angezeigt werden


Der Einfluss des Rankings wird in der Suchergebnistabelle nun auch angezeigt, wenn dieser für ein Produkt bei 0% liegt. 

Präprozessor: IndexOutOfBoundsException bei Anlage des ersten Eintrages in Parent-Channel


Ein Fehler beim Hinzufügen von Präprozessoreinträgen in Parent Channeln wurde behoben.



Auf dieser Seite