> ## Documentation Index
> Fetch the complete documentation index at: https://dokumentation.websale.de/llms.txt
> Use this file to discover all available pages before exploring further.

# search - Sortierung und Filterung

> Der search-Knoten konfiguriert die interne Produktsuche und Listing-Seiten: Filter, Sortieroptionen, Treffer pro Seite sowie wiederverwendbare Regeln.

export const KonfigDeeplink = ({node}) => <>
    Die Einstellung kann über folgenden Link direkt im Admin-Interface geöffnet werden:{" "}
    <code>{`https://<shop-domain>/admin/config/${node}`}</code>{" "}
    (<a href="/konfiguration/konfigurations-deeplinks">Deeplink-Übersicht</a>)
  </>;

Der Knoten `search` steuert die interne Produktsuche (nicht die WEBSALE Search) und Listing-Seiten im Shop - z.B. welche Filter angeboten werden, welche Sortieroptionen verfügbar sind und wie viele Treffer pro Seite angezeigt werden. Er trennt die Einstellungen für Kategorie und Suchergebnissen und erlaubt die Definition einzelner Filter und Sortierregeln als wieder verwendbare Bausteine.

***

## `search*` - Grundstruktur

Nachfolgend der Grundaufbau des Knotens `search`:

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
  "search": {
    "categoryNavigation": {},
    "productSearchNavigation": {},
    "productFilter": {},
    "productSortOption": {}
  }
}
```

#### Parameterbeschreibung

| **Parameter**             | **Beschreibung**                                                               |
| ------------------------- | ------------------------------------------------------------------------------ |
| `categoryNavigation`      | Steuert Filter, Sortierung und Treffer pro Seite auf Kategorie-/Listingseiten. |
| `productSearchNavigation` | Steuert Filter, Sortierung und Treffer pro Seite auf Suchergebnisseiten.       |
| `productFilter`           | Definiert einen Filterbaustein.                                                |
| `productSortOption`       | Definiert eine Sortierregel zur Verwendung in Kategorie- und Suchlisten.       |

***

## `search.categoryNavigation` - Filter und Sortierung für Kategorieseiten

Der Knoten `search.categoryNavigation` steuert, welche Filter und Sortierungen in Kategorieseiten verfügbar sind, welche Standardsortierung gilt sowie die Treffer pro Seite.

<KonfigDeeplink node="search.categoryNavigation" />

#### Beispielkonfiguration

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
  "defaultResultsPerPage": 16,
  "defaultSortOption": "search.productSortOption.relevance",
  "keepSortSettings": true,
  "productFilters": [
    "search.productFilter.price",
    "search.productFilter.clothingLength",
    "search.productFilter.clothingOuterMaterial",
    "search.productFilter.brand"
  ],
  "resultsPerPageOptions": [16, 24, 32],
  "sortOptions": [
    "search.productSortOption.relevance",
    "search.productSortOption.nameAsc",
    "search.productSortOption.nameDesc",
    "search.productSortOption.priceAsc",
    "search.productSortOption.priceDesc"
  ]
}
```

#### Parameterbeschreibung

| **Parameter**                                     | **Typ**     | **Beschreibung**                                                                                                                                       |
| ------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `productFilters`                                  | multiAssoc  | Liste der verfügbaren Filter aus `search.productFilter` (z.B. Preis, Marke, Material). Reihenfolge der Angaben entspricht der Reihenfolge im Frontend. |
| `sortOptions`                                     | multiAssoc  | Liste der für den Nutzer wählbaren Sortierungen aus `search.productSortOption` (z.B. Relevanz, Name oder Preis auf- absteigend).                       |
| `defaultSortOption`                               | singleAssoc | Voreingestellte Sortierung aus `search.productSortOption` beim ersten Laden einer Kategorieseite. (z.B. nach Relevanz).                                |
| `resultsPerPageOptions`                           | list (uint) | Einstellbare Werte für “Treffer pro Seite”. <br />Reihenfolge der Angaben entspricht der Reihenfolge im Frontend.  <br />Default: `[20, 50, 100, 200]` |
| `defaultResultsPerPage`                           | uint        | Voreinstellung der Treffer pro Seite (muss in `resultsPerPageOptions`ebenfalls angegeben sein).  <br />Default: `20`                                   |
| `keepSortSettings`<br />(**demnächst verfügbar**) | bool        | Behalte die gewählte Sortierung / Limit pro Nutzer-Session bei.  <br />Default: `true`                                                                 |

## `search.productFilter` - Produktfilter definieren

Der Knoten `search.productFilter` definiert einzelne Filter für Listing-Seiten (z.B. Marke, Material, Preis, Gewicht). Sie legen fest, welches Datenfeld gefiltert wird, wie der Filter funktioniert und ob es Abhängigkeiten zu anderen Filtern gibt.

