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 ...
        }
      },
      ...
     ]
}
Bitte beachten Sie, dass der Parameter 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 – EAN
  • imageUrl – 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.

Auf dieser Seite