Integration der FACT-Finder Suche per JSON / JSONP
Die Rückgabestruktur der JSON-Schnittstelle lehnt sich stark an der XML-Struktur an, jedoch handelt es sich um JavaScript-Objekte und –Listen, die Sie abfragen müssen. Um eine JSON-Rückgabe zu erhalten, müssen Sie dem format
-Parameter den Wert json
geben:
$stringEscapeUtils.escapeHtml($body)
Die Schema-Definition der JSON-Rückgabe finden Sie unter der URL
$stringEscapeUtils.escapeHtml($body)
Rückgabestruktur
{
"searchResult": {
"resultStatus": "resultsFound",
"resultArticleNumberStatus": "noArticleNumberSearch",
"fieldRoles": {
"trackingProductNumber": "products_id",
"brand": "manufacturers_name",
...
},
"timedOut": false,
"resultCount": 1238,
"searchTime": 385,
"simiFirstRecord": 9991,
"simiLastRecord": 8791,
"channel": "de",
"searchParams": "... URL to current search result ...",
"searchControlParams": {
"disableCache": false,
"generateAdvisorTree": false,
"idsOnly": false,
"useAsn": true,
"useCampaigns": true,
"useFoundWords": false,
"useKeywords": true
},
"campaigns": [ ...This object holds information about the matching campaigns... ],
"singleWordResults": null,
"breadCrumbTrailItems": [
{
"associatedFieldName": null,
"searchParams": "... URL to get back to this step ...",
"text": "bmx",
"type": "search",
"value": "bmx"
},
...
],
"sortsList": [
{
"description": "sort.relevanceDescription",
"name": null,
"order": "desc",
"searchParams": "... URL to select this sort option ...",
"selected": true
},
...
],
"resultsPerPageList": [
{
"default": true,
"selected": true,
"value": 12,
"searchParams": "...URL to select this results per page count..."
},
...
],
"paging": {
"currentPage": 1,
"pageCount": 104,
"resultsPerPage": 12,
"firstLink": {
"caption": "1",
"currentPage": false,
"number": 1,
"searchParams": "... URL to first page ..."
},
"lastLink": { ... Object for last page ... },
"previousLink": {... Object for previous page ... },
"nextLink": {... Object for next page ... },
"pageLinks": [
{
"caption": "1",
"currentPage": true,
"number": 1,
"searchParams": "... URL to page link ..."
},
...
]
},
"groups": [
...
],
"filters": [
{
"name": "category",
"substring": false,
"valueList": [
{
"exclude": false,
"type": "or",
"value": "299"
}
]
}
],
"records": [
{
"position": 1,
"id": "221910",
"searchSimilarity": 99.91,
"simiMalusAdd": 0,
"foundWords": [],
"keywords": [... List with SEO keywords ...],
"record": {
"products_retail_price": "299.99",
"category0": "Bikes",
... other fields as key-value-pair ...
}
},
...
]
}
generateAdvisorTree
keinen Einfluss hat und nur noch aus Kompatibilitätsgründen vorhanden ist. Der damit ursprünglich generierte AdvisorTree wird immer erstellt und mit dem Suchergebnis ausgeliefert, so denn eine Beraterkampagne aktiv ist. Da die Schnittstelle auf URLs basiert, enthalten die weiterführenden searchParams
Elemente URLs. Bei Filter-Objekten ist dies beispielsweise die URL, die Sie übergeben müssen, um auf den entsprechenden Wert zu filtern bzw. die Filterung aufzuheben.
Statusinformationen
Über die Schlüssel resultStatus
und resultArticleNumberStatus
erhalten Sie zum einen die Information, ob ein Ergebnis gefunden wurde und zum anderen, ob eine Artikelnummernsuche durchgeführt wurde (und deren Status). Mögliche Werte sind resultsFound
, nothingFound
, errorOccured
und noArticleNumberSearch
(nur resultArticleNumberStatus
).
Sollte während der Suche eine Zeitüberschreitung aufgetreten sein, so erhalten Sie true
als Wert von timedOut
zurück. Suchen, die die Zeit überschritten haben, wurden abgebrochen und sind unter Umständen unvollständig.
Um nachzuvollziehen, ob die Suchanfrage von der FACT-Finder Anwendung korrekt entgegengenommen wurde, stehen die Informationen unter channel
(=Datenbankname), searchParams
(=URL des Suchergebnisses) und searchControlParams
(=Anzeigeoptionen des Suchergebnisses) zur Verfügung.
Der Wert von resultsCount
stellt die Anzahl der insgesamt gefundenen Artikel dar. Unter searchTime
wird die benötigte Suchzeit in ms zurückgegeben. Die Zahlen bei simiFirstRecord
und simiLastRecord
geben Aufschluss über die Ähnlichkeit des ersten und letzen Datensatzes im Ergebnis. Der Wertebereich reicht von 0 bis 10000.
fieldRoles
Felder der FACT-Finder-Produktdatenbank können Rollen haben. In dieser Struktur berichtet FACT-Finder darüber welche Felder für welche Feld-Rollen konfiguriert wurden. Mögliche Rollen sind:
brand
– Hersteller-Feld.campaignProductNumber
– Artikelnummer, über die Produkte aus dem Kampagnen-Manager referenziert werden.deeplink
– URL zur Produktseite.description
– Beschreibung des Produkts.displayProductNumber
– Artikelnummer, die zur Anzeige verwendet wird.ean
– EANimageUrl
– URL zum Bild des Produkts.price
– Preis-Feld.productName
– Name des Produkts.trackingProductNumber
– Artikelnummer, die für des Tracking verwendet wird.masterArticleNumber
– Artikelnummer des Haupt-Artikels bei Produktvariationen.
Der Schlüssel ist die jeweilige Rolle, der Wert der Feldname. Ein Feld kann mehrfach vorkommen, wenn ihm mehrere Rollen zugewiesen wurden.
campaigns
Die Rückgabeobjekte im Schlüssel campaigns
beziehen sich auf das Kampagnen Manager Modul. Details hierzu finden Sie in der zugehörigen Integrationsdokumentation.
singleWordResults
"singleWordResults": [
{
"word": "rot",
"recordCount": 513,
"previewRecords": [{...list with records, see description below...}]
},
...
],
Sollte dieses Feature aktiviert sein und die Suche kein Ergebnis liefern bzw. die Ähnlichkeit des besten Artikels unter einen eingestellten Grenzwert fallen, so wird nach den einzelnen Wortbestandteilen der Suchphrase gesucht. Die zurückgegebenen Einzelwort-Objekte haben als Attribute das jeweilige Wort (word
), die Treffermenge, die bei einer Suche nach diesem erzielt wird (recordCount
), und optional auch noch eine bestimmte Anzahl von Produkten aus dem jeweiligen Suchergebnis (previewRecords
). Diese haben den identischen Aufbau wie die normalen Suchergebnisse. Die Anzahl der zurückgegebenen Wörter wird jedoch in einer Konfiguration begrenzt.
breadCrumbTrailItems
Hier finden Sie Objekte, die zur Generierung eines Brotkrümelpfads genutzt werden können. Jedes Objekt in dieser Liste entspricht einem Schritt des Pfades. Über den Wert unter type können Sie feststellen, welche Aktion zu diesem Schritt geführt hat. Der Name des Schrittes, der dem Suchbegriff oder dem Filterwert entspricht, finden Sie als Wert von text. Der Wert des Schlüssels searchParams ist die URL, die aufgerufen werden muss, um wieder zu diesem Punkt zu gelangen. Falls die Aktion einem Feld in der Suchdatenbank zugehörig ist (z. B. Filterung auf ein Feld), so steht der Name des Feldes im Attribut associatedFieldName.
sortsList
Jedes dieser Objekte entspricht einer Sortiermöglichkeit des Ergebnisses. Unter description
finden Sie normalerweise einen Schlüssel, der für eine internationalisierte Sprachausgabe verwendet werden kann. Der Schlüssel name
enthält bei der Relevanzsortierung den Wert null
, ansonsten steht hier der Name des Feldes, nachdem sortiert werden soll. Die Sortierreihenfolge ist unter order
angegeben, mögliche Werte sind hier asc
und desc
. Welches Kriterium gewählt ist, erfahren Sie über den Wert von selected
. Die URL unter searchParams
stellt die zu dieser Sortierung gehörende URL zur Verfügung.
resultsPerPageList
Im Management Interface können Sie konfigurieren, wie viele Artikel auf einer Ergebnisseite maximal dargestellt werden sollen. Jede konfigurierte Anzahl wird als value
eines dieser Objekte zurückgegeben. Der boolesche Operator unter selected
gibt an, ob dieser Wert ausgewählt ist; der boolesche Operator unter default
gibt an, ob es sich bei der Anzahl um den Standardwert handelt. Die URL unter searchParams
stellt die zur Auswahl der Ergebnismenge gehörende URL dar.
paging
Über die Werte, die Ihnen hier zurückgegeben werden, können Sie die Seitennavigation aufbauen. Die Anzahl der Seiten erhalten Sie über pageCount
, die maximale Anzahl Ergebnisse je Seite unter resultsPerPage
. Die Nummer der aktuellen Seite steht unter currentPage
.
Bei den Punkten firstLink
, lastLink
, previousLink
, nextLink
und pageLinks
erhalten Sie entweder ein Objekt oder eine Liste von Objekten zurück, die jeweils einen Seiten-Link beschreiben. Hier finden Sie den Text, der für die Seite dargestellt werden soll, als Wert des Schlüssels caption
. Anstatt der Seitenzahl (1, 2, 3,…) ist es auch möglich, den Produktbereich (1-10, 11-20,…) generieren zu lassen. Daher kann sich dies vom Wert bei number
unterscheiden. Der Wert von currentPage
gibt an, ob es sich bei der Seite um die aktuell dargestellte Seite handelt oder nicht.
group
Siehe Integrationsdokumentation des ASN-Moduls für weitere Informationen.
filters
Unter filters
sind die aktuell gesetzten Filter zu finden. Diese sind zwar auch unterhalb von group
über die selectedElements
zu finden, müssten daraus aber extrahiert werden. Mit filter
finden Sie alle Informationen an einer Stelle. Dies kann z. B. verwendet werden, um alle aktuell selektierten Elemente zusammen anzuzeigen.
Die filters
sind entsprechend der Datenstruktur im FACT-Finder Kern aufgebaut und enthalten folgende Informationen: name
enthält den Daten-Feldnamen, über den der Filter angewendet wurde. Der boolean Wert in substring
besagt, ob es sich hier um einen Filter handelt, der das ganze Feld gefiltert hat oder nur ein Teil übereinstimmen musste. In der valueList
sind dann die einzelnen Filter-Werte als Objekte hinterlegt. Jedes Filter-Wert-Objekt enthält unter value
den eigentlichen Filter-Wert (String), unter exclude
als boolescher Wert die Information, ob es sich um einen negativen Filter handelt (zeige alle Produkte, die diesen Wert nicht enthalten) und über type
wird bei mehreren Filtern mitgeteilt, wie diese miteinander logisch verknüpft wurden, beziehungsweise wie dieser Filter gewirkt hat: inklusiv (or
) oder exklusiv (and
).
records
In records
finden Sie die Suchergebnisse, die auf der gewählten Seite angezeigt werden sollen. Jedes Suchergebnis-Objekt besitzt die ID des Produktes in der FACT-Finder Datenbank (id
), dessen Position im Ergebnis (position
), die errechnete Ähnlichkeit zum Suchbegriff (searchSimilarity
), sowie die Abwertung des Produktes (simiMalusAdd
). Die Abwertung eines Produktes kann viele Faktoren als Ursache haben, der häufigste Grund dafür sind Businessregeln. Die Feldinformationen eines Produktes finden Sie unter record
. In dieser Liste bilden jeweils der Feldname und dessen Wert ein Paar.
Die Werte unter keywords
werden durch das SEO Enhancer Modul geliefert, eine genaue Beschreibung hierfür finden Sie in der zugehörigen Integrationsdokumentation.
JSONP-Integration
Zusätzlich zur JSON-Schnittstelle verfügt die JSONP-Schnittstelle über die Möglichkeit, einen Callback-Methodennamen mitzugeben, der diese Funktion beim Client-System aufrufen kann.
Der Aufruf des JSONP-Interfaces wird über den Parameter format=jsonp
durchgeführt, der Methodennamen wird über den Parameter callback
übergeben.
$stringEscapeUtils.escapeHtml($body)
Sie können JSONP bei allen Schnittstellen verwenden, die auch JSON unterstützen.