<KonfigDeeplink node="search.productFilter" />

#### Beispielkonfiguration (`search.productFilter.weight`)

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
  "name": "weight",
  "filterDependency": { "filter": null, "options": [] },
  "type": {
    "keyword": { "optionsSort": "numResults", "multiSelect": true },
    "range": null
  },
  "target": {
    "field": "content.customProductField.weight",
    "special": null,
    "attribute": null
  },
  "scoreBoost": 0,
  "optionsDirectlyDisplayable": false,
  "unit": "",
  "numInitialOptions": 0,
  "minOptions": 0
}
```

#### Parameterbeschreibung

| **Parameter**                                               | **Typ**       | **Beschreibung**                                                                                                                                                                                                                                                                                                        |
| ----------------------------------------------------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `name`                                                      | string        | Technischer Name des Filters (z.B. `brand`, `price`).                                                                                                                                                                                                                                                                   |
| `filterDependency`                                          | object        | Definiert die Abhängigkeit zu einem anderen Filter.                                                                                                                                                                                                                                                                     |
| `filter`                                                    | singleAssoc   | Referenz auf den Abhängigen Filter aus `search.productFilter`.                                                                                                                                                                                                                                                          |
| `options`                                                   | list (string) | Erlaubte Optionen des abhängigen Filters, bei deren Auswahl dieser Filter aktiv wird.  <br /> Beispiel:   Filter “Größe” nur anzeigen, wenn die Kategorie Bekleidung gewählt ist:  <br />`{   "name": "size",   "filterDependency": {     "filter": "search.productFilter.category",     "options": ["clothing"]   } }` |
| `type`                                                      | oneOf         | Legt fest, wie der Filter arbeitet.                                                                                                                                                                                                                                                                                     |
| `keyword`                                                   | object        | Auswahlliste mit festen Werten (z.B. Marken, Farben).                                                                                                                                                                                                                                                                   |
| `optionsSort`                                               | enum          | Sortierung der Optionswerte.   <br />Mögliche Angaben:   `lexical`- alphabetische Sortierung   `numResults`- Sortierung nach Trefferzahl   `relevance`- Sortierung nach Relevanz                                                                                                                                        |
| `multiSelect`                                               | bool          | Mehrfachauswahl oder nur eine Option zulassen.                                                                                                                                                                                                                                                                          |
| `range`                                                     | object        | Steuert einen zahlenbasierten Filter (z.B. Preis, Gewicht).                                                                                                                                                                                                                                                             |
| `inputType`                                                 | enum          | Legt fest, wie Nutzer den Zahlenbereich des Filters wählen:   <br />`rangeonly`- Frei einstellbarer Bereich   `optionsOnly`- Nur vorgegebene Stufen zur Auswahl   `rangeAndOptions`- Kombiniert beides.                                                                                                                 |
| `optionType`                                                | enum          | Bestimmt, woher die Zahlenbereichsstufen kommen:   <br />`static`- Feste Stufen manuell vorgeben.   `dynamic`- Die Stufen werden automatisch aus vorhandenen Produktwerten berechnet.                                                                                                                                   |
| `dynamicSteps`                                              | int           | Gibt die Anzahl der dynamischen Stufen an. <br />(nur, wenn bei `optionType` der Wert `dynamic`gewählt wurde.)                                                                                                                                                                                                          |
| `statisticOptions`                                          | list (object) | Liste fester Zahlenbereichsstufen.                                                                                                                                                                                                                                                                                      |
| `from`                                                      | float         | Untere Grenze der Zahlenbereichsstufe.                                                                                                                                                                                                                                                                                  |
| `to`                                                        | float         | Obere Grenze der Zahlenbereichsstufe.                                                                                                                                                                                                                                                                                   |
| `target`                                                    | oneOf         | Legt Fest, welches Produktfeld der Filter verwendet. (z.B. ein Produktfeld oder ein Produktattribut)                                                                                                                                                                                                                    |
| `field`                                                     | singleAssoc   | Bindet den Filter an ein Produktfeld (z.B. `content.customProductField.weight`). <br />Die Daten kommen aus `content.productField` \| `content.customProductField`.                                                                                                                                                     |
| `special`                                                   | enum          | Legt fest, ob nach Kategorie-ID (`categories`) oder Neuheiten (`new`) gefiltert wird.                                                                                                                                                                                                                                   |
| `attribute`                                                 | singleAssoc   | Bindet den Filter an ein Produktattribut. <br />Daten aus `content.productAttribute`.                                                                                                                                                                                                                                   |
| `scoreBoost`<br />(**demnächst verfügbar**)                 | float         | Erhöht den Ranking-Einfluss ausgewählter Filterwerte auf die Ergebnisreihenfolge.                                                                                                                                                                                                                                       |
| `optionsDirectlyDisplayable`<br />(**demnächst verfügbar**) | bool          | `true`- Optionsliste kann ohne “mehr anzeigen” vollständig gezeigt werden.  <br />`false`- Optionsliste kann sich einklappen.                                                                                                                                                                                           |
| `unit`                                                      | string        | Einheit für die Anzeige (z.B. `kg`, `cm`, `€`)                                                                                                                                                                                                                                                                          |
| `numInitialOptions`                                         | uint          | Anzahl initial sichtbarer Optionswerte (z.B. zeige zuerst 5, der Rest muss aufgeklappt werden).                                                                                                                                                                                                                         |
| `minOptions`                                                | uint          | Mindestanzahl benötigter Optionswerte, damit der Filter überhaupt angezeigt wird.                                                                                                                                                                                                                                       |

***

## `search.productSearchNavigation` - Filter und Sortierung für Suchergebnisseiten

Der Knoten `search.productSearchNavigation` definiert die Filter und die Sortierung auf Suchergebnisseiten. Einstellbar sind beispielsweise die Standard-Sortierung, die Treffer pro Seite sowie ein Limit für maximale Treffer pro Suche.

<KonfigDeeplink node="search.productSearchNavigation" />

#### Beispielkonfiguration

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
  "defaultResultsPerPage": 16,
  "defaultSortOption": "search.productSortOption.relevance",
  "maxResults": 1000,
  "productFilters": [
    "search.productFilter.price",
    "search.productFilter.clothingLength",
    "search.productFilter.clothingOuterMaterial",
    "search.productFilter.brand"
  ],
  "resultsPerPageOptions": [16, 24, 32],
  "sortOptions": [
    "search.productSortOption.relevance",
    "search.productSortOption.nameAsc",
    "search.productSortOption.nameDesc",
    "search.productSortOption.priceAsc",
    "search.productSortOption.priceDesc"
  ]
}
```

