> ## 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>)
  </>;

export const ComingSoon = () => <span style={{
  display: 'inline-block',
  padding: '1px 10px',
  borderRadius: '9999px',
  fontSize: '0.75rem',
  fontWeight: 600,
  letterSpacing: '0.02em',
  backgroundColor: 'rgba(245, 158, 11, 0.18)',
  color: '#D97706',
  border: '1px solid rgba(245, 158, 11, 0.5)',
  verticalAlign: 'middle',
  whiteSpace: 'nowrap'
}}>
    Coming Soon
  </span>;

Der Knoten `search` steuert die interne Produktsuche (nicht die WEBSALE Search) und Listing-Seiten im Shop. Er legt fest, 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 Suchergebnisse und erlaubt die Definition einzelner Filter und Sortierregeln als wiederverwendbare 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`, beispielsweise Preis, Marke oder Material. Reihenfolge der Angaben entspricht der Reihenfolge im Frontend. |
| `sortOptions`                          | multiAssoc  | Liste der für den Nutzer wählbaren Sortierungen aus `search.productSortOption`, beispielsweise Relevanz, Name oder Preis auf- und absteigend.                       |
| `defaultSortOption`                    | singleAssoc | Voreingestellte Sortierung aus `search.productSortOption` beim ersten Laden einer Kategorieseite, beispielsweise 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 /><ComingSoon /> | 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, beispielsweise Marke, Material, Preis oder 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, beispielsweise `brand` oder `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, beispielsweise Marken oder 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, beispielsweise Preis oder 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, beispielsweise ein Produktfeld oder ein Produktattribut.                                                                                                                                                                                                           |
| `field`                                          | singleAssoc   | Bindet den Filter an ein Produktfeld, beispielsweise `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 /><ComingSoon />                 | float         | Erhöht den Ranking-Einfluss ausgewählter Filterwerte auf die Ergebnisreihenfolge.                                                                                                                                                                                                                                       |
| `optionsDirectlyDisplayable`<br /><ComingSoon /> | bool          | `true`- Optionsliste kann ohne „mehr anzeigen“ vollständig gezeigt werden.  <br />`false`- Optionsliste kann sich einklappen.                                                                                                                                                                                           |
| `unit`                                           | string        | Einheit für die Anzeige, beispielsweise `kg`, `cm` oder `€`.                                                                                                                                                                                                                                                            |
| `numInitialOptions`                              | uint          | Anzahl initial sichtbarer Optionswerte, beispielsweise zuerst 5 anzeigen und den Rest aufklappen lassen.                                                                                                                                                                                                                |
| `minOptions`                                     | uint          | Mindestanzahl benötigter Optionswerte, damit der Filter überhaupt angezeigt wird.                                                                                                                                                                                                                                       |

### Filter auf Preisfeldern

Preisfelder können zeitgesteuerte Aktionspreise tragen. Für Filter und Sortierungen gilt dabei eine Einschränkung, die bei der Konfiguration zu beachten ist.

<Warning>
  Preisfelder werden im Suchindex ausschließlich mit ihrem Standardpreis abgelegt. Geplante Aktionspreise stehen im Index nicht zur Verfügung und wirken sich deshalb nicht auf Filter und Sortierungen aus. Ein Produkt mit laufendem Aktionspreis wird nach seinem Standardpreis einsortiert, auch wenn im Shop der niedrigere Aktionspreis angezeigt wird.

  Das Standardfeld `setPrice` ist entfallen, ebenso das zugehörige Indexfeld. Filter und Sortierungen, die darauf zeigen, müssen angepasst werden. Näheres beschreibt der Abschnitt [Set-Preis wird nicht mehr gespeichert](/schnittstellen/admin-interface-api/api-referenz-produkte#set-preis-wird-nicht-mehr-gespeichert).
</Warning>

***

## `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, beispielsweise Preis, Marke oder Material. Die Reihenfolge entspricht der Anzeige im Frontend. |
| `sortOptions`           | multiAssoc  | Wählbare Sortierungen für den Nutzer, beispielsweise Relevanz oder Name und Preis auf- und absteigend.                          |
| `defaultSortOption`     | singleAssoc | Voreingestellte Sortierung der Suchergebnisse, beispielsweise 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, beispielsweise „Beliebtheit“.                                                           |
| `target`      | oneOf   | Legt fest, wonach sortiert wird. Es ist genau 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, beispielsweise der Preis. |
| `direction`   | enum    | Sortierrichtung der Sortierung.   <br />`asc`= aufsteigend   <br />`desc`= absteigend                                           |
| `special`     | enum    | Systemsortierung nach Relevanz (`relevance`)                                                                                    |

<Note>
  Eine Sortierung nach einem Preisfeld arbeitet auf dem Standardpreis. Aktionspreise werden nicht berücksichtigt, siehe [Filter auf Preisfeldern](#filter-auf-preisfeldern).
</Note>


## Related topics

- [Konfigurations-Deeplinks](/admin-interface/konfigurations-deeplinks.md)
- [Übersicht - Konfiguration](/konfiguration.md)
- [Search API](/schnittstellen/search-api.md)
- [ws-search-info](/ws-search/integration-in-die-templates-storefront/webcomponents/ui-komponenten/ws-search-info.md)
- [Integration in die Templates (Storefront)](/ws-search/integration-in-die-templates-storefront.md)
