diff --git a/specs/composition/common/schemas/components/CompositionBehavior.yml b/specs/composition/common/schemas/components/CompositionBehavior.yml index 10a8ca2f3df..a4636ed5dea 100644 --- a/specs/composition/common/schemas/components/CompositionBehavior.yml +++ b/specs/composition/common/schemas/components/CompositionBehavior.yml @@ -3,115 +3,6 @@ compositionBehavior: additionalProperties: false properties: injection: - title: injection - type: object - additionalProperties: false - properties: - main: - title: main - type: object - additionalProperties: false - properties: - source: - title: compositionSource - type: object - additionalProperties: false - properties: - search: - title: compositionSourceSearch - type: object - additionalProperties: false - properties: - index: - type: string - description: Composition Main Index name. - example: Products - params: - $ref: './Injection.yml#/mainInjectionQueryParameters' - required: - - index - required: - - search - required: - - source - injectedItems: - type: array - description: list of injected items of the current Composition. - minItems: 0 - maxItems: 2 - items: - $ref: '#/injectedItem' - deduplication: - title: deduplication - type: object - additionalProperties: false - description: Deduplication configures the methods used to resolve duplicate items between main search results and injected group results. - properties: - positioning: - $ref: '#/dedupPositioning' - required: - - positioning - required: - - main + $ref: './injection/Behaviour.yml#/injection' required: - injection - -injectedItem: - type: object - additionalProperties: false - properties: - key: - type: string - description: injected Item unique identifier. - source: - description: Search source to be used to inject items into result set. - $ref: '#/injectedItemSource' - position: - type: integer - minimum: 0 - maximum: 19 - length: - type: integer - minimum: 0 - maximum: 20 - metadata: - title: injectedItemMetadata - type: object - description: Used to add metadata to the results of the injectedItem. - properties: - hits: - title: injectedItemHitsMetadata - type: object - description: Adds the provided metadata to each injected hit via an `_extra` attribute. - properties: - addItemKey: - type: boolean - description: When true, the `_injectedItemKey` field is set in the `_extra` object of each affected hit. - extra: - type: object - additionalProperties: true - description: The user-defined key-value pairs that will be placed in the `_extra` field of each affected hit. - required: - - key - - source - - position - - length - -injectedItemSource: - oneOf: - - $ref: './InjectionSource.yml#/SearchSource' - - $ref: './InjectionSource.yml#/ExternalSource' - -dedupPositioning: - type: string - enum: - - highest - - highestInjected - description: | - Deduplication positioning configures how a duplicate result should be resolved between an injected item and main search results. - Current configuration supports: - - 'highest': always select the item in the highest position, and remove duplicates that appear lower in the results. - - 'highestInjected': duplicate result will be moved to its highest possible injected position, but not higher. - If a duplicate appears higher in main search results, it will be removed to stay it's intended group position (which could be lower than main). - example: highest - default: highestInjected diff --git a/specs/composition/common/schemas/components/Injection.yml b/specs/composition/common/schemas/components/Injection.yml deleted file mode 100644 index 2edf32e229f..00000000000 --- a/specs/composition/common/schemas/components/Injection.yml +++ /dev/null @@ -1,127 +0,0 @@ -baseInjectionQueryParameters: - title: Composition common query parameters between main and injected items as object - type: object - additionalProperties: false - properties: - advancedSyntax: - $ref: '../../params/Search.yml#/advancedSyntax' - advancedSyntaxFeatures: - $ref: '../../params/Search.yml#/advancedSyntaxFeatures' - allowTyposOnNumericTokens: - $ref: '../../params/Search.yml#/allowTyposOnNumericTokens' - alternativesAsExact: - $ref: '../../params/Search.yml#/alternativesAsExact' - analytics: - $ref: '../../params/Search.yml#/analytics' - attributeCriteriaComputedByMinProximity: - $ref: '../../params/Search.yml#/attributeCriteriaComputedByMinProximity' - attributesToHighlight: - $ref: '../../params/Search.yml#/attributesToHighlight' - attributesToRetrieve: - $ref: '../../params/Search.yml#/attributesToRetrieve' - attributesToSnippet: - $ref: '../../params/Search.yml#/attributesToSnippet' - clickAnalytics: - $ref: '../../params/Search.yml#/clickAnalytics' - decompoundQuery: - $ref: '../../params/Search.yml#/decompoundQuery' - disableExactOnAttributes: - $ref: '../../params/Search.yml#/disableExactOnAttributes' - disableTypoToleranceOnAttributes: - $ref: '../../params/Search.yml#/disableTypoToleranceOnAttributes' - distinct: - $ref: '../../params/Search.yml#/distinct' - enableABTest: - $ref: '../../params/Search.yml#/enableABTest' - enablePersonalization: - $ref: '../../params/Search.yml#/enablePersonalization' - enableReRanking: - $ref: '../../params/Search.yml#/enableReRanking' - enableRules: - $ref: '../../params/Search.yml#/enableRules' - exactOnSingleWordQuery: - $ref: '../../params/Search.yml#/exactOnSingleWordQuery' - facetFilters: - $ref: '../../params/Search.yml#/facetFilters' - filters: - $ref: '../../params/Search.yml#/filters' - getRankingInfo: - $ref: '../../params/Search.yml#/getRankingInfo' - highlightPostTag: - $ref: '../../params/Search.yml#/highlightPostTag' - highlightPreTag: - $ref: '../../params/Search.yml#/highlightPreTag' - ignorePlurals: - $ref: '../../params/Search.yml#/ignorePlurals' - maxFacetHits: - $ref: '../../params/Search.yml#/maxFacetHits' - minProximity: - $ref: '../../params/Search.yml#/minProximity' - minWordSizefor1Typo: - $ref: '../../params/Search.yml#/minWordSizefor1Typo' - minWordSizefor2Typos: - $ref: '../../params/Search.yml#/minWordSizefor2Typos' - naturalLanguages: - $ref: '../../params/Search.yml#/naturalLanguages' - numericFilters: - $ref: '../../params/Search.yml#/numericFilters' - optionalFilters: - $ref: '../../params/Search.yml#/optionalFilters' - optionalWords: - $ref: '../../params/Search.yml#/optionalWords' - percentileComputation: - $ref: '../../params/Search.yml#/percentileComputation' - personalizationImpact: - $ref: '../../params/Search.yml#/personalizationImpact' - queryLanguages: - $ref: '../../params/Search.yml#/queryLanguages' - queryType: - $ref: '../../params/Search.yml#/queryType' - removeStopWords: - $ref: '../../params/Search.yml#/removeStopWords' - removeWordsIfNoResults: - $ref: '../../params/Search.yml#/removeWordsIfNoResults' - replaceSynonymsInHighlight: - $ref: '../../params/Search.yml#/replaceSynonymsInHighlight' - responseFields: - $ref: '../../params/Search.yml#/responseFields' - restrictHighlightAndSnippetArrays: - $ref: '../../params/Search.yml#/restrictHighlightAndSnippetArrays' - restrictSearchableAttributes: - $ref: '../../params/Search.yml#/restrictSearchableAttributes' - ruleContexts: - $ref: '../../params/Search.yml#/ruleContexts' - snippetEllipsisText: - $ref: '../../params/Search.yml#/snippetEllipsisText' - synonyms: - $ref: '../../params/Search.yml#/synonyms' - typoTolerance: - $ref: '../../params/Search.yml#/typoTolerance' - -mainInjectionQueryParameters: - title: Composition Main Injection Query parameters as object - type: object - additionalProperties: false - allOf: - - $ref: '#/baseInjectionQueryParameters' - - type: object - additionalProperties: false - properties: - facetingAfterDistinct: - $ref: '../../params/Search.yml#/facetingAfterDistinct' - facets: - $ref: '../../params/Composition.yml#/facets' - hitsPerPage: - $ref: '../../params/Search.yml#/hitsPerPage' - maxValuesPerFacet: - $ref: '../../params/Search.yml#/maxValuesPerFacet' - renderingContent: - $ref: '../../params/Search.yml#/renderingContent' - sortFacetValuesBy: - $ref: '../../params/Search.yml#/sortFacetValuesBy' - sumOrFiltersScores: - $ref: '../../params/Search.yml#/sumOrFiltersScores' - -injectedItemsQueryParameters: - title: Composition injectedItems Query parameters as object - $ref: '#/baseInjectionQueryParameters' diff --git a/specs/composition/common/schemas/components/injection/Behaviour.yml b/specs/composition/common/schemas/components/injection/Behaviour.yml new file mode 100644 index 00000000000..5641e2c0961 --- /dev/null +++ b/specs/composition/common/schemas/components/injection/Behaviour.yml @@ -0,0 +1,111 @@ +injection: + title: injection + type: object + additionalProperties: false + properties: + main: + title: main + type: object + additionalProperties: false + properties: + source: + title: compositionSource + type: object + additionalProperties: false + properties: + search: + title: compositionSourceSearch + type: object + additionalProperties: false + properties: + index: + type: string + description: Composition Main Index name. + example: Products + params: + $ref: './QueryParams.yml#/mainInjectionQueryParameters' + required: + - index + required: + - search + required: + - source + injectedItems: + type: array + description: list of injected items of the current Composition. + minItems: 0 + maxItems: 2 + items: + $ref: '#/injectedItem' + deduplication: + title: deduplication + type: object + additionalProperties: false + description: Deduplication configures the methods used to resolve duplicate items between main search results and injected group results. + properties: + positioning: + $ref: '#/dedupPositioning' + required: + - positioning + required: + - main + +injectedItem: + type: object + additionalProperties: false + properties: + key: + type: string + description: injected Item unique identifier. + source: + description: Search source to be used to inject items into result set. + $ref: '#/injectedItemSource' + position: + type: integer + minimum: 0 + maximum: 19 + length: + type: integer + minimum: 0 + maximum: 20 + metadata: + title: injectedItemMetadata + type: object + description: Used to add metadata to the results of the injectedItem. + properties: + hits: + title: injectedItemHitsMetadata + type: object + description: Adds the provided metadata to each injected hit via an `_extra` attribute. + properties: + addItemKey: + type: boolean + description: When true, the `_injectedItemKey` field is set in the `_extra` object of each affected hit. + extra: + type: object + additionalProperties: true + description: The user-defined key-value pairs that will be placed in the `_extra` field of each affected hit. + required: + - key + - source + - position + - length + +injectedItemSource: + oneOf: + - $ref: './Source.yml#/SearchSource' + - $ref: './Source.yml#/ExternalSource' + +dedupPositioning: + type: string + enum: + - highest + - highestInjected + description: | + Deduplication positioning configures how a duplicate result should be resolved between an injected item and main search results. + Current configuration supports: + - 'highest': always select the item in the highest position, and remove duplicates that appear lower in the results. + - 'highestInjected': duplicate result will be moved to its highest possible injected position, but not higher. + If a duplicate appears higher in main search results, it will be removed to stay it's intended group position (which could be lower than main). + example: highest + default: highestInjected \ No newline at end of file diff --git a/specs/composition/common/schemas/components/injection/QueryParams.yml b/specs/composition/common/schemas/components/injection/QueryParams.yml new file mode 100644 index 00000000000..097bcf37fdc --- /dev/null +++ b/specs/composition/common/schemas/components/injection/QueryParams.yml @@ -0,0 +1,127 @@ +baseInjectionQueryParameters: + title: Composition common query parameters between main and injected items as object + type: object + additionalProperties: false + properties: + advancedSyntax: + $ref: '../../../params/Search.yml#/advancedSyntax' + advancedSyntaxFeatures: + $ref: '../../../params/Search.yml#/advancedSyntaxFeatures' + allowTyposOnNumericTokens: + $ref: '../../../params/Search.yml#/allowTyposOnNumericTokens' + alternativesAsExact: + $ref: '../../../params/Search.yml#/alternativesAsExact' + analytics: + $ref: '../../../params/Search.yml#/analytics' + attributeCriteriaComputedByMinProximity: + $ref: '../../../params/Search.yml#/attributeCriteriaComputedByMinProximity' + attributesToHighlight: + $ref: '../../../params/Search.yml#/attributesToHighlight' + attributesToRetrieve: + $ref: '../../../params/Search.yml#/attributesToRetrieve' + attributesToSnippet: + $ref: '../../../params/Search.yml#/attributesToSnippet' + clickAnalytics: + $ref: '../../../params/Search.yml#/clickAnalytics' + decompoundQuery: + $ref: '../../../params/Search.yml#/decompoundQuery' + disableExactOnAttributes: + $ref: '../../../params/Search.yml#/disableExactOnAttributes' + disableTypoToleranceOnAttributes: + $ref: '../../../params/Search.yml#/disableTypoToleranceOnAttributes' + distinct: + $ref: '../../../params/Search.yml#/distinct' + enableABTest: + $ref: '../../../params/Search.yml#/enableABTest' + enablePersonalization: + $ref: '../../../params/Search.yml#/enablePersonalization' + enableReRanking: + $ref: '../../../params/Search.yml#/enableReRanking' + enableRules: + $ref: '../../../params/Search.yml#/enableRules' + exactOnSingleWordQuery: + $ref: '../../../params/Search.yml#/exactOnSingleWordQuery' + facetFilters: + $ref: '../../../params/Search.yml#/facetFilters' + filters: + $ref: '../../../params/Search.yml#/filters' + getRankingInfo: + $ref: '../../../params/Search.yml#/getRankingInfo' + highlightPostTag: + $ref: '../../../params/Search.yml#/highlightPostTag' + highlightPreTag: + $ref: '../../../params/Search.yml#/highlightPreTag' + ignorePlurals: + $ref: '../../../params/Search.yml#/ignorePlurals' + maxFacetHits: + $ref: '../../../params/Search.yml#/maxFacetHits' + minProximity: + $ref: '../../../params/Search.yml#/minProximity' + minWordSizefor1Typo: + $ref: '../../../params/Search.yml#/minWordSizefor1Typo' + minWordSizefor2Typos: + $ref: '../../../params/Search.yml#/minWordSizefor2Typos' + naturalLanguages: + $ref: '../../../params/Search.yml#/naturalLanguages' + numericFilters: + $ref: '../../../params/Search.yml#/numericFilters' + optionalFilters: + $ref: '../../../params/Search.yml#/optionalFilters' + optionalWords: + $ref: '../../../params/Search.yml#/optionalWords' + percentileComputation: + $ref: '../../../params/Search.yml#/percentileComputation' + personalizationImpact: + $ref: '../../../params/Search.yml#/personalizationImpact' + queryLanguages: + $ref: '../../../params/Search.yml#/queryLanguages' + queryType: + $ref: '../../../params/Search.yml#/queryType' + removeStopWords: + $ref: '../../../params/Search.yml#/removeStopWords' + removeWordsIfNoResults: + $ref: '../../../params/Search.yml#/removeWordsIfNoResults' + replaceSynonymsInHighlight: + $ref: '../../../params/Search.yml#/replaceSynonymsInHighlight' + responseFields: + $ref: '../../../params/Search.yml#/responseFields' + restrictHighlightAndSnippetArrays: + $ref: '../../../params/Search.yml#/restrictHighlightAndSnippetArrays' + restrictSearchableAttributes: + $ref: '../../../params/Search.yml#/restrictSearchableAttributes' + ruleContexts: + $ref: '../../../params/Search.yml#/ruleContexts' + snippetEllipsisText: + $ref: '../../../params/Search.yml#/snippetEllipsisText' + synonyms: + $ref: '../../../params/Search.yml#/synonyms' + typoTolerance: + $ref: '../../../params/Search.yml#/typoTolerance' + +mainInjectionQueryParameters: + title: Composition Main Injection Query parameters as object + type: object + additionalProperties: false + allOf: + - $ref: '#/baseInjectionQueryParameters' + - type: object + additionalProperties: false + properties: + facetingAfterDistinct: + $ref: '../../../params/Search.yml#/facetingAfterDistinct' + facets: + $ref: '../../../params/Composition.yml#/facets' + hitsPerPage: + $ref: '../../../params/Search.yml#/hitsPerPage' + maxValuesPerFacet: + $ref: '../../../params/Search.yml#/maxValuesPerFacet' + renderingContent: + $ref: '../../../params/Search.yml#/renderingContent' + sortFacetValuesBy: + $ref: '../../../params/Search.yml#/sortFacetValuesBy' + sumOrFiltersScores: + $ref: '../../../params/Search.yml#/sumOrFiltersScores' + +injectedItemsQueryParameters: + title: Composition injectedItems Query parameters as object + $ref: '#/baseInjectionQueryParameters' diff --git a/specs/composition/common/schemas/components/InjectionSource.yml b/specs/composition/common/schemas/components/injection/Source.yml similarity index 89% rename from specs/composition/common/schemas/components/InjectionSource.yml rename to specs/composition/common/schemas/components/injection/Source.yml index 6808ad6fefb..b742cd8dfab 100644 --- a/specs/composition/common/schemas/components/InjectionSource.yml +++ b/specs/composition/common/schemas/components/injection/Source.yml @@ -14,7 +14,7 @@ SearchSource: description: Composition Index name. example: Products params: - $ref: './Injection.yml#/injectedItemsQueryParameters' + $ref: './QueryParams.yml#/injectedItemsQueryParameters' required: - index required: @@ -36,7 +36,7 @@ ExternalSource: description: Composition Index name. example: Products params: - $ref: './Injection.yml#/injectedItemsQueryParameters' + $ref: './QueryParams.yml#/injectedItemsQueryParameters' ordering: $ref: '#/externalOrdering' required: