From 4902374839d3a14853a3d5c0b693f4496f07a49a Mon Sep 17 00:00:00 2001 From: Maxfield Kouzel Date: Thu, 9 Oct 2025 10:27:34 -0400 Subject: [PATCH 1/3] Support facetAllowlist query parameter for vertical searches Allows the "facetAllowlist" parameter to be set on vertical searches. This parameter specifies the subset of field IDs that are configured as facet fields that facet options should be returned for in the search response. If unspecified, all fields configured as facetable can be returned if they have data for the given query. J=WAT-4928 TEST=manual Added a query to the test-site vertical requests that returns facets. Confirmed that the facetAllowlist parameter is settable and works as expected. --- ...re.verticalsearchrequest.facetallowlist.md | 13 +++++++++++++ docs/search-core.verticalsearchrequest.md | 19 +++++++++++++++++++ etc/search-core.api.md | 1 + src/infra/SearchServiceImpl.ts | 6 ++++-- .../request/VerticalSearchRequest.ts | 6 ++++-- test-site/index.html | 1 + test-site/src/js/index.js | 9 ++++++++- test-site/src/js/requests/verticalRequest.js | 9 ++++++++- test-site/src/ts/index.ts | 13 ++++++++++++- test-site/src/ts/requests/verticalRequest.ts | 9 ++++++++- 10 files changed, 78 insertions(+), 8 deletions(-) create mode 100644 docs/search-core.verticalsearchrequest.facetallowlist.md diff --git a/docs/search-core.verticalsearchrequest.facetallowlist.md b/docs/search-core.verticalsearchrequest.facetallowlist.md new file mode 100644 index 00000000..7d23cab9 --- /dev/null +++ b/docs/search-core.verticalsearchrequest.facetallowlist.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [@yext/search-core](./search-core.md) > [VerticalSearchRequest](./search-core.verticalsearchrequest.md) > [facetAllowlist](./search-core.verticalsearchrequest.facetallowlist.md) + +## VerticalSearchRequest.facetAllowlist property + +A subset of facet field IDs that facet options will be retrieved for. + +**Signature:** + +```typescript +facetAllowlist?: string[]; +``` diff --git a/docs/search-core.verticalsearchrequest.md b/docs/search-core.verticalsearchrequest.md index abab378c..5735e555 100644 --- a/docs/search-core.verticalsearchrequest.md +++ b/docs/search-core.verticalsearchrequest.md @@ -54,6 +54,25 @@ Description _(Optional)_ Used to trigger Search [Query Rules](https://hitchhikers.yext.com/tracks/answers-advanced/ans302-query-rules/). + + + +[facetAllowlist?](./search-core.verticalsearchrequest.facetallowlist.md) + + + + + + + +string\[\] + + + + +_(Optional)_ A subset of facet field IDs that facet options will be retrieved for. + + diff --git a/etc/search-core.api.md b/etc/search-core.api.md index c258d540..8da9b400 100644 --- a/etc/search-core.api.md +++ b/etc/search-core.api.md @@ -880,6 +880,7 @@ export interface VerticalResults { // @public export interface VerticalSearchRequest extends SearchRequest { context?: Context; + facetAllowlist?: string[]; facets?: Facet[]; limit?: number; location?: LatLong; diff --git a/src/infra/SearchServiceImpl.ts b/src/infra/SearchServiceImpl.ts index 053cad1f..4734400f 100644 --- a/src/infra/SearchServiceImpl.ts +++ b/src/infra/SearchServiceImpl.ts @@ -69,7 +69,8 @@ interface VerticalSearchQueryParams extends QueryParams { source?: QuerySource | string, locationRadius?: string, queryId?: string, - visitor?: string + visitor?: string, + facetAllowlist?: string } /** @@ -167,6 +168,7 @@ export class SearchServiceImpl implements SearchService { queryId: request.queryId, visitorId: this.config.visitor?.id, visitorIdMethod: this.config.visitor?.idMethod, + facetAllowlist: request.facetAllowlist?.join(','), ...this.config?.additionalQueryParams }; @@ -200,4 +202,4 @@ export class SearchServiceImpl implements SearchService { } return `${latLong.latitude},${latLong.longitude}`; } -} \ No newline at end of file +} diff --git a/src/models/searchservice/request/VerticalSearchRequest.ts b/src/models/searchservice/request/VerticalSearchRequest.ts index b9cdf9ab..616c0636 100644 --- a/src/models/searchservice/request/VerticalSearchRequest.ts +++ b/src/models/searchservice/request/VerticalSearchRequest.ts @@ -48,5 +48,7 @@ export interface VerticalSearchRequest extends SearchRequest { /** The radius (in meters) to filter the vertical search by. */ locationRadius?: number, /** The queryId for the query, if this is a repeat query. */ - queryId?: string -} \ No newline at end of file + queryId?: string, + /** A subset of facet field IDs that facet options will be retrieved for. */ + facetAllowlist?: string[] +} diff --git a/test-site/index.html b/test-site/index.html index 9de8956f..26a82d4c 100644 --- a/test-site/index.html +++ b/test-site/index.html @@ -15,5 +15,6 @@ + diff --git a/test-site/src/js/index.js b/test-site/src/js/index.js index ddc361ca..e890696b 100644 --- a/test-site/src/js/index.js +++ b/test-site/src/js/index.js @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { provideCore } from '@yext/search-core'; -import { verticalRequest, functionVerticalRequest } from './requests/verticalRequest'; +import { verticalRequest, functionVerticalRequest, locationsVerticalRequest } from './requests/verticalRequest'; import universalRequest from './requests/universalRequest'; import questionRequest from './requests/questionRequest'; import { univeralAutocompleteRequest, verticalAutocompleteRequest, filterSearchRequest } from './requests/autocompleteRequests'; @@ -76,6 +76,13 @@ export async function functionVerticalSearch() { updateUI(results, startTime, 'Core Function Vertical Response:'); } +export async function locationsVerticalSearch() { + loadingSpinner(); + const startTime = new Date().getTime(); + const results = await globalCore.verticalSearch(locationsVerticalRequest); + updateUI(results, startTime, 'Locations Vertical Response:'); +} + function loadingSpinner() { element.textContent = 'Loading...'; } diff --git a/test-site/src/js/requests/verticalRequest.js b/test-site/src/js/requests/verticalRequest.js index e5805288..31a64da2 100644 --- a/test-site/src/js/requests/verticalRequest.js +++ b/test-site/src/js/requests/verticalRequest.js @@ -12,7 +12,14 @@ export const verticalRequest = { referrerPageUrl: 'www.google.com/answers/not/ads' }; +export const locationsVerticalRequest = { + verticalKey: 'KM', + query: 'virginia', + retrieveFacets: true, + facetAllowlist: ['address.city', 'services'] +}; + export const functionVerticalRequest = { verticalKey: 'function_vertical', query: 'virginia', -}; \ No newline at end of file +}; diff --git a/test-site/src/ts/index.ts b/test-site/src/ts/index.ts index ad0c4b4f..5895abaa 100644 --- a/test-site/src/ts/index.ts +++ b/test-site/src/ts/index.ts @@ -1,5 +1,9 @@ import { provideCore, SearchConfig, SearchCore, UniversalSearchRequest, UniversalSearchResponse } from '@yext/search-core'; -import { verticalRequest, functionVerticalRequest } from './requests/verticalRequest'; +import { + verticalRequest, + functionVerticalRequest, + locationsVerticalRequest +} from './requests/verticalRequest'; import universalRequest from './requests/universalRequest'; import questionRequest from './requests/questionRequest'; import { univeralAutocompleteRequest, verticalAutocompleteRequest, filterSearchRequest } from './requests/autocompleteRequests'; @@ -51,6 +55,13 @@ export async function functionVerticalSearch(): Promise { updateUI(results, startTime, 'Core Function Vertical Response:'); } +export async function locationsVerticalSearch(): Promise { + loadingSpinner(); + const startTime = new Date().getTime(); + const results = await globalCore.verticalSearch(locationsVerticalRequest); + updateUI(results, startTime, 'Locations Vertical Response:'); +} + export async function submitQuestion(): Promise { loadingSpinner(); const startTime = new Date().getTime(); diff --git a/test-site/src/ts/requests/verticalRequest.ts b/test-site/src/ts/requests/verticalRequest.ts index 355d7565..b32f12ab 100644 --- a/test-site/src/ts/requests/verticalRequest.ts +++ b/test-site/src/ts/requests/verticalRequest.ts @@ -17,7 +17,14 @@ export const verticalRequest: VerticalSearchRequest = { } }; +export const locationsVerticalRequest: VerticalSearchRequest = { + verticalKey: 'KM', + query: 'virginia', + retrieveFacets: true, + facetAllowlist: ['address.city', 'services'] +}; + export const functionVerticalRequest: VerticalSearchRequest = { verticalKey: 'function_vertical', query: 'virginia', -}; \ No newline at end of file +}; From f5815ed6774ca4a07a72e4e7c9177ecd960a1068 Mon Sep 17 00:00:00 2001 From: Maxfield Kouzel Date: Thu, 9 Oct 2025 10:52:03 -0400 Subject: [PATCH 2/3] Bump package version --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index c61c0cd8..0a059c33 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@yext/search-core", - "version": "2.6.3", + "version": "2.6.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@yext/search-core", - "version": "2.6.3", + "version": "2.6.4", "license": "BSD-3-Clause", "dependencies": { "@babel/runtime-corejs3": "^7.12.5", diff --git a/package.json b/package.json index 58ac833a..048016d0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@yext/search-core", - "version": "2.6.3", + "version": "2.6.4", "description": "Typescript Networking Library for the Yext Search API", "main": "./dist/commonjs/src/index.js", "module": "./dist/esm/src/index.js", From a6c1e8b334bac2c91f7bfe36dc3728f9ee0c4ac3 Mon Sep 17 00:00:00 2001 From: Maxfield Kouzel Date: Thu, 9 Oct 2025 10:58:29 -0400 Subject: [PATCH 3/3] Empty commit to force PR update