From 34d7405c2c16d56134d23ecf7219d10caaa3bfa3 Mon Sep 17 00:00:00 2001
From: "ct-sdks[bot]" <153784748+ct-sdks[bot]@users.noreply.github.com>
Date: Tue, 26 Mar 2024 11:47:49 +0000
Subject: [PATCH] Updated API from documentation release
---
.../product-search-request.example.json | 33 +++++++++
.../product-search-response.example.json | 39 ++++++++++
...ngeProductSearchIndexingEnabledAction.json | 3 +-
api-specs/api/resources/products.raml | 39 +++++++++-
api-specs/api/ruleset.xml | 2 +
.../ProductPagedSearchResponse.raml | 33 +++++++++
.../ProductSearchErrorResponse.raml | 16 ++++
.../ProductSearchMatchingVariantEntry.raml | 13 ++++
.../ProductSearchMatchingVariants.raml | 12 +++
.../ProductSearchProjectionParams.raml | 43 +++++++++++
.../product-search/ProductSearchRequest.raml | 39 ++++++++++
.../product-search/ProductSearchResult.raml | 16 ++++
.../ProductSearchFacetCountExpression.raml | 9 +++
.../ProductSearchFacetCountLevelEnum.raml | 11 +++
.../facets/ProductSearchFacetCountValue.raml | 19 +++++
...roductSearchFacetDistinctBucketSortBy.raml | 11 +++
...archFacetDistinctBucketSortExpression.raml | 12 +++
.../ProductSearchFacetDistinctExpression.raml | 9 +++
.../ProductSearchFacetDistinctValue.raml | 43 +++++++++++
.../facets/ProductSearchFacetExpression.raml | 5 ++
.../ProductSearchFacetRangesExpression.raml | 9 +++
.../ProductSearchFacetRangesFacetRange.raml | 16 ++++
.../facets/ProductSearchFacetRangesValue.raml | 31 ++++++++
.../facets/ProductSearchFacetResult.raml | 9 +++
.../ProductSearchFacetResultBucket.raml | 9 +++
.../ProductSearchFacetResultBucketEntry.raml | 13 ++++
.../facets/ProductSearchFacetResultCount.raml | 10 +++
.../facets/ProductSearchFacetScope.raml | 8 ++
.../facets/ProductSearchFacetScopeEnum.raml | 11 +++
.../project/ProductSearchIndexingMode.raml | 13 ++++
.../types/project/ProductSearchStatus.raml | 12 +++
.../project/SearchIndexingConfiguration.raml | 4 +
...ngeProductSearchIndexingEnabledAction.raml | 6 ++
.../api/types/search/SearchAndExpression.raml | 8 ++
.../api/types/search/SearchAnyValue.raml | 12 +++
.../search/SearchCompoundExpression.raml | 5 ++
.../search/SearchDateRangeExpression.raml | 8 ++
.../types/search/SearchDateRangeValue.raml | 14 ++++
.../search/SearchDateTimeRangeExpression.raml | 8 ++
.../search/SearchDateTimeRangeValue.raml | 14 ++++
.../types/search/SearchExactExpression.raml | 8 ++
.../types/search/SearchExistsExpression.raml | 8 ++
.../api/types/search/SearchExistsValue.raml | 8 ++
.../api/types/search/SearchFieldType.raml | 74 +++++++++++++++++++
.../types/search/SearchFilterExpression.raml | 8 ++
.../search/SearchFullTextExpression.raml | 8 ++
.../SearchFullTextPrefixExpression.raml | 8 ++
.../search/SearchFullTextPrefixValue.raml | 12 +++
.../api/types/search/SearchFullTextValue.raml | 12 +++
.../search/SearchLongRangeExpression.raml | 8 ++
.../types/search/SearchLongRangeValue.raml | 18 +++++
.../api/types/search/SearchMatchType.raml | 13 ++++
.../types/search/SearchMatchingVariant.raml | 13 ++++
.../api/types/search/SearchNotExpression.raml | 8 ++
.../search/SearchNumberRangeExpression.raml | 8 ++
.../types/search/SearchNumberRangeValue.raml | 18 +++++
.../api/types/search/SearchOrExpression.raml | 8 ++
.../types/search/SearchPrefixExpression.raml | 8 ++
api-specs/api/types/search/SearchQuery.raml | 5 ++
.../types/search/SearchQueryExpression.raml | 5 ++
.../search/SearchQueryExpressionValue.raml | 13 ++++
.../api/types/search/SearchSortMode.raml | 22 ++++++
.../api/types/search/SearchSortOrder.raml | 13 ++++
api-specs/api/types/search/SearchSorting.raml | 33 +++++++++
.../search/SearchTimeRangeExpression.raml | 8 ++
.../types/search/SearchTimeRangeValue.raml | 14 ++++
.../search/SearchWildCardExpression.raml | 8 ++
api-specs/api/types/types.raml | 61 +++++++++++++++
68 files changed, 1055 insertions(+), 2 deletions(-)
create mode 100644 api-specs/api/examples/ProductSearch/product-search-request.example.json
create mode 100644 api-specs/api/examples/ProductSearch/product-search-response.example.json
create mode 100644 api-specs/api/types/product-search/ProductPagedSearchResponse.raml
create mode 100644 api-specs/api/types/product-search/ProductSearchErrorResponse.raml
create mode 100644 api-specs/api/types/product-search/ProductSearchMatchingVariantEntry.raml
create mode 100644 api-specs/api/types/product-search/ProductSearchMatchingVariants.raml
create mode 100644 api-specs/api/types/product-search/ProductSearchProjectionParams.raml
create mode 100644 api-specs/api/types/product-search/ProductSearchRequest.raml
create mode 100644 api-specs/api/types/product-search/ProductSearchResult.raml
create mode 100644 api-specs/api/types/product-search/facets/ProductSearchFacetCountExpression.raml
create mode 100644 api-specs/api/types/product-search/facets/ProductSearchFacetCountLevelEnum.raml
create mode 100644 api-specs/api/types/product-search/facets/ProductSearchFacetCountValue.raml
create mode 100644 api-specs/api/types/product-search/facets/ProductSearchFacetDistinctBucketSortBy.raml
create mode 100644 api-specs/api/types/product-search/facets/ProductSearchFacetDistinctBucketSortExpression.raml
create mode 100644 api-specs/api/types/product-search/facets/ProductSearchFacetDistinctExpression.raml
create mode 100644 api-specs/api/types/product-search/facets/ProductSearchFacetDistinctValue.raml
create mode 100644 api-specs/api/types/product-search/facets/ProductSearchFacetExpression.raml
create mode 100644 api-specs/api/types/product-search/facets/ProductSearchFacetRangesExpression.raml
create mode 100644 api-specs/api/types/product-search/facets/ProductSearchFacetRangesFacetRange.raml
create mode 100644 api-specs/api/types/product-search/facets/ProductSearchFacetRangesValue.raml
create mode 100644 api-specs/api/types/product-search/facets/ProductSearchFacetResult.raml
create mode 100644 api-specs/api/types/product-search/facets/ProductSearchFacetResultBucket.raml
create mode 100644 api-specs/api/types/product-search/facets/ProductSearchFacetResultBucketEntry.raml
create mode 100644 api-specs/api/types/product-search/facets/ProductSearchFacetResultCount.raml
create mode 100644 api-specs/api/types/product-search/facets/ProductSearchFacetScope.raml
create mode 100644 api-specs/api/types/product-search/facets/ProductSearchFacetScopeEnum.raml
create mode 100644 api-specs/api/types/project/ProductSearchIndexingMode.raml
create mode 100644 api-specs/api/types/project/ProductSearchStatus.raml
create mode 100644 api-specs/api/types/search/SearchAndExpression.raml
create mode 100644 api-specs/api/types/search/SearchAnyValue.raml
create mode 100644 api-specs/api/types/search/SearchCompoundExpression.raml
create mode 100644 api-specs/api/types/search/SearchDateRangeExpression.raml
create mode 100644 api-specs/api/types/search/SearchDateRangeValue.raml
create mode 100644 api-specs/api/types/search/SearchDateTimeRangeExpression.raml
create mode 100644 api-specs/api/types/search/SearchDateTimeRangeValue.raml
create mode 100644 api-specs/api/types/search/SearchExactExpression.raml
create mode 100644 api-specs/api/types/search/SearchExistsExpression.raml
create mode 100644 api-specs/api/types/search/SearchExistsValue.raml
create mode 100644 api-specs/api/types/search/SearchFieldType.raml
create mode 100644 api-specs/api/types/search/SearchFilterExpression.raml
create mode 100644 api-specs/api/types/search/SearchFullTextExpression.raml
create mode 100644 api-specs/api/types/search/SearchFullTextPrefixExpression.raml
create mode 100644 api-specs/api/types/search/SearchFullTextPrefixValue.raml
create mode 100644 api-specs/api/types/search/SearchFullTextValue.raml
create mode 100644 api-specs/api/types/search/SearchLongRangeExpression.raml
create mode 100644 api-specs/api/types/search/SearchLongRangeValue.raml
create mode 100644 api-specs/api/types/search/SearchMatchType.raml
create mode 100644 api-specs/api/types/search/SearchMatchingVariant.raml
create mode 100644 api-specs/api/types/search/SearchNotExpression.raml
create mode 100644 api-specs/api/types/search/SearchNumberRangeExpression.raml
create mode 100644 api-specs/api/types/search/SearchNumberRangeValue.raml
create mode 100644 api-specs/api/types/search/SearchOrExpression.raml
create mode 100644 api-specs/api/types/search/SearchPrefixExpression.raml
create mode 100644 api-specs/api/types/search/SearchQuery.raml
create mode 100644 api-specs/api/types/search/SearchQueryExpression.raml
create mode 100644 api-specs/api/types/search/SearchQueryExpressionValue.raml
create mode 100644 api-specs/api/types/search/SearchSortMode.raml
create mode 100644 api-specs/api/types/search/SearchSortOrder.raml
create mode 100644 api-specs/api/types/search/SearchSorting.raml
create mode 100644 api-specs/api/types/search/SearchTimeRangeExpression.raml
create mode 100644 api-specs/api/types/search/SearchTimeRangeValue.raml
create mode 100644 api-specs/api/types/search/SearchWildCardExpression.raml
diff --git a/api-specs/api/examples/ProductSearch/product-search-request.example.json b/api-specs/api/examples/ProductSearch/product-search-request.example.json
new file mode 100644
index 000000000..55996fa29
--- /dev/null
+++ b/api-specs/api/examples/ProductSearch/product-search-request.example.json
@@ -0,0 +1,33 @@
+{
+ "query": {
+ "and": [
+ {
+ "fullText": {
+ "field": "name",
+ "language": "en",
+ "value": "banana"
+ }
+ },
+ {
+ "filter": [
+ {
+ "exact": {
+ "field": "variants.attributes.farming",
+ "fieldType": "text",
+ "value": "organic"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "sort": [
+ {
+ "field": "name",
+ "language": "en",
+ "order": "desc"
+ }
+ ],
+ "limit": 10,
+ "offset": 0
+}
diff --git a/api-specs/api/examples/ProductSearch/product-search-response.example.json b/api-specs/api/examples/ProductSearch/product-search-response.example.json
new file mode 100644
index 000000000..eda9993f1
--- /dev/null
+++ b/api-specs/api/examples/ProductSearch/product-search-response.example.json
@@ -0,0 +1,39 @@
+{
+ "total": 148,
+ "offset": 0,
+ "limit": 10,
+ "facets": [
+ {
+ "name": "countProducts",
+ "buckets": [
+ {
+ "key": "white",
+ "count": 37
+ }
+ ]
+ },
+ {
+ "name": "countVariants",
+ "buckets": [
+ {
+ "key": "white",
+ "count": 301
+ }
+ ]
+ }
+ ],
+ "results": [
+ {
+ "id": "8fde2af0-6a2f-4633-9ba4-83566f769a7f",
+ "matchingVariants": {
+ "allMatched": false,
+ "matchedVariants": [
+ {
+ "id": 1,
+ "sku": null
+ }
+ ]
+ }
+ }
+ ]
+}
diff --git a/api-specs/api/examples/Project/ProjectChangeProductSearchIndexingEnabledAction.json b/api-specs/api/examples/Project/ProjectChangeProductSearchIndexingEnabledAction.json
index 0dee63a44..f7dad9611 100644
--- a/api-specs/api/examples/Project/ProjectChangeProductSearchIndexingEnabledAction.json
+++ b/api-specs/api/examples/Project/ProjectChangeProductSearchIndexingEnabledAction.json
@@ -1,4 +1,5 @@
{
"action": "changeProductSearchIndexingEnabled",
- "enabled": true
+ "enabled": true,
+ "mode": "ProductsSearch"
}
diff --git a/api-specs/api/resources/products.raml b/api-specs/api/resources/products.raml
index 07cfe64a5..a803adcf9 100644
--- a/api-specs/api/resources/products.raml
+++ b/api-specs/api/resources/products.raml
@@ -11,7 +11,17 @@ type:
description: |
Products themselves are not sellable. Instead, they act as a parent structure for sellable Product Variants.
get:
- securedBy: [oauth_2_0: { scopes: ['view_products:{projectKey}'] }]
+ securedBy:
+ [
+ oauth_2_0:
+ {
+ scopes:
+ [
+ 'view_products:{projectKey}',
+ 'view_published_products:{projectKey}',
+ ],
+ },
+ ]
is:
- priceSelecting
description: |-
@@ -212,3 +222,30 @@ post:
body:
application/json:
example: !include ../examples/product-assigned-selections.example.json
+/search:
+ type: base
+ displayName: Product Search
+ description: |
+ This endpoint provides high-performance search queries over Products. Product Search allows searching through all products with a current projection in your Project.
+ post:
+ displayName: Search Products
+ securedBy: [oauth_2_0: { scopes: ['view_published_products:{projectKey}'] }]
+ body:
+ application/json:
+ type: ProductSearchRequest
+ responses:
+ 200:
+ body:
+ application/json:
+ example: !include ../examples/ProductSearch/product-search-response.example.json
+ type: ProductPagedSearchResponse
+ head:
+ securedBy: [oauth_2_0: { scopes: ['project_settings:{projectKey}'] }]
+ description: |
+ Checks whether a search index for the Project's Products exists.
+ Returns a `200 OK` status if the index exists, a `404 Not Found` error otherwise.
+ responses:
+ 200:
+ description: The search index exists and the Search Products endpoint is fully operational.
+ 404:
+ description: The search index does not exist and the Search Products endpoint returns Error 404 only.
diff --git a/api-specs/api/ruleset.xml b/api-specs/api/ruleset.xml
index e08027fd4..0c5033c0c 100644
--- a/api-specs/api/ruleset.xml
+++ b/api-specs/api/ruleset.xml
@@ -54,6 +54,7 @@
+
@@ -66,6 +67,7 @@
+
diff --git a/api-specs/api/types/product-search/ProductPagedSearchResponse.raml b/api-specs/api/types/product-search/ProductPagedSearchResponse.raml
new file mode 100644
index 000000000..c447dab79
--- /dev/null
+++ b/api-specs/api/types/product-search/ProductPagedSearchResponse.raml
@@ -0,0 +1,33 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+displayName: ProductPagedSearchResponse
+type: object
+(beta): true
+properties:
+ total:
+ type: number
+ format: int64
+ minimum: 0
+ description: Total number of results matching the query.
+ offset:
+ type: number
+ format: int32
+ minimum: 0
+ maximum: 9900
+ description: |
+ Number of [elements skipped](/../api/general-concepts#offset).
+ limit:
+ type: number
+ format: int32
+ minimum: 0
+ maximum: 100
+ description: |
+ Number of [results requested](/../api/general-concepts#limit).
+ facets:
+ type: ProductSearchFacetResult[]
+ description: |
+ Results for [facets](/../api/projects/product-search#facets) when requested.
+ results:
+ type: ProductSearchResult[]
+ description: |
+ Search result containing the Products matching the search query.
diff --git a/api-specs/api/types/product-search/ProductSearchErrorResponse.raml b/api-specs/api/types/product-search/ProductSearchErrorResponse.raml
new file mode 100644
index 000000000..4f09067bb
--- /dev/null
+++ b/api-specs/api/types/product-search/ProductSearchErrorResponse.raml
@@ -0,0 +1,16 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+type: ErrorResponse
+(beta): true
+displayName: ProductSearchErrorResponse
+properties:
+ statusCode:
+ description: The http status code of the response.
+ type: integer
+ message:
+ description: Describes the error.
+ type: string
+ errors?:
+ description: |
+ The errors that caused this error response.
+ type: ErrorObject[]
diff --git a/api-specs/api/types/product-search/ProductSearchMatchingVariantEntry.raml b/api-specs/api/types/product-search/ProductSearchMatchingVariantEntry.raml
new file mode 100644
index 000000000..e87b764f0
--- /dev/null
+++ b/api-specs/api/types/product-search/ProductSearchMatchingVariantEntry.raml
@@ -0,0 +1,13 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+displayName: ProductSearchMatchingVariantEntry
+type: object
+(beta): true
+properties:
+ id:
+ type: number
+ format: int32
+ description: Unique identifier of the variant.
+ sku?:
+ type: string
+ description: SKU of the matching variant.
diff --git a/api-specs/api/types/product-search/ProductSearchMatchingVariants.raml b/api-specs/api/types/product-search/ProductSearchMatchingVariants.raml
new file mode 100644
index 000000000..a92a0f017
--- /dev/null
+++ b/api-specs/api/types/product-search/ProductSearchMatchingVariants.raml
@@ -0,0 +1,12 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+displayName: ProductSearchMatchingVariants
+type: object
+(beta): true
+properties:
+ allMatched:
+ type: boolean
+ description: Whether the search criteria definitely matches for all Variants of the returned Product, like for Product-level fields. Is always `false` for search expressions on Variant-level fields.
+ matchedVariants:
+ type: ProductSearchMatchingVariantEntry[]
+ description: The variants matching the search criteria or empty if all matched.
diff --git a/api-specs/api/types/product-search/ProductSearchProjectionParams.raml b/api-specs/api/types/product-search/ProductSearchProjectionParams.raml
new file mode 100644
index 000000000..be2760336
--- /dev/null
+++ b/api-specs/api/types/product-search/ProductSearchProjectionParams.raml
@@ -0,0 +1,43 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+type: object
+(beta): true
+displayName: ProductSearchProjectionParams
+properties:
+ expand?:
+ type: Expansion[]
+ description: |
+ Expands a `value` of type [Reference](ctp:api:type:Reference) in a [ProductProjection](ctp:api:type:ProductProjection).
+ In case the referenced object does not exist, the API returns the non-expanded reference.
+ staged?:
+ type: boolean
+ description: |
+ Set to `true` to retrieve the [staged](ctp:api:type:CurrentStaged) Product Projection
+ priceCurrency?:
+ type: CurrencyCode
+ description: |
+ The currency used for [Price selection](/projects/products#price-selection).
+ priceCountry?:
+ type: CountryCode
+ description: |
+ The country used for [Price selection](/projects/products#price-selection). Can only be used **in conjunction with** the `priceCurrency` parameter.
+ priceCustomerGroup?:
+ type: string
+ description: |
+ `id` of an existing [CustomerGroup](ctp:api:type:CustomerGroup) used for [Price selection](ctp:api:type:ProductPriceSelection). Can only be used **in conjunction with** the `priceCurrency` parameter.
+ priceChannel?:
+ type: string
+ description: |
+ `id` of an existing [Channel](ctp:api:type:Channel) used for [Price selection](ctp:api:type:ProductPriceSelection). Can only be used **in conjunction with** the `priceCurrency` parameter.
+ localeProjection?:
+ type: Locale[]
+ description: |
+ Used for [locale-based projection](ctp:api:type:ProductProjectionLocales).
+ storeProjection?:
+ type: string
+ description: |
+ `key` of an existing [Store](ctp:api:type:Store).
+ If the Store has defined some languages, countries, distribution or supply Channels,
+ they are used for projections based on [locale](ctp:api:type:ProductProjectionLocales), [price](ctp:api:type:ProductProjectionPrices)
+ and [inventory](ctp:api:type:ProductProjectionInventoryEntries).
+ If the Store has defined [Product Selections](ctp:api:type:ProductSelection), they have no effect on the results of this query.
diff --git a/api-specs/api/types/product-search/ProductSearchRequest.raml b/api-specs/api/types/product-search/ProductSearchRequest.raml
new file mode 100644
index 000000000..b14316bfa
--- /dev/null
+++ b/api-specs/api/types/product-search/ProductSearchRequest.raml
@@ -0,0 +1,39 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+type: object
+(beta): true
+displayName: ProductSearchRequest
+example: !include ../../examples/ProductSearch/product-search-request.example.json
+properties:
+ query?:
+ type: SearchQuery
+ description: The search query against [searchable Product fields](/../api/projects/product-search#searchable-product-fields).
+ sort?:
+ type: SearchSorting[]
+ description: Controls how results to your query are sorted. If not provided, the results are sorted by relevance in descending order.
+ limit?:
+ type: number
+ format: int32
+ default: 20
+ maximum: 100
+ description: The maximum number of search results to be returned.
+ offset?:
+ type: number
+ format: int32
+ default: 0
+ maximum: 9900
+ description: The number of search results to be skipped in the response for pagination.
+ markMatchingVariants?:
+ type: boolean
+ default: false
+ description: The search can return Products where not all Product Variants match the search criteria. If `true`, the response will include a field called `matchingVariants` that contains the `sku` of Product Variants that match the search query. If the query does not specify any variant-level criteria, `matchingVariants` will be null signifying that all Product Variants are a match.
+ productProjectionParameters?:
+ type: ProductSearchProjectionParams
+ description: |
+ Set this field to `{}` to get the [ProductProjection](ctp:api:type:ProductProjection) included in the [ProductSearchResult](ctp:api:type:ProductSearchResult).
+ Include query parameters for controlling [Reference Expansion](/../api/general-concepts#reference-expansion) or [projections](/../api/projects/productProjections#projection-dimensions) according to your needs.
+ If not set, the result does not include the Product Projection.
+ facets?:
+ type: ProductSearchFacetExpression[]
+ description: |
+ Set this field to request [facets](/../api/projects/product-search#facets).
diff --git a/api-specs/api/types/product-search/ProductSearchResult.raml b/api-specs/api/types/product-search/ProductSearchResult.raml
new file mode 100644
index 000000000..f255bb8f1
--- /dev/null
+++ b/api-specs/api/types/product-search/ProductSearchResult.raml
@@ -0,0 +1,16 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+displayName: ProductSearchResult
+type: object
+(beta): true
+properties:
+ id:
+ (identifier): true
+ type: string
+ description: Unique identifier of the Product.
+ productProjection?:
+ type: ProductProjection
+ description: Contains Product Projection data for Products matching the `projection` field in the Search Products request.
+ matchingVariants?:
+ type: ProductSearchMatchingVariants
+ description: Describes the variants that matched the search criteria.
diff --git a/api-specs/api/types/product-search/facets/ProductSearchFacetCountExpression.raml b/api-specs/api/types/product-search/facets/ProductSearchFacetCountExpression.raml
new file mode 100644
index 000000000..7f6ac0389
--- /dev/null
+++ b/api-specs/api/types/product-search/facets/ProductSearchFacetCountExpression.raml
@@ -0,0 +1,9 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+type: ProductSearchFacetExpression
+(beta): true
+displayName: ProductSearchFacetCountExpression
+properties:
+ count:
+ type: ProductSearchFacetCountValue
+ description: Definition of the count facet.
diff --git a/api-specs/api/types/product-search/facets/ProductSearchFacetCountLevelEnum.raml b/api-specs/api/types/product-search/facets/ProductSearchFacetCountLevelEnum.raml
new file mode 100644
index 000000000..be373cab5
--- /dev/null
+++ b/api-specs/api/types/product-search/facets/ProductSearchFacetCountLevelEnum.raml
@@ -0,0 +1,11 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+displayName: ProductSearchFacetCountLevelEnum
+type: string
+(beta): true
+enum:
+ - products
+ - variants
+(enumDescriptions):
+ products: The query should count Products.
+ variants: The query should count Product Variants.
diff --git a/api-specs/api/types/product-search/facets/ProductSearchFacetCountValue.raml b/api-specs/api/types/product-search/facets/ProductSearchFacetCountValue.raml
new file mode 100644
index 000000000..54d9a6bcb
--- /dev/null
+++ b/api-specs/api/types/product-search/facets/ProductSearchFacetCountValue.raml
@@ -0,0 +1,19 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+type: object
+(beta): true
+displayName: ProductSearchFacetCountValue
+properties:
+ name:
+ type: string
+ scope?:
+ type: ProductSearchFacetScopeEnum
+ description: Whether the facet must consider only the Products resulting from the search (`query`) or all the Products (`all`).
+ default: query
+ filter?:
+ type: SearchQuery
+ description: Additional filtering expression to apply to the search result before calculating the facet.
+ level?:
+ type: ProductSearchFacetCountLevelEnum
+ default: products
+ description: Specify whether to count Products (`products`) or Product Variants (`variants`).
diff --git a/api-specs/api/types/product-search/facets/ProductSearchFacetDistinctBucketSortBy.raml b/api-specs/api/types/product-search/facets/ProductSearchFacetDistinctBucketSortBy.raml
new file mode 100644
index 000000000..b97a46f4b
--- /dev/null
+++ b/api-specs/api/types/product-search/facets/ProductSearchFacetDistinctBucketSortBy.raml
@@ -0,0 +1,11 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+type: string
+(beta): true
+displayName: ProductSearchFacetDistinctBucketSortBy
+enum:
+ - count
+ - key
+(enumDescriptions):
+ count: Sort buckets by the count value.
+ key: Sort buckets by the bucket key.
diff --git a/api-specs/api/types/product-search/facets/ProductSearchFacetDistinctBucketSortExpression.raml b/api-specs/api/types/product-search/facets/ProductSearchFacetDistinctBucketSortExpression.raml
new file mode 100644
index 000000000..594813b9a
--- /dev/null
+++ b/api-specs/api/types/product-search/facets/ProductSearchFacetDistinctBucketSortExpression.raml
@@ -0,0 +1,12 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+type: object
+(beta): true
+displayName: ProductSearchFacetDistinctBucketSortExpression
+properties:
+ by:
+ type: ProductSearchFacetDistinctBucketSortBy
+ description: Defines whether to sort by bucket count or key.
+ order:
+ type: SearchSortOrder
+ description: Defines the sorting order.
diff --git a/api-specs/api/types/product-search/facets/ProductSearchFacetDistinctExpression.raml b/api-specs/api/types/product-search/facets/ProductSearchFacetDistinctExpression.raml
new file mode 100644
index 000000000..15c62aa38
--- /dev/null
+++ b/api-specs/api/types/product-search/facets/ProductSearchFacetDistinctExpression.raml
@@ -0,0 +1,9 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+type: ProductSearchFacetExpression
+(beta): true
+displayName: ProductSearchFacetDistinctExpression
+properties:
+ distinct:
+ type: ProductSearchFacetDistinctValue
+ description: Definition of the distinct facet.
diff --git a/api-specs/api/types/product-search/facets/ProductSearchFacetDistinctValue.raml b/api-specs/api/types/product-search/facets/ProductSearchFacetDistinctValue.raml
new file mode 100644
index 000000000..4c786fdf2
--- /dev/null
+++ b/api-specs/api/types/product-search/facets/ProductSearchFacetDistinctValue.raml
@@ -0,0 +1,43 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+type: object
+(beta): true
+displayName: ProductSearchFacetDistinctValue
+properties:
+ name:
+ type: string
+ description: Name of the distinct facet.
+ scope?:
+ type: ProductSearchFacetScopeEnum
+ default: query
+ description: Whether the facet must consider only the Products resulting from the search (`query`) or all the Products (`all`).
+ filter?:
+ type: SearchQuery
+ description: Additional filtering expression to apply to the search result before calculating the facet.
+ level?:
+ type: ProductSearchFacetCountLevelEnum
+ default: products
+ description: Specify whether to count Products (`products`) or Product Variants (`variants`).
+ field:
+ type: string
+ description: The field to facet on. Can be any searchable field on the [Product](ctp:api:type:Product).
+ includes?:
+ type: string[]
+ description: Specify which bucket keys the facets results should include.
+ sort?:
+ type: ProductSearchFacetDistinctBucketSortExpression
+ description: Define how the buckets are sorted.
+ limit?:
+ type: number
+ format: int32
+ default: 200
+ maximum: 200
+ description: Maximum number of buckets to return.
+ language?:
+ type: Locale
+ fieldType?:
+ type: SearchFieldType
+ description: If the `field` is not standard, this must be the Attribute type.
+ missing?:
+ type: string
+ description: Default value to use if the specified field is not present on some Products.
diff --git a/api-specs/api/types/product-search/facets/ProductSearchFacetExpression.raml b/api-specs/api/types/product-search/facets/ProductSearchFacetExpression.raml
new file mode 100644
index 000000000..0308847e6
--- /dev/null
+++ b/api-specs/api/types/product-search/facets/ProductSearchFacetExpression.raml
@@ -0,0 +1,5 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+type: object
+(beta): true
+displayName: ProductSearchFacetExpression
diff --git a/api-specs/api/types/product-search/facets/ProductSearchFacetRangesExpression.raml b/api-specs/api/types/product-search/facets/ProductSearchFacetRangesExpression.raml
new file mode 100644
index 000000000..f5269a04d
--- /dev/null
+++ b/api-specs/api/types/product-search/facets/ProductSearchFacetRangesExpression.raml
@@ -0,0 +1,9 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+type: ProductSearchFacetExpression
+(beta): true
+displayName: ProductSearchFacetRangesExpression
+properties:
+ ranges:
+ type: ProductSearchFacetRangesValue
+ description: Definition of the ranges facet.
diff --git a/api-specs/api/types/product-search/facets/ProductSearchFacetRangesFacetRange.raml b/api-specs/api/types/product-search/facets/ProductSearchFacetRangesFacetRange.raml
new file mode 100644
index 000000000..8a3429e17
--- /dev/null
+++ b/api-specs/api/types/product-search/facets/ProductSearchFacetRangesFacetRange.raml
@@ -0,0 +1,16 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+type: object
+(beta): true
+displayName: ProductSearchFacetRangesFacetRange
+description: Values for `from` and `to` must be a number or [DateTime](ctp:api:type:DateTime).
+properties:
+ from?:
+ type: any
+ description: Starting value of the bucket (inclusive).
+ to?:
+ type: any
+ description: Ending value of the bucket (non-inclusive).
+ key?:
+ type: string
+ description: Key to assign the bucket.
diff --git a/api-specs/api/types/product-search/facets/ProductSearchFacetRangesValue.raml b/api-specs/api/types/product-search/facets/ProductSearchFacetRangesValue.raml
new file mode 100644
index 000000000..282923dc9
--- /dev/null
+++ b/api-specs/api/types/product-search/facets/ProductSearchFacetRangesValue.raml
@@ -0,0 +1,31 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+type: object
+(beta): true
+displayName: ProductSearchFacetRangesValue
+properties:
+ name:
+ type: string
+ description: Name to assign the ranges facet.
+ scope?:
+ type: ProductSearchFacetScopeEnum
+ default: query
+ description: Whether the facet must consider only the Products resulting from the search (`query`) or all the Products (`all`).
+ filter?:
+ type: SearchQuery
+ description: Additional filtering expression to apply to the search result before calculating the facet.
+ level?:
+ type: ProductSearchFacetCountLevelEnum
+ default: products
+ description: Specify whether to count Products (`products`) or Product Variants (`variants`).
+ field:
+ type: string
+ description: The field to facet on. Can be any searchable field on the [Product](ctp:api:type:Product).
+ ranges:
+ type: ProductSearchFacetRangesFacetRange[]
+ description: Define ranges for the facet.
+ language?:
+ type: Locale
+ fieldType?:
+ type: SearchFieldType
+ description: If the `field` is not standard, this must be the Attribute type.
diff --git a/api-specs/api/types/product-search/facets/ProductSearchFacetResult.raml b/api-specs/api/types/product-search/facets/ProductSearchFacetResult.raml
new file mode 100644
index 000000000..c5a0873d0
--- /dev/null
+++ b/api-specs/api/types/product-search/facets/ProductSearchFacetResult.raml
@@ -0,0 +1,9 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+displayName: ProductSearchFacetResult
+type: object
+(beta): true
+properties:
+ name:
+ type: string
+ description: Name of the facet.
diff --git a/api-specs/api/types/product-search/facets/ProductSearchFacetResultBucket.raml b/api-specs/api/types/product-search/facets/ProductSearchFacetResultBucket.raml
new file mode 100644
index 000000000..bfeaebf63
--- /dev/null
+++ b/api-specs/api/types/product-search/facets/ProductSearchFacetResultBucket.raml
@@ -0,0 +1,9 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+displayName: ProductSearchFacetResultBucket
+type: ProductSearchFacetResult
+(beta): true
+properties:
+ buckets:
+ type: ProductSearchFacetResultBucketEntry[]
+ description: Contains results of the facet.
diff --git a/api-specs/api/types/product-search/facets/ProductSearchFacetResultBucketEntry.raml b/api-specs/api/types/product-search/facets/ProductSearchFacetResultBucketEntry.raml
new file mode 100644
index 000000000..478f70790
--- /dev/null
+++ b/api-specs/api/types/product-search/facets/ProductSearchFacetResultBucketEntry.raml
@@ -0,0 +1,13 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+displayName: ProductSearchFacetResultBucketEntry
+type: object
+(beta): true
+properties:
+ key:
+ type: string
+ description: Key of the bucket.
+ count:
+ type: number
+ format: int32
+ description: Number of values in the bucket.
diff --git a/api-specs/api/types/product-search/facets/ProductSearchFacetResultCount.raml b/api-specs/api/types/product-search/facets/ProductSearchFacetResultCount.raml
new file mode 100644
index 000000000..42e6fc226
--- /dev/null
+++ b/api-specs/api/types/product-search/facets/ProductSearchFacetResultCount.raml
@@ -0,0 +1,10 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+displayName: ProductSearchFacetResultCount
+type: ProductSearchFacetResult
+(beta): true
+properties:
+ value:
+ type: number
+ format: int64
+ description: Number of Products (or Product Variants) matching the query.
diff --git a/api-specs/api/types/product-search/facets/ProductSearchFacetScope.raml b/api-specs/api/types/product-search/facets/ProductSearchFacetScope.raml
new file mode 100644
index 000000000..000ead490
--- /dev/null
+++ b/api-specs/api/types/product-search/facets/ProductSearchFacetScope.raml
@@ -0,0 +1,8 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+displayName: ProductSearchFacetScope
+type: string
+(beta): true
+enum:
+ - all
+ - query
diff --git a/api-specs/api/types/product-search/facets/ProductSearchFacetScopeEnum.raml b/api-specs/api/types/product-search/facets/ProductSearchFacetScopeEnum.raml
new file mode 100644
index 000000000..beac99d2f
--- /dev/null
+++ b/api-specs/api/types/product-search/facets/ProductSearchFacetScopeEnum.raml
@@ -0,0 +1,11 @@
+#%RAML 1.0 DataType
+(package): ProductSearch
+displayName: ProductSearchFacetScopeEnum
+type: string
+(beta): true
+enum:
+ - all
+ - query
+(enumDescriptions):
+ all: Count all Products (or Product Variants) without considering the search query.
+ query: Only count the Products (or Product Variants) that matches the search query.
diff --git a/api-specs/api/types/project/ProductSearchIndexingMode.raml b/api-specs/api/types/project/ProductSearchIndexingMode.raml
new file mode 100644
index 000000000..71e3d270e
--- /dev/null
+++ b/api-specs/api/types/project/ProductSearchIndexingMode.raml
@@ -0,0 +1,13 @@
+#%RAML 1.0 DataType
+(package): Project
+displayName: ProductSearchIndexingMode
+type: string
+(beta): true
+enum:
+ - ProductProjectionsSearch
+ - ProductsSearch
+(enumDescriptions):
+ ProductProjectionsSearch: |
+ For [Product Projection Search](/../api/projects/products-search).
+ ProductsSearch: |
+ For [Product Search](/../api/projects/product-search).
diff --git a/api-specs/api/types/project/ProductSearchStatus.raml b/api-specs/api/types/project/ProductSearchStatus.raml
new file mode 100644
index 000000000..5caa2e7fe
--- /dev/null
+++ b/api-specs/api/types/project/ProductSearchStatus.raml
@@ -0,0 +1,12 @@
+#%RAML 1.0 DataType
+(package): Project
+type: string
+(beta): true
+displayName: ProductSearchStatus
+description: Specifies the status of the [Product Search](/../api/projects/product-search) index.
+(enumDescriptions):
+ Activated: indicates that the [Search Products](/../api/projects/product-search#search-products) endpoint is fully operational.
+ Deactivated: indicates that the Product Search feature is currently not active.
+enum:
+ - Activated
+ - Deactivated
diff --git a/api-specs/api/types/project/SearchIndexingConfiguration.raml b/api-specs/api/types/project/SearchIndexingConfiguration.raml
index 602c0fbca..403cc3714 100644
--- a/api-specs/api/types/project/SearchIndexingConfiguration.raml
+++ b/api-specs/api/types/project/SearchIndexingConfiguration.raml
@@ -8,6 +8,10 @@ properties:
products?:
type: SearchIndexingConfigurationValues
description: Configuration for the [Product Projection Search](/../api/projects/products-search) and [Product Suggestions](/../api/projects/products-suggestions) endpoints.
+ productsSearch?:
+ type: SearchIndexingConfigurationValues
+ (beta): true
+ description: Configuration for the [Product Search](/../api/projects/product-search) feature.
orders?:
type: SearchIndexingConfigurationValues
(beta): true
diff --git a/api-specs/api/types/project/updates/ProjectChangeProductSearchIndexingEnabledAction.raml b/api-specs/api/types/project/updates/ProjectChangeProductSearchIndexingEnabledAction.raml
index 2c495cad1..e39ea26c9 100644
--- a/api-specs/api/types/project/updates/ProjectChangeProductSearchIndexingEnabledAction.raml
+++ b/api-specs/api/types/project/updates/ProjectChangeProductSearchIndexingEnabledAction.raml
@@ -10,3 +10,9 @@ properties:
description: |
- If `false`, the indexing of [Product](ctp:api:type:Product) information will stop and the [Product Projection Search](/../api/projects/products-search) as well as the [Product Suggestions](/../api/projects/products-suggestions) endpoint will not be available anymore for this Project. The Project's [SearchIndexingConfiguration](ctp:api:type:SearchIndexingConfiguration) `status` for `products` will be changed to `"Deactivated"`.
- If `true`, the indexing of [Product](ctp:api:type:Product) information will start and the [Product Projection Search](/../api/projects/products-search) as well as the [Product Suggestions](/../api/projects/products-suggestions) endpoint will become available soon after for this Project. Proportional to the amount of information being indexed, the Project's [SearchIndexingConfiguration](ctp:api:type:SearchIndexingConfiguration) `status` for `products` will be shown as `"Indexing"` during this time. As soon as the indexing has finished, the configuration status will be changed to `"Activated"` making the aforementioned endpoints fully available for this Project.
+ mode?:
+ type: ProductSearchIndexingMode
+ (beta): true
+ description: |
+ Controls whether the action should apply to [Product Projection Search](/../api/projects/products-search) or to [Product Search](/../api/projects/product-search).
+ default: ProductProjectionsSearch
diff --git a/api-specs/api/types/search/SearchAndExpression.raml b/api-specs/api/types/search/SearchAndExpression.raml
new file mode 100644
index 000000000..91e0841dd
--- /dev/null
+++ b/api-specs/api/types/search/SearchAndExpression.raml
@@ -0,0 +1,8 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchCompoundExpression
+(beta): true
+displayName: SearchAndExpression
+properties:
+ and:
+ type: SearchQuery[]
diff --git a/api-specs/api/types/search/SearchAnyValue.raml b/api-specs/api/types/search/SearchAnyValue.raml
new file mode 100644
index 000000000..7cdfb614c
--- /dev/null
+++ b/api-specs/api/types/search/SearchAnyValue.raml
@@ -0,0 +1,12 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchQueryExpressionValue
+(beta): true
+displayName: SearchAnyValue
+properties:
+ value:
+ type: any
+ language?:
+ type: Locale
+ caseInsensitive?:
+ type: boolean
diff --git a/api-specs/api/types/search/SearchCompoundExpression.raml b/api-specs/api/types/search/SearchCompoundExpression.raml
new file mode 100644
index 000000000..7c7b3d19a
--- /dev/null
+++ b/api-specs/api/types/search/SearchCompoundExpression.raml
@@ -0,0 +1,5 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchQuery
+(beta): true
+displayName: SearchCompoundExpression
diff --git a/api-specs/api/types/search/SearchDateRangeExpression.raml b/api-specs/api/types/search/SearchDateRangeExpression.raml
new file mode 100644
index 000000000..bd5797c24
--- /dev/null
+++ b/api-specs/api/types/search/SearchDateRangeExpression.raml
@@ -0,0 +1,8 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchQueryExpression
+(beta): true
+displayName: SearchDateRangeExpression
+properties:
+ range:
+ type: SearchDateRangeValue
diff --git a/api-specs/api/types/search/SearchDateRangeValue.raml b/api-specs/api/types/search/SearchDateRangeValue.raml
new file mode 100644
index 000000000..934f3b87d
--- /dev/null
+++ b/api-specs/api/types/search/SearchDateRangeValue.raml
@@ -0,0 +1,14 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchQueryExpressionValue
+(beta): true
+displayName: SearchDateRangeValue
+properties:
+ gte?:
+ type: date-only
+ gt?:
+ type: date-only
+ lte?:
+ type: date-only
+ lt?:
+ type: date-only
diff --git a/api-specs/api/types/search/SearchDateTimeRangeExpression.raml b/api-specs/api/types/search/SearchDateTimeRangeExpression.raml
new file mode 100644
index 000000000..d4bd97ecd
--- /dev/null
+++ b/api-specs/api/types/search/SearchDateTimeRangeExpression.raml
@@ -0,0 +1,8 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchQueryExpression
+(beta): true
+displayName: SearchDateTimeRangeExpression
+properties:
+ range:
+ type: SearchDateTimeRangeValue
diff --git a/api-specs/api/types/search/SearchDateTimeRangeValue.raml b/api-specs/api/types/search/SearchDateTimeRangeValue.raml
new file mode 100644
index 000000000..20b5e0dee
--- /dev/null
+++ b/api-specs/api/types/search/SearchDateTimeRangeValue.raml
@@ -0,0 +1,14 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchQueryExpressionValue
+(beta): true
+displayName: SearchDateTimeRangeValue
+properties:
+ gte?:
+ type: datetime
+ gt?:
+ type: datetime
+ lte?:
+ type: datetime
+ lt?:
+ type: datetime
diff --git a/api-specs/api/types/search/SearchExactExpression.raml b/api-specs/api/types/search/SearchExactExpression.raml
new file mode 100644
index 000000000..5149efa7f
--- /dev/null
+++ b/api-specs/api/types/search/SearchExactExpression.raml
@@ -0,0 +1,8 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchQueryExpression
+(beta): true
+displayName: SearchExactExpression
+properties:
+ exact:
+ type: SearchAnyValue
diff --git a/api-specs/api/types/search/SearchExistsExpression.raml b/api-specs/api/types/search/SearchExistsExpression.raml
new file mode 100644
index 000000000..89c7f2ef5
--- /dev/null
+++ b/api-specs/api/types/search/SearchExistsExpression.raml
@@ -0,0 +1,8 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchQueryExpression
+(beta): true
+displayName: SearchExistsExpression
+properties:
+ exists:
+ type: SearchExistsValue
diff --git a/api-specs/api/types/search/SearchExistsValue.raml b/api-specs/api/types/search/SearchExistsValue.raml
new file mode 100644
index 000000000..0071d2216
--- /dev/null
+++ b/api-specs/api/types/search/SearchExistsValue.raml
@@ -0,0 +1,8 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchQueryExpressionValue
+(beta): true
+displayName: SearchExistsValue
+properties:
+ language?:
+ type: Locale
diff --git a/api-specs/api/types/search/SearchFieldType.raml b/api-specs/api/types/search/SearchFieldType.raml
new file mode 100644
index 000000000..1d013fbe7
--- /dev/null
+++ b/api-specs/api/types/search/SearchFieldType.raml
@@ -0,0 +1,74 @@
+#%RAML 1.0 DataType
+(package): Search
+displayName: SearchFieldType
+description: Possible values for the `fieldType` property on query expressions indicating the data type of the `field`.
+type: string
+(beta): true
+enum:
+ - boolean
+ - text
+ - ltext
+ - enum
+ - lenum
+ - number
+ - money
+ - date
+ - datetime
+ - time
+ - reference
+ - set_boolean
+ - set_text
+ - set_ltext
+ - set_enum
+ - set_lenum
+ - set_number
+ - set_money
+ - set_date
+ - set_datetime
+ - set_time
+ - set_reference
+(enumDescriptions):
+ boolean: |
+ For Boolean fields and Attributes.
+ text: |
+ For string fields and Attributes.
+ ltext: |
+ For [LocalizedString](types#localizedstring) fields and Attributes.
+ enum: |
+ For enum fields and Attributes.
+ lenum: |
+ For localized enum fields and Attributes.
+ number: |
+ For number fields and Attributes.
+ money: |
+ For [Money](types#money) fields and Attributes.
+ date: |
+ For [Date](types#date) fields and Attributes.
+ datetime: |
+ For [DateTime](types#datetime) fields and Attributes.
+ time: |
+ For [Time](types#time) fields and Attributes.
+ reference: |
+ For [Reference](types#reference) fields and Attributes.
+ set_boolean: |
+ For Set of Boolean fields and Attributes.
+ set_text: |
+ For Set of string fields and Attributes.
+ set_ltext: |
+ For Set of [LocalizedString](types#localizedstring) fields and Attributes.
+ set_enum: |
+ For Set of enum fields and Attributes.
+ set_lenum: |
+ For Set of localized enum fields and Attributes.
+ set_number: |
+ For Set of number fields and Attributes.
+ set_money: |
+ For Set of [Money](types#money) fields and Attributes.
+ set_date: |
+ For Set of [Date](types#date) fields and Attributes.
+ set_datetime: |
+ For Set of [DateTime](types#datetime) fields and Attributes.
+ set_time: |
+ For Set of [Time](types#time) fields and Attributes.
+ set_reference: |
+ For Set of [Reference](types#reference) fields and Attributes.
diff --git a/api-specs/api/types/search/SearchFilterExpression.raml b/api-specs/api/types/search/SearchFilterExpression.raml
new file mode 100644
index 000000000..5fa03289a
--- /dev/null
+++ b/api-specs/api/types/search/SearchFilterExpression.raml
@@ -0,0 +1,8 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchCompoundExpression
+(beta): true
+displayName: SearchFilterExpression
+properties:
+ filter:
+ type: SearchQueryExpression[]
diff --git a/api-specs/api/types/search/SearchFullTextExpression.raml b/api-specs/api/types/search/SearchFullTextExpression.raml
new file mode 100644
index 000000000..f3bad3360
--- /dev/null
+++ b/api-specs/api/types/search/SearchFullTextExpression.raml
@@ -0,0 +1,8 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchQueryExpression
+(beta): true
+displayName: SearchFullTextExpression
+properties:
+ fullText:
+ type: SearchFullTextValue
diff --git a/api-specs/api/types/search/SearchFullTextPrefixExpression.raml b/api-specs/api/types/search/SearchFullTextPrefixExpression.raml
new file mode 100644
index 000000000..c6ba2a60f
--- /dev/null
+++ b/api-specs/api/types/search/SearchFullTextPrefixExpression.raml
@@ -0,0 +1,8 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchQueryExpression
+(beta): true
+displayName: SearchFullTextPrefixExpression
+properties:
+ fullTextPrefix:
+ type: SearchFullTextPrefixValue
diff --git a/api-specs/api/types/search/SearchFullTextPrefixValue.raml b/api-specs/api/types/search/SearchFullTextPrefixValue.raml
new file mode 100644
index 000000000..9abd7905d
--- /dev/null
+++ b/api-specs/api/types/search/SearchFullTextPrefixValue.raml
@@ -0,0 +1,12 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchQueryExpressionValue
+(beta): true
+displayName: SearchFullPrefixTextValue
+properties:
+ value:
+ type: any
+ language?:
+ type: Locale
+ mustMatch?:
+ type: SearchMatchType
diff --git a/api-specs/api/types/search/SearchFullTextValue.raml b/api-specs/api/types/search/SearchFullTextValue.raml
new file mode 100644
index 000000000..2be55f7c0
--- /dev/null
+++ b/api-specs/api/types/search/SearchFullTextValue.raml
@@ -0,0 +1,12 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchQueryExpressionValue
+(beta): true
+displayName: SearchFullTextValue
+properties:
+ value:
+ type: any
+ language?:
+ type: Locale
+ mustMatch?:
+ type: SearchMatchType
diff --git a/api-specs/api/types/search/SearchLongRangeExpression.raml b/api-specs/api/types/search/SearchLongRangeExpression.raml
new file mode 100644
index 000000000..f52d994e7
--- /dev/null
+++ b/api-specs/api/types/search/SearchLongRangeExpression.raml
@@ -0,0 +1,8 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchQueryExpression
+(beta): true
+displayName: SearchLongRangeExpression
+properties:
+ range:
+ type: SearchLongRangeValue
diff --git a/api-specs/api/types/search/SearchLongRangeValue.raml b/api-specs/api/types/search/SearchLongRangeValue.raml
new file mode 100644
index 000000000..d8ca37516
--- /dev/null
+++ b/api-specs/api/types/search/SearchLongRangeValue.raml
@@ -0,0 +1,18 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchQueryExpressionValue
+(beta): true
+displayName: SearchLongRangeValue
+properties:
+ gte?:
+ type: number
+ format: int64
+ gt?:
+ type: number
+ format: int64
+ lte?:
+ type: number
+ format: int64
+ lt?:
+ type: number
+ format: int64
diff --git a/api-specs/api/types/search/SearchMatchType.raml b/api-specs/api/types/search/SearchMatchType.raml
new file mode 100644
index 000000000..27b539b69
--- /dev/null
+++ b/api-specs/api/types/search/SearchMatchType.raml
@@ -0,0 +1,13 @@
+#%RAML 1.0 DataType
+(package): Search
+displayName: SearchMatchType
+type: string
+(beta): true
+enum:
+ - any
+ - all
+(enumDescriptions):
+ any: |
+ Returns resources for which at least one of the provided search terms match.
+ all: |
+ Returns only those resources for which all the provided search terms match.
diff --git a/api-specs/api/types/search/SearchMatchingVariant.raml b/api-specs/api/types/search/SearchMatchingVariant.raml
new file mode 100644
index 000000000..26aea76c7
--- /dev/null
+++ b/api-specs/api/types/search/SearchMatchingVariant.raml
@@ -0,0 +1,13 @@
+#%RAML 1.0 DataType
+(package): Search
+displayName: SearchMatchingVariant
+type: object
+(beta): true
+properties:
+ id:
+ type: number
+ format: int32
+ description: Unique identifier of the variant.
+ sku?:
+ type: string
+ description: SKU of the matching variant.
diff --git a/api-specs/api/types/search/SearchNotExpression.raml b/api-specs/api/types/search/SearchNotExpression.raml
new file mode 100644
index 000000000..d39738d62
--- /dev/null
+++ b/api-specs/api/types/search/SearchNotExpression.raml
@@ -0,0 +1,8 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchCompoundExpression
+(beta): true
+displayName: SearchNotExpression
+properties:
+ not:
+ type: SearchQuery[]
diff --git a/api-specs/api/types/search/SearchNumberRangeExpression.raml b/api-specs/api/types/search/SearchNumberRangeExpression.raml
new file mode 100644
index 000000000..18f708217
--- /dev/null
+++ b/api-specs/api/types/search/SearchNumberRangeExpression.raml
@@ -0,0 +1,8 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchQueryExpression
+(beta): true
+displayName: SearchNumberRangeExpression
+properties:
+ range:
+ type: SearchNumberRangeValue
diff --git a/api-specs/api/types/search/SearchNumberRangeValue.raml b/api-specs/api/types/search/SearchNumberRangeValue.raml
new file mode 100644
index 000000000..5bbcdbb83
--- /dev/null
+++ b/api-specs/api/types/search/SearchNumberRangeValue.raml
@@ -0,0 +1,18 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchQueryExpressionValue
+(beta): true
+displayName: SearchNumberRangeValue
+properties:
+ gte?:
+ type: number
+ format: float
+ gt?:
+ type: number
+ format: float
+ lte?:
+ type: number
+ format: float
+ lt?:
+ type: number
+ format: float
diff --git a/api-specs/api/types/search/SearchOrExpression.raml b/api-specs/api/types/search/SearchOrExpression.raml
new file mode 100644
index 000000000..6fe39b43a
--- /dev/null
+++ b/api-specs/api/types/search/SearchOrExpression.raml
@@ -0,0 +1,8 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchCompoundExpression
+(beta): true
+displayName: SearchOrExpression
+properties:
+ or:
+ type: SearchQuery[]
diff --git a/api-specs/api/types/search/SearchPrefixExpression.raml b/api-specs/api/types/search/SearchPrefixExpression.raml
new file mode 100644
index 000000000..85a5c58d6
--- /dev/null
+++ b/api-specs/api/types/search/SearchPrefixExpression.raml
@@ -0,0 +1,8 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchQueryExpression
+(beta): true
+displayName: SearchPrefixExpression
+properties:
+ prefix:
+ type: SearchAnyValue
diff --git a/api-specs/api/types/search/SearchQuery.raml b/api-specs/api/types/search/SearchQuery.raml
new file mode 100644
index 000000000..d8572b41a
--- /dev/null
+++ b/api-specs/api/types/search/SearchQuery.raml
@@ -0,0 +1,5 @@
+#%RAML 1.0 DataType
+(package): Search
+type: object
+(beta): true
+displayName: SearchQuery
diff --git a/api-specs/api/types/search/SearchQueryExpression.raml b/api-specs/api/types/search/SearchQueryExpression.raml
new file mode 100644
index 000000000..4c5288f77
--- /dev/null
+++ b/api-specs/api/types/search/SearchQueryExpression.raml
@@ -0,0 +1,5 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchQuery
+(beta): true
+displayName: SearchQueryExpression
diff --git a/api-specs/api/types/search/SearchQueryExpressionValue.raml b/api-specs/api/types/search/SearchQueryExpressionValue.raml
new file mode 100644
index 000000000..80942d0e9
--- /dev/null
+++ b/api-specs/api/types/search/SearchQueryExpressionValue.raml
@@ -0,0 +1,13 @@
+#%RAML 1.0 DataType
+(package): Search
+type: object
+(beta): true
+displayName: SearchQueryExpressionValue
+properties:
+ field:
+ type: string
+ boost?:
+ format: double
+ type: number
+ fieldType?:
+ type: SearchFieldType
diff --git a/api-specs/api/types/search/SearchSortMode.raml b/api-specs/api/types/search/SearchSortMode.raml
new file mode 100644
index 000000000..19a5cc700
--- /dev/null
+++ b/api-specs/api/types/search/SearchSortMode.raml
@@ -0,0 +1,22 @@
+#%RAML 1.0 DataType
+(package): Search
+displayName: SearchSortMode
+type: string
+(beta): true
+description: |
+ For set-type fields, only a single value of the set is taken into account for sorting.
+ The sort mode determines whether the minimum or maximum value, or a calculated statistical value should be used as sorting value.
+enum:
+ - min
+ - max
+ - avg
+ - sum
+(enumDescriptions):
+ min: |
+ Use the minimum of all available values.
+ max: |
+ Use the maximum of all available values.
+ avg: |
+ Use the average of all available values.
+ sum: |
+ Use the sum of all available values.
diff --git a/api-specs/api/types/search/SearchSortOrder.raml b/api-specs/api/types/search/SearchSortOrder.raml
new file mode 100644
index 000000000..91253cfda
--- /dev/null
+++ b/api-specs/api/types/search/SearchSortOrder.raml
@@ -0,0 +1,13 @@
+#%RAML 1.0 DataType
+(package): Search
+displayName: SearchSortOrder
+type: string
+(beta): true
+enum:
+ - asc
+ - desc
+(enumDescriptions):
+ asc: |
+ Ascending sort order, the lowest value is listed first.
+ desc: |
+ Descending sort order, the highest value listed first.
diff --git a/api-specs/api/types/search/SearchSorting.raml b/api-specs/api/types/search/SearchSorting.raml
new file mode 100644
index 000000000..bb747f703
--- /dev/null
+++ b/api-specs/api/types/search/SearchSorting.raml
@@ -0,0 +1,33 @@
+#%RAML 1.0 DataType
+(package): Search
+type: object
+(beta): true
+displayName: SearchSorting
+description: |
+ Sorting parameters provided with a Search request.
+ Sorting allows you to control how results to your query are sorted.
+ If no sorting is specified, the results are sorted by relevance in descending (`desc`) order.
+properties:
+ field:
+ type: string
+ description: |
+ Use any searchable field of the resource as sort criterion.
+ language?:
+ type: Locale
+ order:
+ type: SearchSortOrder
+ description: |
+ Specify the order in which the search results should be sorted.
+ Can be `asc` for ascending, or `desc` for descending order.
+ mode?:
+ type: SearchSortMode
+ description: |
+ Specify the sort mode to be applied for a set-type `field`.
+ fieldType?:
+ type: SearchFieldType
+ description: |
+ Provide the data type of the given `field`.
+ filter?:
+ type: SearchQueryExpression
+ description: |
+ Allows you to apply a [sort filter](/../api/search-query-language#sort-filter).
diff --git a/api-specs/api/types/search/SearchTimeRangeExpression.raml b/api-specs/api/types/search/SearchTimeRangeExpression.raml
new file mode 100644
index 000000000..4cda57fa8
--- /dev/null
+++ b/api-specs/api/types/search/SearchTimeRangeExpression.raml
@@ -0,0 +1,8 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchQueryExpression
+(beta): true
+displayName: SearchTimeRangeExpression
+properties:
+ range:
+ type: SearchTimeRangeValue
diff --git a/api-specs/api/types/search/SearchTimeRangeValue.raml b/api-specs/api/types/search/SearchTimeRangeValue.raml
new file mode 100644
index 000000000..30663f3bc
--- /dev/null
+++ b/api-specs/api/types/search/SearchTimeRangeValue.raml
@@ -0,0 +1,14 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchQueryExpressionValue
+(beta): true
+displayName: SearchTimeRangeValue
+properties:
+ gte?:
+ type: time-only
+ gt?:
+ type: time-only
+ lte?:
+ type: time-only
+ lt?:
+ type: time-only
diff --git a/api-specs/api/types/search/SearchWildCardExpression.raml b/api-specs/api/types/search/SearchWildCardExpression.raml
new file mode 100644
index 000000000..19242ab27
--- /dev/null
+++ b/api-specs/api/types/search/SearchWildCardExpression.raml
@@ -0,0 +1,8 @@
+#%RAML 1.0 DataType
+(package): Search
+type: SearchQueryExpression
+(beta): true
+displayName: SearchWildCardExpression
+properties:
+ wildcard:
+ type: SearchAnyValue
diff --git a/api-specs/api/types/types.raml b/api-specs/api/types/types.raml
index 771c7e52e..3432f1cea 100644
--- a/api-specs/api/types/types.raml
+++ b/api-specs/api/types/types.raml
@@ -1622,6 +1622,31 @@ ProductDiscountSetValidFromAction: !include product-discount/updates/ProductDisc
# yamllint disable-line rule:line-length
ProductDiscountSetValidFromAndUntilAction: !include product-discount/updates/ProductDiscountSetValidFromAndUntilAction.raml
ProductDiscountSetValidUntilAction: !include product-discount/updates/ProductDiscountSetValidUntilAction.raml
+ProductPagedSearchResponse: !include product-search/ProductPagedSearchResponse.raml
+ProductSearchErrorResponse: !include product-search/ProductSearchErrorResponse.raml
+ProductSearchMatchingVariantEntry: !include product-search/ProductSearchMatchingVariantEntry.raml
+ProductSearchMatchingVariants: !include product-search/ProductSearchMatchingVariants.raml
+ProductSearchProjectionParams: !include product-search/ProductSearchProjectionParams.raml
+ProductSearchRequest: !include product-search/ProductSearchRequest.raml
+ProductSearchResult: !include product-search/ProductSearchResult.raml
+ProductSearchFacetCountExpression: !include product-search/facets/ProductSearchFacetCountExpression.raml
+ProductSearchFacetCountLevelEnum: !include product-search/facets/ProductSearchFacetCountLevelEnum.raml
+ProductSearchFacetCountValue: !include product-search/facets/ProductSearchFacetCountValue.raml
+ProductSearchFacetDistinctBucketSortBy: !include product-search/facets/ProductSearchFacetDistinctBucketSortBy.raml
+# yamllint disable-line rule:line-length
+ProductSearchFacetDistinctBucketSortExpression: !include product-search/facets/ProductSearchFacetDistinctBucketSortExpression.raml
+ProductSearchFacetDistinctExpression: !include product-search/facets/ProductSearchFacetDistinctExpression.raml
+ProductSearchFacetDistinctValue: !include product-search/facets/ProductSearchFacetDistinctValue.raml
+ProductSearchFacetExpression: !include product-search/facets/ProductSearchFacetExpression.raml
+ProductSearchFacetRangesExpression: !include product-search/facets/ProductSearchFacetRangesExpression.raml
+ProductSearchFacetRangesFacetRange: !include product-search/facets/ProductSearchFacetRangesFacetRange.raml
+ProductSearchFacetRangesValue: !include product-search/facets/ProductSearchFacetRangesValue.raml
+ProductSearchFacetResult: !include product-search/facets/ProductSearchFacetResult.raml
+ProductSearchFacetResultBucket: !include product-search/facets/ProductSearchFacetResultBucket.raml
+ProductSearchFacetResultBucketEntry: !include product-search/facets/ProductSearchFacetResultBucketEntry.raml
+ProductSearchFacetResultCount: !include product-search/facets/ProductSearchFacetResultCount.raml
+ProductSearchFacetScope: !include product-search/facets/ProductSearchFacetScope.raml
+ProductSearchFacetScopeEnum: !include product-search/facets/ProductSearchFacetScopeEnum.raml
AssignedProductReference: !include product-selection/AssignedProductReference.raml
AssignedProductSelection: !include product-selection/AssignedProductSelection.raml
AssignedProductSelectionPagedQueryResponse: !include product-selection/AssignedProductSelectionPagedQueryResponse.raml
@@ -1828,6 +1853,8 @@ CartValueType: !include project/CartValueType.raml
CartsConfiguration: !include project/CartsConfiguration.raml
ExternalOAuth: !include project/ExternalOAuth.raml
OrderSearchStatus: !include project/OrderSearchStatus.raml
+ProductSearchIndexingMode: !include project/ProductSearchIndexingMode.raml
+ProductSearchStatus: !include project/ProductSearchStatus.raml
Project: !include project/Project.raml
ProjectUpdate: !include project/ProjectUpdate.raml
ProjectUpdateAction: !include project/ProjectUpdateAction.raml
@@ -1902,6 +1929,40 @@ ReviewSetTargetAction: !include review/updates/ReviewSetTargetAction.raml
ReviewSetTextAction: !include review/updates/ReviewSetTextAction.raml
ReviewSetTitleAction: !include review/updates/ReviewSetTitleAction.raml
ReviewTransitionStateAction: !include review/updates/ReviewTransitionStateAction.raml
+SearchAndExpression: !include search/SearchAndExpression.raml
+SearchAnyValue: !include search/SearchAnyValue.raml
+SearchCompoundExpression: !include search/SearchCompoundExpression.raml
+SearchDateRangeExpression: !include search/SearchDateRangeExpression.raml
+SearchDateRangeValue: !include search/SearchDateRangeValue.raml
+SearchDateTimeRangeExpression: !include search/SearchDateTimeRangeExpression.raml
+SearchDateTimeRangeValue: !include search/SearchDateTimeRangeValue.raml
+SearchExactExpression: !include search/SearchExactExpression.raml
+SearchExistsExpression: !include search/SearchExistsExpression.raml
+SearchExistsValue: !include search/SearchExistsValue.raml
+SearchFieldType: !include search/SearchFieldType.raml
+SearchFilterExpression: !include search/SearchFilterExpression.raml
+SearchFullTextExpression: !include search/SearchFullTextExpression.raml
+SearchFullTextPrefixExpression: !include search/SearchFullTextPrefixExpression.raml
+SearchFullTextPrefixValue: !include search/SearchFullTextPrefixValue.raml
+SearchFullTextValue: !include search/SearchFullTextValue.raml
+SearchLongRangeExpression: !include search/SearchLongRangeExpression.raml
+SearchLongRangeValue: !include search/SearchLongRangeValue.raml
+SearchMatchType: !include search/SearchMatchType.raml
+SearchMatchingVariant: !include search/SearchMatchingVariant.raml
+SearchNotExpression: !include search/SearchNotExpression.raml
+SearchNumberRangeExpression: !include search/SearchNumberRangeExpression.raml
+SearchNumberRangeValue: !include search/SearchNumberRangeValue.raml
+SearchOrExpression: !include search/SearchOrExpression.raml
+SearchPrefixExpression: !include search/SearchPrefixExpression.raml
+SearchQuery: !include search/SearchQuery.raml
+SearchQueryExpression: !include search/SearchQueryExpression.raml
+SearchQueryExpressionValue: !include search/SearchQueryExpressionValue.raml
+SearchSortMode: !include search/SearchSortMode.raml
+SearchSortOrder: !include search/SearchSortOrder.raml
+SearchSorting: !include search/SearchSorting.raml
+SearchTimeRangeExpression: !include search/SearchTimeRangeExpression.raml
+SearchTimeRangeValue: !include search/SearchTimeRangeValue.raml
+SearchWildCardExpression: !include search/SearchWildCardExpression.raml
CartClassificationTier: !include shipping-method/CartClassificationTier.raml
CartScoreTier: !include shipping-method/CartScoreTier.raml
CartValueTier: !include shipping-method/CartValueTier.raml