#### Parameterbeschreibung

| **Parameter**           | **Typ**     | **Beschreibung**                                                                                                   |
| ----------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------ |
| `productFilters`        | multiAssoc  | Verfügbare Filter für die Suche (z.B. Preis, Marke, Material). Die Reihenfolge entspricht der Anzeige im Frontend. |
| `sortOptions`           | multiAssoc  | Wählbare Sortierungen für den Nutzer (z.B. Relevanz, Name / Preis auf- bzw. absteigend.)                           |
| `defaultSortOption`     | singleAssoc | Voreingestellte Sortierung der Suchergebnisse (z.B. Relevanz).                                                     |
| `resultsPerPageOptions` | list (uint) | Auswahlwerte für “Treffer pro Seite”.      <br />Default: \[`20, 50, 100, 200`]                                    |
| `defaultResultsPerPage` | int         | Voreinstellung der Treffer pro Seite (muss in `resultsPerPageOptions` enthalten sein).                             |
| `maxResults`            | int         | Maximalzahl der berücksichtigten / anzeigbaren Treffer einer Suche.                                                |

***

## `search.productSortOption` - Sortierungsmöglichkeit

Der Knoten `search.productSortOption` definiert eine Sortiermöglichkeit für Kategorie - und Suchergebnisseiten. Er legt beispielsweise fest, wonach sortiert wird und in welcher Richtung.

<KonfigDeeplink node="search.productSortOption" />

#### Beispielkonfiguration (`search.productSortOption.relevance`)

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
  "name": "Beliebtheit",
  "target": {
    "field": null,
    "special": "relevance"
  }
}
```

#### Parameterbeschreibung

| **Parameter** | **Typ** | **Beschreibung**                                                                                                   |
| ------------- | ------- | ------------------------------------------------------------------------------------------------------------------ |
| `name`        | string  | Anzeigename der Sortierung im Frontend. (z.B. “Beliebtheit”).                                                      |
| `target`      | oneOf   | Legt fest, wonach sortiert wird - eine Variante wählbar:   <br />`field` oder `special`                            |
| `field`       | object  | Sortierung nach einem konkreten Produktfeld.                                                                       |
| `field`       | enum    | Produktfeld aus `content.productField`\| `content.customProductField`, nach dem sortiert werden soll. (z.B. Preis) |
| `direction`   | enum    | Sortierrichtung der Sortierung.   <br />`asc`= aufsteigend   <br />`desc`= absteigend                              |
| `special`     | enum    | Systemsortierung nach Relevanz (`relevance`)                                                                       |
