diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml
index 862cb849..863900a2 100644
--- a/.github/workflows/run-tests.yml
+++ b/.github/workflows/run-tests.yml
@@ -10,3 +10,9 @@ jobs:
uses: yext/slapshot-reusable-workflows/.github/workflows/run_tests.yml@v1
with:
build_script: npm run build-ci
+
+ compilation_check_for_test_site:
+ uses: yext/slapshot-reusable-workflows/.github/workflows/run_tests.yml@v1
+ with:
+ test_script: cd test-site && npm i && npm run build
+ node_matrix: '["16.x"]'
diff --git a/README.md b/README.md
index 566b05af..a2eb0a72 100644
--- a/README.md
+++ b/README.md
@@ -27,7 +27,7 @@ Search Core is a networking library for interacting with the Yext Search API.
## Getting Started
-For a full getting started walk through, view our [official Hitchhiker Guide](https://hitchhikers.yext.com/guides/answers-core-getting-started/).
+For a full getting started walk through, view our [official Hitchhiker Guide](https://hitchhikers.yext.com/guides/search-core-getting-started/).
First, install Search-core via [npm](https://www.npmjs.com/get-npm):
diff --git a/docs/search-core.address.city.md b/docs/search-core.address.city.md
new file mode 100644
index 00000000..4eb847fb
--- /dev/null
+++ b/docs/search-core.address.city.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Address](./search-core.address.md) > [city](./search-core.address.city.md)
+
+## Address.city property
+
+Signature:
+
+```typescript
+city?: string;
+```
diff --git a/docs/search-core.address.countrycode.md b/docs/search-core.address.countrycode.md
new file mode 100644
index 00000000..c396d1f8
--- /dev/null
+++ b/docs/search-core.address.countrycode.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Address](./search-core.address.md) > [countryCode](./search-core.address.countrycode.md)
+
+## Address.countryCode property
+
+Signature:
+
+```typescript
+countryCode: string;
+```
diff --git a/docs/search-core.address.extradescription.md b/docs/search-core.address.extradescription.md
new file mode 100644
index 00000000..39a4f316
--- /dev/null
+++ b/docs/search-core.address.extradescription.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Address](./search-core.address.md) > [extraDescription](./search-core.address.extradescription.md)
+
+## Address.extraDescription property
+
+Signature:
+
+```typescript
+extraDescription?: string;
+```
diff --git a/docs/search-core.address.line1.md b/docs/search-core.address.line1.md
new file mode 100644
index 00000000..c9dda0dc
--- /dev/null
+++ b/docs/search-core.address.line1.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Address](./search-core.address.md) > [line1](./search-core.address.line1.md)
+
+## Address.line1 property
+
+Signature:
+
+```typescript
+line1?: string;
+```
diff --git a/docs/search-core.address.line2.md b/docs/search-core.address.line2.md
new file mode 100644
index 00000000..caf4856b
--- /dev/null
+++ b/docs/search-core.address.line2.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Address](./search-core.address.md) > [line2](./search-core.address.line2.md)
+
+## Address.line2 property
+
+Signature:
+
+```typescript
+line2?: string;
+```
diff --git a/docs/search-core.address.line3.md b/docs/search-core.address.line3.md
new file mode 100644
index 00000000..4380f7d9
--- /dev/null
+++ b/docs/search-core.address.line3.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Address](./search-core.address.md) > [line3](./search-core.address.line3.md)
+
+## Address.line3 property
+
+Signature:
+
+```typescript
+line3?: string;
+```
diff --git a/docs/search-core.address.md b/docs/search-core.address.md
new file mode 100644
index 00000000..ba5617a1
--- /dev/null
+++ b/docs/search-core.address.md
@@ -0,0 +1,28 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Address](./search-core.address.md)
+
+## Address interface
+
+An interface with address fields to use in [BaseFieldValueDirectAnswer.value](./search-core.basefieldvaluedirectanswer.value.md).
+
+Signature:
+
+```typescript
+export interface Address
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [city?](./search-core.address.city.md) | string | (Optional) |
+| [countryCode](./search-core.address.countrycode.md) | string | |
+| [extraDescription?](./search-core.address.extradescription.md) | string | (Optional) |
+| [line1?](./search-core.address.line1.md) | string | (Optional) |
+| [line2?](./search-core.address.line2.md) | string | (Optional) |
+| [line3?](./search-core.address.line3.md) | string | (Optional) |
+| [postalCode?](./search-core.address.postalcode.md) | string | (Optional) |
+| [region?](./search-core.address.region.md) | string | (Optional) |
+| [sublocality?](./search-core.address.sublocality.md) | string | (Optional) |
+
diff --git a/docs/search-core.address.postalcode.md b/docs/search-core.address.postalcode.md
new file mode 100644
index 00000000..6a331902
--- /dev/null
+++ b/docs/search-core.address.postalcode.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Address](./search-core.address.md) > [postalCode](./search-core.address.postalcode.md)
+
+## Address.postalCode property
+
+Signature:
+
+```typescript
+postalCode?: string;
+```
diff --git a/docs/search-core.address.region.md b/docs/search-core.address.region.md
new file mode 100644
index 00000000..934b14c3
--- /dev/null
+++ b/docs/search-core.address.region.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Address](./search-core.address.md) > [region](./search-core.address.region.md)
+
+## Address.region property
+
+Signature:
+
+```typescript
+region?: string;
+```
diff --git a/docs/search-core.address.sublocality.md b/docs/search-core.address.sublocality.md
new file mode 100644
index 00000000..25177c53
--- /dev/null
+++ b/docs/search-core.address.sublocality.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Address](./search-core.address.md) > [sublocality](./search-core.address.sublocality.md)
+
+## Address.sublocality property
+
+Signature:
+
+```typescript
+sublocality?: string;
+```
diff --git a/docs/search-core.addressdirectanswer.fieldtype.md b/docs/search-core.addressdirectanswer.fieldtype.md
new file mode 100644
index 00000000..a398c548
--- /dev/null
+++ b/docs/search-core.addressdirectanswer.fieldtype.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [AddressDirectAnswer](./search-core.addressdirectanswer.md) > [fieldType](./search-core.addressdirectanswer.fieldtype.md)
+
+## AddressDirectAnswer.fieldType property
+
+Signature:
+
+```typescript
+fieldType: EnumOrLiteral;
+```
diff --git a/docs/search-core.addressdirectanswer.md b/docs/search-core.addressdirectanswer.md
new file mode 100644
index 00000000..d0da1257
--- /dev/null
+++ b/docs/search-core.addressdirectanswer.md
@@ -0,0 +1,21 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [AddressDirectAnswer](./search-core.addressdirectanswer.md)
+
+## AddressDirectAnswer interface
+
+A [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md) interface with 'address' field type.
+
+Signature:
+
+```typescript
+export interface AddressDirectAnswer extends BaseFieldValueDirectAnswer
+```
+Extends: [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md)<[Address](./search-core.address.md)>
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [fieldType](./search-core.addressdirectanswer.fieldtype.md) | [EnumOrLiteral](./search-core.enumorliteral.md)<[BuiltInFieldType.Address](./search-core.builtinfieldtype.md)> | |
+
diff --git a/docs/search-core.androidappurldirectanswer.fieldtype.md b/docs/search-core.androidappurldirectanswer.fieldtype.md
new file mode 100644
index 00000000..1477337b
--- /dev/null
+++ b/docs/search-core.androidappurldirectanswer.fieldtype.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [AndroidAppUrlDirectAnswer](./search-core.androidappurldirectanswer.md) > [fieldType](./search-core.androidappurldirectanswer.fieldtype.md)
+
+## AndroidAppUrlDirectAnswer.fieldType property
+
+Signature:
+
+```typescript
+fieldType: EnumOrLiteral;
+```
diff --git a/docs/search-core.androidappurldirectanswer.md b/docs/search-core.androidappurldirectanswer.md
new file mode 100644
index 00000000..eb2b7ef4
--- /dev/null
+++ b/docs/search-core.androidappurldirectanswer.md
@@ -0,0 +1,21 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [AndroidAppUrlDirectAnswer](./search-core.androidappurldirectanswer.md)
+
+## AndroidAppUrlDirectAnswer interface
+
+A direct answer for an android app url field.
+
+Signature:
+
+```typescript
+export interface AndroidAppUrlDirectAnswer extends BaseFieldValueDirectAnswer
+```
+Extends: [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md)<string>
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [fieldType](./search-core.androidappurldirectanswer.fieldtype.md) | [EnumOrLiteral](./search-core.enumorliteral.md)<[BuiltInFieldType.AndroidAppURL](./search-core.builtinfieldtype.md)> | |
+
diff --git a/docs/search-core.answersconfig.md b/docs/search-core.answersconfig.md
deleted file mode 100644
index faf4ecb2..00000000
--- a/docs/search-core.answersconfig.md
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [AnswersConfig](./search-core.answersconfig.md)
-
-## AnswersConfig type
-
-> Warning: This API is now obsolete.
->
-> AnswersConfig is deprecated and has been replaced by [SearchConfig](./search-core.searchconfig.md)
->
-
-Signature:
-
-```typescript
-export declare type AnswersConfig = SearchConfig;
-```
-References: [SearchConfig](./search-core.searchconfig.md)
-
diff --git a/docs/search-core.answersconfigwithapikey.md b/docs/search-core.answersconfigwithapikey.md
deleted file mode 100644
index 7f1c36c8..00000000
--- a/docs/search-core.answersconfigwithapikey.md
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [AnswersConfigWithApiKey](./search-core.answersconfigwithapikey.md)
-
-## AnswersConfigWithApiKey interface
-
-> Warning: This API is now obsolete.
->
-> AnswersConfigWithApiKey is deprecated and has been replaced by [SearchConfigWithApiKey](./search-core.searchconfigwithapikey.md)
->
-
-Signature:
-
-```typescript
-export interface AnswersConfigWithApiKey extends SearchConfigWithApiKey
-```
-Extends: [SearchConfigWithApiKey](./search-core.searchconfigwithapikey.md)
-
diff --git a/docs/search-core.answersconfigwithtoken.md b/docs/search-core.answersconfigwithtoken.md
deleted file mode 100644
index 01755fd6..00000000
--- a/docs/search-core.answersconfigwithtoken.md
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [AnswersConfigWithToken](./search-core.answersconfigwithtoken.md)
-
-## AnswersConfigWithToken interface
-
-> Warning: This API is now obsolete.
->
-> AnswersConfigWithToken is deprecated and has been replaced by [SearchConfigWithToken](./search-core.searchconfigwithtoken.md)
->
-
-Signature:
-
-```typescript
-export interface AnswersConfigWithToken extends SearchConfigWithToken
-```
-Extends: [SearchConfigWithToken](./search-core.searchconfigwithtoken.md)
-
diff --git a/docs/search-core.answerscore.md b/docs/search-core.answerscore.md
deleted file mode 100644
index bcffe85f..00000000
--- a/docs/search-core.answerscore.md
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [AnswersCore](./search-core.answerscore.md)
-
-## AnswersCore class
-
-> Warning: This API is now obsolete.
->
-> AnswersCore is deprecated and has been replaced by [SearchCore](./search-core.searchcore.md)
->
-
-Signature:
-
-```typescript
-export declare class AnswersCore extends SearchCore
-```
-Extends: [SearchCore](./search-core.searchcore.md)
-
diff --git a/docs/search-core.answerserror.md b/docs/search-core.answerserror.md
deleted file mode 100644
index 4bacf89e..00000000
--- a/docs/search-core.answerserror.md
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [AnswersError](./search-core.answerserror.md)
-
-## AnswersError interface
-
-> Warning: This API is now obsolete.
->
-> AnswersError is deprecated and has been replaced by [SearchError](./search-core.searcherror.md)
->
-
-Signature:
-
-```typescript
-export interface AnswersError extends SearchError
-```
-Extends: [SearchError](./search-core.searcherror.md)
-
diff --git a/docs/search-core.answersrequest.md b/docs/search-core.answersrequest.md
deleted file mode 100644
index 3733c784..00000000
--- a/docs/search-core.answersrequest.md
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [AnswersRequest](./search-core.answersrequest.md)
-
-## AnswersRequest interface
-
-> Warning: This API is now obsolete.
->
-> AnswersRequest is deprecated and has been replaced by [SearchRequest](./search-core.searchrequest.md)
->
-
-Signature:
-
-```typescript
-export interface AnswersRequest extends SearchRequest
-```
-Extends: [SearchRequest](./search-core.searchrequest.md)
-
diff --git a/docs/search-core.appliedqueryfilter.filter.md b/docs/search-core.appliedqueryfilter.filter.md
index 8ef7046b..7847162b 100644
--- a/docs/search-core.appliedqueryfilter.filter.md
+++ b/docs/search-core.appliedqueryfilter.filter.md
@@ -9,5 +9,5 @@ The filter applied to the query results.
Signature:
```typescript
-filter: Filter;
+filter: FieldValueFilter;
```
diff --git a/docs/search-core.appliedqueryfilter.md b/docs/search-core.appliedqueryfilter.md
index 28cdac0c..277d5a2e 100644
--- a/docs/search-core.appliedqueryfilter.md
+++ b/docs/search-core.appliedqueryfilter.md
@@ -19,6 +19,6 @@ export interface AppliedQueryFilter
| [details?](./search-core.appliedqueryfilter.details.md) | [LocationFilterDetails](./search-core.locationfilterdetails.md) | (Optional) Additional details relevant to the filter with "PLACE" for its [AppliedQueryFilterType](./search-core.appliedqueryfiltertype.md). |
| [displayKey](./search-core.appliedqueryfilter.displaykey.md) | string | The display name of the filter key. |
| [displayValue](./search-core.appliedqueryfilter.displayvalue.md) | string | The value used in the filter. |
-| [filter](./search-core.appliedqueryfilter.filter.md) | [Filter](./search-core.filter.md) | The filter applied to the query results. |
+| [filter](./search-core.appliedqueryfilter.filter.md) | [FieldValueFilter](./search-core.fieldvaluefilter.md) | The filter applied to the query results. |
| [type](./search-core.appliedqueryfilter.type.md) | [AppliedQueryFilterType](./search-core.appliedqueryfiltertype.md) | Represents the type of [AppliedQueryFilter](./search-core.appliedqueryfilter.md) applied to a search. |
diff --git a/docs/search-core.autocompleteresult.filter.md b/docs/search-core.autocompleteresult.filter.md
index 718d2b1f..d125e7cc 100644
--- a/docs/search-core.autocompleteresult.filter.md
+++ b/docs/search-core.autocompleteresult.filter.md
@@ -9,7 +9,7 @@ A filter applied to the autocomplete response.
Signature:
```typescript
-filter?: Filter;
+filter?: FieldValueFilter;
```
## Remarks
diff --git a/docs/search-core.autocompleteresult.md b/docs/search-core.autocompleteresult.md
index 94ca63cb..a84dcaa8 100644
--- a/docs/search-core.autocompleteresult.md
+++ b/docs/search-core.autocompleteresult.md
@@ -16,7 +16,7 @@ export interface AutocompleteResult
| Property | Type | Description |
| --- | --- | --- |
-| [filter?](./search-core.autocompleteresult.filter.md) | [Filter](./search-core.filter.md) | (Optional) A filter applied to the autocomplete response. |
+| [filter?](./search-core.autocompleteresult.filter.md) | [FieldValueFilter](./search-core.fieldvaluefilter.md) | (Optional) A filter applied to the autocomplete response. |
| [key?](./search-core.autocompleteresult.key.md) | string | (Optional) The fieldId which corresponds to the AutocompleteResult value. |
| [matchedSubstrings?](./search-core.autocompleteresult.matchedsubstrings.md) | { length: number; offset: number; }\[\] | (Optional) An array of substrings which overlap with the autocomplete input. |
| [relatedItem?](./search-core.autocompleteresult.relateditem.md) | [Result](./search-core.result.md) | (Optional) An entity that corresponds to the autocomplete result. |
diff --git a/docs/search-core.baseanswersconfig.md b/docs/search-core.baseanswersconfig.md
deleted file mode 100644
index c40e97d8..00000000
--- a/docs/search-core.baseanswersconfig.md
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [BaseAnswersConfig](./search-core.baseanswersconfig.md)
-
-## BaseAnswersConfig interface
-
-> Warning: This API is now obsolete.
->
-> BaseAnswersConfig is deprecated and has been replaced by [BaseSearchConfig](./search-core.basesearchconfig.md)
->
-
-Signature:
-
-```typescript
-export interface BaseAnswersConfig extends BaseSearchConfig
-```
-Extends: [BaseSearchConfig](./search-core.basesearchconfig.md)
-
diff --git a/docs/search-core.basefeaturedsnippetdirectanswer.fieldtype.md b/docs/search-core.basefeaturedsnippetdirectanswer.fieldtype.md
new file mode 100644
index 00000000..c3599a4c
--- /dev/null
+++ b/docs/search-core.basefeaturedsnippetdirectanswer.fieldtype.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [BaseFeaturedSnippetDirectAnswer](./search-core.basefeaturedsnippetdirectanswer.md) > [fieldType](./search-core.basefeaturedsnippetdirectanswer.fieldtype.md)
+
+## BaseFeaturedSnippetDirectAnswer.fieldType property
+
+The field type of the direct answer.
+
+Signature:
+
+```typescript
+fieldType: EnumOrLiteral;
+```
diff --git a/docs/search-core.basefeaturedsnippetdirectanswer.md b/docs/search-core.basefeaturedsnippetdirectanswer.md
new file mode 100644
index 00000000..a9e8fa56
--- /dev/null
+++ b/docs/search-core.basefeaturedsnippetdirectanswer.md
@@ -0,0 +1,23 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [BaseFeaturedSnippetDirectAnswer](./search-core.basefeaturedsnippetdirectanswer.md)
+
+## BaseFeaturedSnippetDirectAnswer interface
+
+A direct answer which was found within a document.
+
+Signature:
+
+```typescript
+export interface BaseFeaturedSnippetDirectAnswer extends DirectAnswer
+```
+Extends: [DirectAnswer](./search-core.directanswer.md)<T>
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [fieldType](./search-core.basefeaturedsnippetdirectanswer.fieldtype.md) | [EnumOrLiteral](./search-core.enumorliteral.md)<[BuiltInFieldType.MultiLineText](./search-core.builtinfieldtype.md) \| [BuiltInFieldType.RichText](./search-core.builtinfieldtype.md)> | The field type of the direct answer. |
+| [snippet](./search-core.basefeaturedsnippetdirectanswer.snippet.md) | [Snippet](./search-core.snippet.md) | The snippet where the direct answer was found. |
+| [type](./search-core.basefeaturedsnippetdirectanswer.type.md) | [DirectAnswerType.FeaturedSnippet](./search-core.directanswertype.md) | Indicates that the DirectAnswer is a [FeaturedSnippetDirectAnswer](./search-core.featuredsnippetdirectanswer.md). |
+
diff --git a/docs/search-core.featuredsnippetdirectanswer.snippet.md b/docs/search-core.basefeaturedsnippetdirectanswer.snippet.md
similarity index 52%
rename from docs/search-core.featuredsnippetdirectanswer.snippet.md
rename to docs/search-core.basefeaturedsnippetdirectanswer.snippet.md
index b85ac80f..459f16c4 100644
--- a/docs/search-core.featuredsnippetdirectanswer.snippet.md
+++ b/docs/search-core.basefeaturedsnippetdirectanswer.snippet.md
@@ -1,8 +1,8 @@
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [FeaturedSnippetDirectAnswer](./search-core.featuredsnippetdirectanswer.md) > [snippet](./search-core.featuredsnippetdirectanswer.snippet.md)
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [BaseFeaturedSnippetDirectAnswer](./search-core.basefeaturedsnippetdirectanswer.md) > [snippet](./search-core.basefeaturedsnippetdirectanswer.snippet.md)
-## FeaturedSnippetDirectAnswer.snippet property
+## BaseFeaturedSnippetDirectAnswer.snippet property
The snippet where the direct answer was found.
diff --git a/docs/search-core.basefeaturedsnippetdirectanswer.type.md b/docs/search-core.basefeaturedsnippetdirectanswer.type.md
new file mode 100644
index 00000000..973b5e0d
--- /dev/null
+++ b/docs/search-core.basefeaturedsnippetdirectanswer.type.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [BaseFeaturedSnippetDirectAnswer](./search-core.basefeaturedsnippetdirectanswer.md) > [type](./search-core.basefeaturedsnippetdirectanswer.type.md)
+
+## BaseFeaturedSnippetDirectAnswer.type property
+
+Indicates that the DirectAnswer is a [FeaturedSnippetDirectAnswer](./search-core.featuredsnippetdirectanswer.md).
+
+Signature:
+
+```typescript
+type: DirectAnswerType.FeaturedSnippet;
+```
diff --git a/docs/search-core.fieldvaluedirectanswer.entityname.md b/docs/search-core.basefieldvaluedirectanswer.entityname.md
similarity index 54%
rename from docs/search-core.fieldvaluedirectanswer.entityname.md
rename to docs/search-core.basefieldvaluedirectanswer.entityname.md
index 7cd22617..940dbe03 100644
--- a/docs/search-core.fieldvaluedirectanswer.entityname.md
+++ b/docs/search-core.basefieldvaluedirectanswer.entityname.md
@@ -1,8 +1,8 @@
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [FieldValueDirectAnswer](./search-core.fieldvaluedirectanswer.md) > [entityName](./search-core.fieldvaluedirectanswer.entityname.md)
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md) > [entityName](./search-core.basefieldvaluedirectanswer.entityname.md)
-## FieldValueDirectAnswer.entityName property
+## BaseFieldValueDirectAnswer.entityName property
The name of the entity that direct answer came from.
diff --git a/docs/search-core.fieldvaluedirectanswer.fieldapiname.md b/docs/search-core.basefieldvaluedirectanswer.fieldapiname.md
similarity index 53%
rename from docs/search-core.fieldvaluedirectanswer.fieldapiname.md
rename to docs/search-core.basefieldvaluedirectanswer.fieldapiname.md
index f6827355..572606ec 100644
--- a/docs/search-core.fieldvaluedirectanswer.fieldapiname.md
+++ b/docs/search-core.basefieldvaluedirectanswer.fieldapiname.md
@@ -1,8 +1,8 @@
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [FieldValueDirectAnswer](./search-core.fieldvaluedirectanswer.md) > [fieldApiName](./search-core.fieldvaluedirectanswer.fieldapiname.md)
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md) > [fieldApiName](./search-core.basefieldvaluedirectanswer.fieldapiname.md)
-## FieldValueDirectAnswer.fieldApiName property
+## BaseFieldValueDirectAnswer.fieldApiName property
The field api name of the direct answer.
diff --git a/docs/search-core.fieldvaluedirectanswer.fieldname.md b/docs/search-core.basefieldvaluedirectanswer.fieldname.md
similarity index 53%
rename from docs/search-core.fieldvaluedirectanswer.fieldname.md
rename to docs/search-core.basefieldvaluedirectanswer.fieldname.md
index fd8b6cff..c796d903 100644
--- a/docs/search-core.fieldvaluedirectanswer.fieldname.md
+++ b/docs/search-core.basefieldvaluedirectanswer.fieldname.md
@@ -1,8 +1,8 @@
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [FieldValueDirectAnswer](./search-core.fieldvaluedirectanswer.md) > [fieldName](./search-core.fieldvaluedirectanswer.fieldname.md)
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md) > [fieldName](./search-core.basefieldvaluedirectanswer.fieldname.md)
-## FieldValueDirectAnswer.fieldName property
+## BaseFieldValueDirectAnswer.fieldName property
The field name of the direct answer.
diff --git a/docs/search-core.basefieldvaluedirectanswer.md b/docs/search-core.basefieldvaluedirectanswer.md
new file mode 100644
index 00000000..9a5f2bc7
--- /dev/null
+++ b/docs/search-core.basefieldvaluedirectanswer.md
@@ -0,0 +1,25 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md)
+
+## BaseFieldValueDirectAnswer interface
+
+A direct answer where the answer came from a field from the knowledge graph.
+
+Signature:
+
+```typescript
+export interface BaseFieldValueDirectAnswer extends DirectAnswer
+```
+Extends: [DirectAnswer](./search-core.directanswer.md)<T>
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [entityName](./search-core.basefieldvaluedirectanswer.entityname.md) | string | The name of the entity that direct answer came from. |
+| [fieldApiName](./search-core.basefieldvaluedirectanswer.fieldapiname.md) | string | The field api name of the direct answer. |
+| [fieldName](./search-core.basefieldvaluedirectanswer.fieldname.md) | string | The field name of the direct answer. |
+| [type](./search-core.basefieldvaluedirectanswer.type.md) | [DirectAnswerType.FieldValue](./search-core.directanswertype.md) | Indicates that the DirectAnswer is a [FieldValueDirectAnswer](./search-core.fieldvaluedirectanswer.md). |
+| [value](./search-core.basefieldvaluedirectanswer.value.md) | T | The result of the direct answer. |
+
diff --git a/docs/search-core.basefieldvaluedirectanswer.type.md b/docs/search-core.basefieldvaluedirectanswer.type.md
new file mode 100644
index 00000000..e5083a6c
--- /dev/null
+++ b/docs/search-core.basefieldvaluedirectanswer.type.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md) > [type](./search-core.basefieldvaluedirectanswer.type.md)
+
+## BaseFieldValueDirectAnswer.type property
+
+Indicates that the DirectAnswer is a [FieldValueDirectAnswer](./search-core.fieldvaluedirectanswer.md).
+
+Signature:
+
+```typescript
+type: DirectAnswerType.FieldValue;
+```
diff --git a/docs/search-core.basefieldvaluedirectanswer.value.md b/docs/search-core.basefieldvaluedirectanswer.value.md
new file mode 100644
index 00000000..bd68420e
--- /dev/null
+++ b/docs/search-core.basefieldvaluedirectanswer.value.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md) > [value](./search-core.basefieldvaluedirectanswer.value.md)
+
+## BaseFieldValueDirectAnswer.value property
+
+The result of the direct answer.
+
+Signature:
+
+```typescript
+value: T;
+```
diff --git a/docs/search-core.basesearchconfig.additionalqueryparams.md b/docs/search-core.basesearchconfig.additionalqueryparams.md
new file mode 100644
index 00000000..b3891309
--- /dev/null
+++ b/docs/search-core.basesearchconfig.additionalqueryparams.md
@@ -0,0 +1,15 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [BaseSearchConfig](./search-core.basesearchconfig.md) > [additionalQueryParams](./search-core.basesearchconfig.additionalqueryparams.md)
+
+## BaseSearchConfig.additionalQueryParams property
+
+Additional query params added on to every request.
+
+Signature:
+
+```typescript
+additionalQueryParams?: {
+ [key: string]: string | number | boolean;
+ };
+```
diff --git a/docs/search-core.basesearchconfig.md b/docs/search-core.basesearchconfig.md
index 8f9407ef..e3e2d413 100644
--- a/docs/search-core.basesearchconfig.md
+++ b/docs/search-core.basesearchconfig.md
@@ -16,6 +16,7 @@ export interface BaseSearchConfig
| Property | Type | Description |
| --- | --- | --- |
+| [additionalQueryParams?](./search-core.basesearchconfig.additionalqueryparams.md) | { \[key: string\]: string \| number \| boolean; } | (Optional) Additional query params added on to every request. |
| [endpoints?](./search-core.basesearchconfig.endpoints.md) | [Endpoints](./search-core.endpoints.md) | (Optional) Overrides for the URLs which are used when making requests to the Search API. |
| [experienceKey](./search-core.basesearchconfig.experiencekey.md) | string | The experience key of the search experience. |
| [experienceVersion?](./search-core.basesearchconfig.experienceversion.md) | 'STAGING' \| 'PRODUCTION' \| string \| number | (Optional) The version of the search experience configuration. |
diff --git a/docs/search-core.builtinfieldtype.md b/docs/search-core.builtinfieldtype.md
new file mode 100644
index 00000000..8c7d0d70
--- /dev/null
+++ b/docs/search-core.builtinfieldtype.md
@@ -0,0 +1,35 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [BuiltInFieldType](./search-core.builtinfieldtype.md)
+
+## BuiltInFieldType enum
+
+Possible built-in field types for [DirectAnswer.fieldType](./search-core.directanswer.fieldtype.md).
+
+Signature:
+
+```typescript
+export declare enum BuiltInFieldType
+```
+
+## Enumeration Members
+
+| Member | Value | Description |
+| --- | --- | --- |
+| Address | "address"
| |
+| AndroidAppURL | "android_app_url"
| |
+| ComplexURL | "complex_url"
| |
+| Decimal | "decimal"
| |
+| Email | "email"
| |
+| FacebookURL | "facebook_url"
| |
+| Hours | "hours"
| |
+| InstagramHandle | "instagram_handle"
| |
+| Integer | "integer"
| |
+| IOSAppURL | "ios_app_url"
| |
+| MultiLineText | "multi_line_text"
| |
+| Phone | "phone"
| |
+| RichText | "rich_text"
| |
+| SingleLineText | "single_line_text"
| |
+| TwitterHandle | "twitter_handle"
| |
+| URL | "url"
| |
+
diff --git a/docs/search-core.combinedfilter.combinator.md b/docs/search-core.combinedfilter.combinator.md
deleted file mode 100644
index ff0853f5..00000000
--- a/docs/search-core.combinedfilter.combinator.md
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [CombinedFilter](./search-core.combinedfilter.md) > [combinator](./search-core.combinedfilter.combinator.md)
-
-## CombinedFilter.combinator property
-
-The logical operator used to combine the filters.
-
-Signature:
-
-```typescript
-combinator: FilterCombinator;
-```
diff --git a/docs/search-core.combinedfilter.filters.md b/docs/search-core.combinedfilter.filters.md
deleted file mode 100644
index 73d97aad..00000000
--- a/docs/search-core.combinedfilter.filters.md
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [CombinedFilter](./search-core.combinedfilter.md) > [filters](./search-core.combinedfilter.filters.md)
-
-## CombinedFilter.filters property
-
-An array of filters applied to the search.
-
-Signature:
-
-```typescript
-filters: (Filter | CombinedFilter)[];
-```
diff --git a/docs/search-core.combinedfilter.md b/docs/search-core.combinedfilter.md
deleted file mode 100644
index db5da7cc..00000000
--- a/docs/search-core.combinedfilter.md
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [CombinedFilter](./search-core.combinedfilter.md)
-
-## CombinedFilter interface
-
-Represents multiple filters that will be combined to refine results.
-
-Signature:
-
-```typescript
-export interface CombinedFilter
-```
-
-## Properties
-
-| Property | Type | Description |
-| --- | --- | --- |
-| [combinator](./search-core.combinedfilter.combinator.md) | [FilterCombinator](./search-core.filtercombinator.md) | The logical operator used to combine the filters. |
-| [filters](./search-core.combinedfilter.filters.md) | ([Filter](./search-core.filter.md) \| [CombinedFilter](./search-core.combinedfilter.md))\[\] | An array of filters applied to the search. |
-
diff --git a/docs/search-core.complexurl.displayurl.md b/docs/search-core.complexurl.displayurl.md
new file mode 100644
index 00000000..1402fe61
--- /dev/null
+++ b/docs/search-core.complexurl.displayurl.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [ComplexURL](./search-core.complexurl.md) > [displayUrl](./search-core.complexurl.displayurl.md)
+
+## ComplexURL.displayUrl property
+
+Signature:
+
+```typescript
+displayUrl?: string;
+```
diff --git a/docs/search-core.complexurl.md b/docs/search-core.complexurl.md
new file mode 100644
index 00000000..1be69994
--- /dev/null
+++ b/docs/search-core.complexurl.md
@@ -0,0 +1,22 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [ComplexURL](./search-core.complexurl.md)
+
+## ComplexURL interface
+
+The shape of a [BuiltInFieldType.ComplexURL](./search-core.builtinfieldtype.md) DirectAnswer value
+
+Signature:
+
+```typescript
+export interface ComplexURL
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [displayUrl?](./search-core.complexurl.displayurl.md) | string | (Optional) |
+| [preferDisplayUrl](./search-core.complexurl.preferdisplayurl.md) | boolean | |
+| [url](./search-core.complexurl.url.md) | string | |
+
diff --git a/docs/search-core.complexurl.preferdisplayurl.md b/docs/search-core.complexurl.preferdisplayurl.md
new file mode 100644
index 00000000..e03669eb
--- /dev/null
+++ b/docs/search-core.complexurl.preferdisplayurl.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [ComplexURL](./search-core.complexurl.md) > [preferDisplayUrl](./search-core.complexurl.preferdisplayurl.md)
+
+## ComplexURL.preferDisplayUrl property
+
+Signature:
+
+```typescript
+preferDisplayUrl: boolean;
+```
diff --git a/docs/search-core.complexurl.url.md b/docs/search-core.complexurl.url.md
new file mode 100644
index 00000000..7dd97ddc
--- /dev/null
+++ b/docs/search-core.complexurl.url.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [ComplexURL](./search-core.complexurl.md) > [url](./search-core.complexurl.url.md)
+
+## ComplexURL.url property
+
+Signature:
+
+```typescript
+url: string;
+```
diff --git a/docs/search-core.complexurldirectanswer.fieldtype.md b/docs/search-core.complexurldirectanswer.fieldtype.md
new file mode 100644
index 00000000..ce9931fd
--- /dev/null
+++ b/docs/search-core.complexurldirectanswer.fieldtype.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [ComplexUrlDirectAnswer](./search-core.complexurldirectanswer.md) > [fieldType](./search-core.complexurldirectanswer.fieldtype.md)
+
+## ComplexUrlDirectAnswer.fieldType property
+
+Signature:
+
+```typescript
+fieldType: EnumOrLiteral;
+```
diff --git a/docs/search-core.complexurldirectanswer.md b/docs/search-core.complexurldirectanswer.md
new file mode 100644
index 00000000..7da685c3
--- /dev/null
+++ b/docs/search-core.complexurldirectanswer.md
@@ -0,0 +1,21 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [ComplexUrlDirectAnswer](./search-core.complexurldirectanswer.md)
+
+## ComplexUrlDirectAnswer interface
+
+A direct answer for a complex url field.
+
+Signature:
+
+```typescript
+export interface ComplexUrlDirectAnswer extends BaseFieldValueDirectAnswer
+```
+Extends: [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md)<[ComplexURL](./search-core.complexurl.md)>
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [fieldType](./search-core.complexurldirectanswer.fieldtype.md) | [EnumOrLiteral](./search-core.enumorliteral.md)<[BuiltInFieldType.ComplexURL](./search-core.builtinfieldtype.md)> | |
+
diff --git a/docs/search-core.conjunctionstaticfilter.combinator.md b/docs/search-core.conjunctionstaticfilter.combinator.md
new file mode 100644
index 00000000..9ef17207
--- /dev/null
+++ b/docs/search-core.conjunctionstaticfilter.combinator.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [ConjunctionStaticFilter](./search-core.conjunctionstaticfilter.md) > [combinator](./search-core.conjunctionstaticfilter.combinator.md)
+
+## ConjunctionStaticFilter.combinator property
+
+Indicates that filters should be combined with a logical AND.
+
+Signature:
+
+```typescript
+combinator: FilterCombinator.AND;
+```
diff --git a/docs/search-core.conjunctionstaticfilter.filters.md b/docs/search-core.conjunctionstaticfilter.filters.md
new file mode 100644
index 00000000..2f615049
--- /dev/null
+++ b/docs/search-core.conjunctionstaticfilter.filters.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [ConjunctionStaticFilter](./search-core.conjunctionstaticfilter.md) > [filters](./search-core.conjunctionstaticfilter.filters.md)
+
+## ConjunctionStaticFilter.filters property
+
+The filters to combine together.
+
+Signature:
+
+```typescript
+filters: StaticFilter[];
+```
diff --git a/docs/search-core.conjunctionstaticfilter.kind.md b/docs/search-core.conjunctionstaticfilter.kind.md
new file mode 100644
index 00000000..181ffb98
--- /dev/null
+++ b/docs/search-core.conjunctionstaticfilter.kind.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [ConjunctionStaticFilter](./search-core.conjunctionstaticfilter.md) > [kind](./search-core.conjunctionstaticfilter.kind.md)
+
+## ConjunctionStaticFilter.kind property
+
+The kind of static filter.
+
+Signature:
+
+```typescript
+kind: 'conjunction';
+```
diff --git a/docs/search-core.conjunctionstaticfilter.md b/docs/search-core.conjunctionstaticfilter.md
new file mode 100644
index 00000000..618daaa3
--- /dev/null
+++ b/docs/search-core.conjunctionstaticfilter.md
@@ -0,0 +1,22 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [ConjunctionStaticFilter](./search-core.conjunctionstaticfilter.md)
+
+## ConjunctionStaticFilter interface
+
+A static filter composed by combining other static filters with the logical AND operator.
+
+Signature:
+
+```typescript
+export interface ConjunctionStaticFilter
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [combinator](./search-core.conjunctionstaticfilter.combinator.md) | [FilterCombinator.AND](./search-core.filtercombinator.md) | Indicates that filters should be combined with a logical AND. |
+| [filters](./search-core.conjunctionstaticfilter.filters.md) | [StaticFilter](./search-core.staticfilter.md)\[\] | The filters to combine together. |
+| [kind](./search-core.conjunctionstaticfilter.kind.md) | 'conjunction' | The kind of static filter. |
+
diff --git a/docs/search-core.dayhour.isclosed.md b/docs/search-core.dayhour.isclosed.md
new file mode 100644
index 00000000..18f41a97
--- /dev/null
+++ b/docs/search-core.dayhour.isclosed.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [DayHour](./search-core.dayhour.md) > [isClosed](./search-core.dayhour.isclosed.md)
+
+## DayHour.isClosed property
+
+Signature:
+
+```typescript
+isClosed?: boolean;
+```
diff --git a/docs/search-core.dayhour.md b/docs/search-core.dayhour.md
new file mode 100644
index 00000000..0b7ce429
--- /dev/null
+++ b/docs/search-core.dayhour.md
@@ -0,0 +1,21 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [DayHour](./search-core.dayhour.md)
+
+## DayHour interface
+
+An interface for a day's hours to use in [BaseFieldValueDirectAnswer.value](./search-core.basefieldvaluedirectanswer.value.md).
+
+Signature:
+
+```typescript
+export interface DayHour
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [isClosed?](./search-core.dayhour.isclosed.md) | boolean | (Optional) |
+| [openIntervals?](./search-core.dayhour.openintervals.md) | [Interval](./search-core.interval.md)\[\] | (Optional) |
+
diff --git a/docs/search-core.dayhour.openintervals.md b/docs/search-core.dayhour.openintervals.md
new file mode 100644
index 00000000..29827320
--- /dev/null
+++ b/docs/search-core.dayhour.openintervals.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [DayHour](./search-core.dayhour.md) > [openIntervals](./search-core.dayhour.openintervals.md)
+
+## DayHour.openIntervals property
+
+Signature:
+
+```typescript
+openIntervals?: Interval[];
+```
diff --git a/docs/search-core.decimaldirectanswer.fieldtype.md b/docs/search-core.decimaldirectanswer.fieldtype.md
new file mode 100644
index 00000000..dd1583fb
--- /dev/null
+++ b/docs/search-core.decimaldirectanswer.fieldtype.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [DecimalDirectAnswer](./search-core.decimaldirectanswer.md) > [fieldType](./search-core.decimaldirectanswer.fieldtype.md)
+
+## DecimalDirectAnswer.fieldType property
+
+Signature:
+
+```typescript
+fieldType: EnumOrLiteral;
+```
diff --git a/docs/search-core.decimaldirectanswer.md b/docs/search-core.decimaldirectanswer.md
new file mode 100644
index 00000000..dd91c212
--- /dev/null
+++ b/docs/search-core.decimaldirectanswer.md
@@ -0,0 +1,21 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [DecimalDirectAnswer](./search-core.decimaldirectanswer.md)
+
+## DecimalDirectAnswer interface
+
+A direct answer for a decimal field, which is a number represented using a string.
+
+Signature:
+
+```typescript
+export interface DecimalDirectAnswer extends BaseFieldValueDirectAnswer
+```
+Extends: [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md)<string \| string\[\]>
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [fieldType](./search-core.decimaldirectanswer.fieldtype.md) | [EnumOrLiteral](./search-core.enumorliteral.md)<[BuiltInFieldType.Decimal](./search-core.builtinfieldtype.md)> | |
+
diff --git a/docs/search-core.directanswer.fieldtype.md b/docs/search-core.directanswer.fieldtype.md
index 09571f86..03a13438 100644
--- a/docs/search-core.directanswer.fieldtype.md
+++ b/docs/search-core.directanswer.fieldtype.md
@@ -9,5 +9,5 @@ The field type of the direct answer.
Signature:
```typescript
-fieldType: string;
+fieldType: EnumOrLiteral | 'unknown';
```
diff --git a/docs/search-core.directanswer.md b/docs/search-core.directanswer.md
index 18f1eb25..f6fd8b6f 100644
--- a/docs/search-core.directanswer.md
+++ b/docs/search-core.directanswer.md
@@ -9,16 +9,16 @@ A direct answer to a search.
Signature:
```typescript
-export interface DirectAnswer
+export interface DirectAnswer
```
## Properties
| Property | Type | Description |
| --- | --- | --- |
-| [fieldType](./search-core.directanswer.fieldtype.md) | string | The field type of the direct answer. |
+| [fieldType](./search-core.directanswer.fieldtype.md) | [EnumOrLiteral](./search-core.enumorliteral.md)<[BuiltInFieldType](./search-core.builtinfieldtype.md)> \| 'unknown' | The field type of the direct answer. |
| [relatedResult](./search-core.directanswer.relatedresult.md) | [Result](./search-core.result.md) | The entity associated with the direct answer. |
| [type](./search-core.directanswer.type.md) | [DirectAnswerType](./search-core.directanswertype.md) | The [DirectAnswerType](./search-core.directanswertype.md). |
-| [value?](./search-core.directanswer.value.md) | string | (Optional) The result of the direct answer. |
+| [value?](./search-core.directanswer.value.md) | T | (Optional) The value of the direct answer. |
| [verticalKey](./search-core.directanswer.verticalkey.md) | string | The vertical key of the direct answer. |
diff --git a/docs/search-core.directanswer.value.md b/docs/search-core.directanswer.value.md
index 1076e975..77aa935a 100644
--- a/docs/search-core.directanswer.value.md
+++ b/docs/search-core.directanswer.value.md
@@ -4,15 +4,15 @@
## DirectAnswer.value property
-The result of the direct answer.
+The value of the direct answer.
Signature:
```typescript
-value?: string;
+value?: T;
```
## Remarks
-A value will not be present if the [DirectAnswer.fieldType](./search-core.directanswer.fieldtype.md) is 'rich\_text'.
+A value will not be present if the [DirectAnswer.type](./search-core.directanswer.type.md) is 'FEATURED\_SNIPPET' and [DirectAnswer.fieldType](./search-core.directanswer.fieldtype.md) is 'rich\_text'.
diff --git a/docs/search-core.disjunctionstaticfilter.combinator.md b/docs/search-core.disjunctionstaticfilter.combinator.md
new file mode 100644
index 00000000..f25f03c8
--- /dev/null
+++ b/docs/search-core.disjunctionstaticfilter.combinator.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [DisjunctionStaticFilter](./search-core.disjunctionstaticfilter.md) > [combinator](./search-core.disjunctionstaticfilter.combinator.md)
+
+## DisjunctionStaticFilter.combinator property
+
+Indicates that filters should be combined with a logical OR.
+
+Signature:
+
+```typescript
+combinator: FilterCombinator.OR;
+```
diff --git a/docs/search-core.disjunctionstaticfilter.filters.md b/docs/search-core.disjunctionstaticfilter.filters.md
new file mode 100644
index 00000000..8819489f
--- /dev/null
+++ b/docs/search-core.disjunctionstaticfilter.filters.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [DisjunctionStaticFilter](./search-core.disjunctionstaticfilter.md) > [filters](./search-core.disjunctionstaticfilter.filters.md)
+
+## DisjunctionStaticFilter.filters property
+
+The filters to combine together.
+
+Signature:
+
+```typescript
+filters: (DisjunctionStaticFilter | FieldValueStaticFilter)[];
+```
diff --git a/docs/search-core.disjunctionstaticfilter.kind.md b/docs/search-core.disjunctionstaticfilter.kind.md
new file mode 100644
index 00000000..b39dfe85
--- /dev/null
+++ b/docs/search-core.disjunctionstaticfilter.kind.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [DisjunctionStaticFilter](./search-core.disjunctionstaticfilter.md) > [kind](./search-core.disjunctionstaticfilter.kind.md)
+
+## DisjunctionStaticFilter.kind property
+
+The kind of static filter.
+
+Signature:
+
+```typescript
+kind: 'disjunction';
+```
diff --git a/docs/search-core.disjunctionstaticfilter.md b/docs/search-core.disjunctionstaticfilter.md
new file mode 100644
index 00000000..0e3451bc
--- /dev/null
+++ b/docs/search-core.disjunctionstaticfilter.md
@@ -0,0 +1,22 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [DisjunctionStaticFilter](./search-core.disjunctionstaticfilter.md)
+
+## DisjunctionStaticFilter interface
+
+A static filter composed by combining filters with the logical OR operator. The combined filters can either be field value filters or other disjunction filters.
+
+Signature:
+
+```typescript
+export interface DisjunctionStaticFilter
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [combinator](./search-core.disjunctionstaticfilter.combinator.md) | [FilterCombinator.OR](./search-core.filtercombinator.md) | Indicates that filters should be combined with a logical OR. |
+| [filters](./search-core.disjunctionstaticfilter.filters.md) | ([DisjunctionStaticFilter](./search-core.disjunctionstaticfilter.md) \| [FieldValueStaticFilter](./search-core.fieldvaluestaticfilter.md))\[\] | The filters to combine together. |
+| [kind](./search-core.disjunctionstaticfilter.kind.md) | 'disjunction' | The kind of static filter. |
+
diff --git a/docs/search-core.displayablefacet.fieldid.md b/docs/search-core.displayablefacet.fieldid.md
deleted file mode 100644
index 000f13a9..00000000
--- a/docs/search-core.displayablefacet.fieldid.md
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [DisplayableFacet](./search-core.displayablefacet.md) > [fieldId](./search-core.displayablefacet.fieldid.md)
-
-## DisplayableFacet.fieldId property
-
-The associated fieldId.
-
-Signature:
-
-```typescript
-fieldId: string;
-```
diff --git a/docs/search-core.displayablefacet.md b/docs/search-core.displayablefacet.md
index d093ab92..783eaf78 100644
--- a/docs/search-core.displayablefacet.md
+++ b/docs/search-core.displayablefacet.md
@@ -18,6 +18,5 @@ export interface DisplayableFacet extends Facet
| Property | Type | Description |
| --- | --- | --- |
| [displayName](./search-core.displayablefacet.displayname.md) | string | The name of the facet which is meant to be displayed to the user. |
-| [fieldId](./search-core.displayablefacet.fieldid.md) | string | The associated fieldId. |
| [options](./search-core.displayablefacet.options.md) | [DisplayableFacetOption](./search-core.displayablefacetoption.md)\[\] | An array of [DisplayableFacetOption](./search-core.displayablefacetoption.md) |
diff --git a/docs/search-core.displayablefacetoption.matcher.md b/docs/search-core.displayablefacetoption.matcher.md
deleted file mode 100644
index d910e08d..00000000
--- a/docs/search-core.displayablefacetoption.matcher.md
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [DisplayableFacetOption](./search-core.displayablefacetoption.md) > [matcher](./search-core.displayablefacetoption.matcher.md)
-
-## DisplayableFacetOption.matcher property
-
-A Matcher is a filtering operation.
-
-Signature:
-
-```typescript
-matcher: Matcher;
-```
diff --git a/docs/search-core.displayablefacetoption.md b/docs/search-core.displayablefacetoption.md
index 2d4558c2..7bc320af 100644
--- a/docs/search-core.displayablefacetoption.md
+++ b/docs/search-core.displayablefacetoption.md
@@ -19,7 +19,5 @@ export interface DisplayableFacetOption extends FacetOption
| --- | --- | --- |
| [count](./search-core.displayablefacetoption.count.md) | number | The number of results associated with this facet option. |
| [displayName](./search-core.displayablefacetoption.displayname.md) | string | The name of the facet option which is meant to be displayed to the end user. |
-| [matcher](./search-core.displayablefacetoption.matcher.md) | [Matcher](./search-core.matcher.md) | A Matcher is a filtering operation. |
| [selected](./search-core.displayablefacetoption.selected.md) | boolean | Whether or not the filter is selected in the search results. |
-| [value](./search-core.displayablefacetoption.value.md) | string \| number \| boolean \| [NumberRangeValue](./search-core.numberrangevalue.md) | The value to compare. |
diff --git a/docs/search-core.displayablefacetoption.value.md b/docs/search-core.displayablefacetoption.value.md
deleted file mode 100644
index 383c4736..00000000
--- a/docs/search-core.displayablefacetoption.value.md
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [DisplayableFacetOption](./search-core.displayablefacetoption.md) > [value](./search-core.displayablefacetoption.value.md)
-
-## DisplayableFacetOption.value property
-
-The value to compare.
-
-Signature:
-
-```typescript
-value: string | number | boolean | NumberRangeValue;
-```
diff --git a/docs/search-core.emaildirectanswer.fieldtype.md b/docs/search-core.emaildirectanswer.fieldtype.md
new file mode 100644
index 00000000..4091a0d2
--- /dev/null
+++ b/docs/search-core.emaildirectanswer.fieldtype.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [EmailDirectAnswer](./search-core.emaildirectanswer.md) > [fieldType](./search-core.emaildirectanswer.fieldtype.md)
+
+## EmailDirectAnswer.fieldType property
+
+Signature:
+
+```typescript
+fieldType: EnumOrLiteral;
+```
diff --git a/docs/search-core.emaildirectanswer.md b/docs/search-core.emaildirectanswer.md
new file mode 100644
index 00000000..f8065de3
--- /dev/null
+++ b/docs/search-core.emaildirectanswer.md
@@ -0,0 +1,21 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [EmailDirectAnswer](./search-core.emaildirectanswer.md)
+
+## EmailDirectAnswer interface
+
+A [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md) interface with 'email' field type.
+
+Signature:
+
+```typescript
+export interface EmailDirectAnswer extends BaseFieldValueDirectAnswer
+```
+Extends: [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md)<string\[\]>
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [fieldType](./search-core.emaildirectanswer.fieldtype.md) | [EnumOrLiteral](./search-core.enumorliteral.md)<[BuiltInFieldType.Email](./search-core.builtinfieldtype.md)> | |
+
diff --git a/docs/search-core.enumorliteral.md b/docs/search-core.enumorliteral.md
new file mode 100644
index 00000000..7dc80b4c
--- /dev/null
+++ b/docs/search-core.enumorliteral.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [EnumOrLiteral](./search-core.enumorliteral.md)
+
+## EnumOrLiteral type
+
+Produces a union type from the enum passed as a generic which consists of the enum values and the string literals of the enum.
+
+Signature:
+
+```typescript
+export declare type EnumOrLiteral = T | `${T}`;
+```
diff --git a/docs/search-core.facebookurldirectanswer.fieldtype.md b/docs/search-core.facebookurldirectanswer.fieldtype.md
new file mode 100644
index 00000000..ae99e755
--- /dev/null
+++ b/docs/search-core.facebookurldirectanswer.fieldtype.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [FacebookUrlDirectAnswer](./search-core.facebookurldirectanswer.md) > [fieldType](./search-core.facebookurldirectanswer.fieldtype.md)
+
+## FacebookUrlDirectAnswer.fieldType property
+
+Signature:
+
+```typescript
+fieldType: EnumOrLiteral;
+```
diff --git a/docs/search-core.facebookurldirectanswer.md b/docs/search-core.facebookurldirectanswer.md
new file mode 100644
index 00000000..5f087370
--- /dev/null
+++ b/docs/search-core.facebookurldirectanswer.md
@@ -0,0 +1,21 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [FacebookUrlDirectAnswer](./search-core.facebookurldirectanswer.md)
+
+## FacebookUrlDirectAnswer interface
+
+A direct answer for a facebook url field.
+
+Signature:
+
+```typescript
+export interface FacebookUrlDirectAnswer extends BaseFieldValueDirectAnswer
+```
+Extends: [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md)<string>
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [fieldType](./search-core.facebookurldirectanswer.fieldtype.md) | [EnumOrLiteral](./search-core.enumorliteral.md)<[BuiltInFieldType.FacebookURL](./search-core.builtinfieldtype.md)> | |
+
diff --git a/docs/search-core.facetoption.matcher.md b/docs/search-core.facetoption.matcher.md
deleted file mode 100644
index 202080d0..00000000
--- a/docs/search-core.facetoption.matcher.md
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [FacetOption](./search-core.facetoption.md) > [matcher](./search-core.facetoption.matcher.md)
-
-## FacetOption.matcher property
-
-A Matcher is a filtering operation.
-
-Signature:
-
-```typescript
-matcher: Matcher;
-```
diff --git a/docs/search-core.facetoption.md b/docs/search-core.facetoption.md
index 42c429b6..9fb89ab1 100644
--- a/docs/search-core.facetoption.md
+++ b/docs/search-core.facetoption.md
@@ -9,13 +9,13 @@ A filter associated with the facet.
Signature:
```typescript
-export interface FacetOption
+export interface FacetOption extends Omit
```
+Extends: Omit<[FieldValueFilter](./search-core.fieldvaluefilter.md), 'fieldId'>
## Properties
| Property | Type | Description |
| --- | --- | --- |
-| [matcher](./search-core.facetoption.matcher.md) | [Matcher](./search-core.matcher.md) | A Matcher is a filtering operation. |
-| [value](./search-core.facetoption.value.md) | string \| number \| boolean \| [NumberRangeValue](./search-core.numberrangevalue.md) | The value to compare. |
+| [value](./search-core.facetoption.value.md) | Exclude<[FieldValueFilter](./search-core.fieldvaluefilter.md)\['value'\], [NearFilterValue](./search-core.nearfiltervalue.md)> | The value to compare. |
diff --git a/docs/search-core.facetoption.value.md b/docs/search-core.facetoption.value.md
index 7b5d5e2a..bcb1b025 100644
--- a/docs/search-core.facetoption.value.md
+++ b/docs/search-core.facetoption.value.md
@@ -9,7 +9,7 @@ The value to compare.
Signature:
```typescript
-value: string | number | boolean | NumberRangeValue;
+value: Exclude;
```
## Example
diff --git a/docs/search-core.featuredsnippetdirectanswer.md b/docs/search-core.featuredsnippetdirectanswer.md
index a8c535d4..fb2a6e1f 100644
--- a/docs/search-core.featuredsnippetdirectanswer.md
+++ b/docs/search-core.featuredsnippetdirectanswer.md
@@ -2,25 +2,14 @@
[Home](./index.md) > [@yext/search-core](./search-core.md) > [FeaturedSnippetDirectAnswer](./search-core.featuredsnippetdirectanswer.md)
-## FeaturedSnippetDirectAnswer interface
+## FeaturedSnippetDirectAnswer type
-A direct answer which was found within a document.
+All possible built-in [BaseFeaturedSnippetDirectAnswer](./search-core.basefeaturedsnippetdirectanswer.md) interfaces.
Signature:
```typescript
-export interface FeaturedSnippetDirectAnswer extends DirectAnswer
+export declare type FeaturedSnippetDirectAnswer = MultiLineTextSnippetDirectAnswer | RichTextSnippetDirectAnswer;
```
-Extends: [DirectAnswer](./search-core.directanswer.md)
-
-## Properties
-
-| Property | Type | Description |
-| --- | --- | --- |
-| [fieldType](./search-core.featuredsnippetdirectanswer.fieldtype.md) | string | The field type of the direct answer. |
-| [relatedResult](./search-core.featuredsnippetdirectanswer.relatedresult.md) | [Result](./search-core.result.md) | The entity associated with the direct answer. |
-| [snippet](./search-core.featuredsnippetdirectanswer.snippet.md) | [Snippet](./search-core.snippet.md) | The snippet where the direct answer was found. |
-| [type](./search-core.featuredsnippetdirectanswer.type.md) | [DirectAnswerType.FeaturedSnippet](./search-core.directanswertype.md) | [DirectAnswerType](./search-core.directanswertype.md).FeaturedSnippet. |
-| [value?](./search-core.featuredsnippetdirectanswer.value.md) | string | (Optional) The result of the direct answer. |
-| [verticalKey](./search-core.featuredsnippetdirectanswer.verticalkey.md) | string | The vertical key of the direct answer. |
+References: [MultiLineTextSnippetDirectAnswer](./search-core.multilinetextsnippetdirectanswer.md), [RichTextSnippetDirectAnswer](./search-core.richtextsnippetdirectanswer.md)
diff --git a/docs/search-core.featuredsnippetdirectanswer.relatedresult.md b/docs/search-core.featuredsnippetdirectanswer.relatedresult.md
deleted file mode 100644
index b4225916..00000000
--- a/docs/search-core.featuredsnippetdirectanswer.relatedresult.md
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [FeaturedSnippetDirectAnswer](./search-core.featuredsnippetdirectanswer.md) > [relatedResult](./search-core.featuredsnippetdirectanswer.relatedresult.md)
-
-## FeaturedSnippetDirectAnswer.relatedResult property
-
-The entity associated with the direct answer.
-
-Signature:
-
-```typescript
-relatedResult: Result;
-```
diff --git a/docs/search-core.featuredsnippetdirectanswer.type.md b/docs/search-core.featuredsnippetdirectanswer.type.md
deleted file mode 100644
index e5428ab2..00000000
--- a/docs/search-core.featuredsnippetdirectanswer.type.md
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [FeaturedSnippetDirectAnswer](./search-core.featuredsnippetdirectanswer.md) > [type](./search-core.featuredsnippetdirectanswer.type.md)
-
-## FeaturedSnippetDirectAnswer.type property
-
-[DirectAnswerType](./search-core.directanswertype.md).FeaturedSnippet.
-
-Signature:
-
-```typescript
-type: DirectAnswerType.FeaturedSnippet;
-```
diff --git a/docs/search-core.featuredsnippetdirectanswer.value.md b/docs/search-core.featuredsnippetdirectanswer.value.md
deleted file mode 100644
index 2627ae03..00000000
--- a/docs/search-core.featuredsnippetdirectanswer.value.md
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [FeaturedSnippetDirectAnswer](./search-core.featuredsnippetdirectanswer.md) > [value](./search-core.featuredsnippetdirectanswer.value.md)
-
-## FeaturedSnippetDirectAnswer.value property
-
-The result of the direct answer.
-
-Signature:
-
-```typescript
-value?: string;
-```
-
-## Remarks
-
-A value will not be present if the [DirectAnswer.fieldType](./search-core.directanswer.fieldtype.md) is 'rich\_text'.
-
diff --git a/docs/search-core.featuredsnippetdirectanswer.verticalkey.md b/docs/search-core.featuredsnippetdirectanswer.verticalkey.md
deleted file mode 100644
index c7e00c0c..00000000
--- a/docs/search-core.featuredsnippetdirectanswer.verticalkey.md
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [FeaturedSnippetDirectAnswer](./search-core.featuredsnippetdirectanswer.md) > [verticalKey](./search-core.featuredsnippetdirectanswer.verticalkey.md)
-
-## FeaturedSnippetDirectAnswer.verticalKey property
-
-The vertical key of the direct answer.
-
-Signature:
-
-```typescript
-verticalKey: string;
-```
diff --git a/docs/search-core.fieldvaluedirectanswer.fieldtype.md b/docs/search-core.fieldvaluedirectanswer.fieldtype.md
deleted file mode 100644
index e7af3c09..00000000
--- a/docs/search-core.fieldvaluedirectanswer.fieldtype.md
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [FieldValueDirectAnswer](./search-core.fieldvaluedirectanswer.md) > [fieldType](./search-core.fieldvaluedirectanswer.fieldtype.md)
-
-## FieldValueDirectAnswer.fieldType property
-
-The field type of the direct answer.
-
-Signature:
-
-```typescript
-fieldType: string;
-```
diff --git a/docs/search-core.fieldvaluedirectanswer.md b/docs/search-core.fieldvaluedirectanswer.md
index 1bc85324..952a3fbb 100644
--- a/docs/search-core.fieldvaluedirectanswer.md
+++ b/docs/search-core.fieldvaluedirectanswer.md
@@ -2,27 +2,14 @@
[Home](./index.md) > [@yext/search-core](./search-core.md) > [FieldValueDirectAnswer](./search-core.fieldvaluedirectanswer.md)
-## FieldValueDirectAnswer interface
+## FieldValueDirectAnswer type
-A direct answer where the answer came from a field from the knowledge graph.
+Possible built-in and custom [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md) interfaces.
Signature:
```typescript
-export interface FieldValueDirectAnswer extends DirectAnswer
+export declare type FieldValueDirectAnswer = UnknownFieldValueDirectAnswer | TextDirectAnswer | UrlDirectAnswer | RichTextDirectAnswer | DecimalDirectAnswer | FacebookUrlDirectAnswer | InstagramHandleDirectAnswer | TwitterHandleDirectAnswer | IosAppUrlDirectAnswer | AndroidAppUrlDirectAnswer | ComplexUrlDirectAnswer | IntegerDirectAnswer | PhoneDirectAnswer | EmailDirectAnswer | AddressDirectAnswer | HoursDirectAnswer;
```
-Extends: [DirectAnswer](./search-core.directanswer.md)
-
-## Properties
-
-| Property | Type | Description |
-| --- | --- | --- |
-| [entityName](./search-core.fieldvaluedirectanswer.entityname.md) | string | The name of the entity that direct answer came from. |
-| [fieldApiName](./search-core.fieldvaluedirectanswer.fieldapiname.md) | string | The field api name of the direct answer. |
-| [fieldName](./search-core.fieldvaluedirectanswer.fieldname.md) | string | The field name of the direct answer. |
-| [fieldType](./search-core.fieldvaluedirectanswer.fieldtype.md) | string | The field type of the direct answer. |
-| [relatedResult](./search-core.fieldvaluedirectanswer.relatedresult.md) | [Result](./search-core.result.md) | The entity associated with the direct answer. |
-| [type](./search-core.fieldvaluedirectanswer.type.md) | [DirectAnswerType.FieldValue](./search-core.directanswertype.md) | [DirectAnswerType](./search-core.directanswertype.md).FieldValue. |
-| [value](./search-core.fieldvaluedirectanswer.value.md) | string | The result of the direct answer. |
-| [verticalKey](./search-core.fieldvaluedirectanswer.verticalkey.md) | string | The vertical key of the direct answer. |
+References: [UnknownFieldValueDirectAnswer](./search-core.unknownfieldvaluedirectanswer.md), [TextDirectAnswer](./search-core.textdirectanswer.md), [UrlDirectAnswer](./search-core.urldirectanswer.md), [RichTextDirectAnswer](./search-core.richtextdirectanswer.md), [DecimalDirectAnswer](./search-core.decimaldirectanswer.md), [FacebookUrlDirectAnswer](./search-core.facebookurldirectanswer.md), [InstagramHandleDirectAnswer](./search-core.instagramhandledirectanswer.md), [TwitterHandleDirectAnswer](./search-core.twitterhandledirectanswer.md), [IosAppUrlDirectAnswer](./search-core.iosappurldirectanswer.md), [AndroidAppUrlDirectAnswer](./search-core.androidappurldirectanswer.md), [ComplexUrlDirectAnswer](./search-core.complexurldirectanswer.md), [IntegerDirectAnswer](./search-core.integerdirectanswer.md), [PhoneDirectAnswer](./search-core.phonedirectanswer.md), [EmailDirectAnswer](./search-core.emaildirectanswer.md), [AddressDirectAnswer](./search-core.addressdirectanswer.md), [HoursDirectAnswer](./search-core.hoursdirectanswer.md)
diff --git a/docs/search-core.fieldvaluedirectanswer.relatedresult.md b/docs/search-core.fieldvaluedirectanswer.relatedresult.md
deleted file mode 100644
index fe294b19..00000000
--- a/docs/search-core.fieldvaluedirectanswer.relatedresult.md
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [FieldValueDirectAnswer](./search-core.fieldvaluedirectanswer.md) > [relatedResult](./search-core.fieldvaluedirectanswer.relatedresult.md)
-
-## FieldValueDirectAnswer.relatedResult property
-
-The entity associated with the direct answer.
-
-Signature:
-
-```typescript
-relatedResult: Result;
-```
diff --git a/docs/search-core.fieldvaluedirectanswer.type.md b/docs/search-core.fieldvaluedirectanswer.type.md
deleted file mode 100644
index 83b42814..00000000
--- a/docs/search-core.fieldvaluedirectanswer.type.md
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [FieldValueDirectAnswer](./search-core.fieldvaluedirectanswer.md) > [type](./search-core.fieldvaluedirectanswer.type.md)
-
-## FieldValueDirectAnswer.type property
-
-[DirectAnswerType](./search-core.directanswertype.md).FieldValue.
-
-Signature:
-
-```typescript
-type: DirectAnswerType.FieldValue;
-```
diff --git a/docs/search-core.fieldvaluedirectanswer.value.md b/docs/search-core.fieldvaluedirectanswer.value.md
deleted file mode 100644
index aa85b209..00000000
--- a/docs/search-core.fieldvaluedirectanswer.value.md
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [FieldValueDirectAnswer](./search-core.fieldvaluedirectanswer.md) > [value](./search-core.fieldvaluedirectanswer.value.md)
-
-## FieldValueDirectAnswer.value property
-
-The result of the direct answer.
-
-Signature:
-
-```typescript
-value: string;
-```
-
-## Remarks
-
-A value will not be present if the [DirectAnswer.fieldType](./search-core.directanswer.fieldtype.md) is 'rich\_text'.
-
diff --git a/docs/search-core.fieldvaluedirectanswer.verticalkey.md b/docs/search-core.fieldvaluedirectanswer.verticalkey.md
deleted file mode 100644
index 5f9197cc..00000000
--- a/docs/search-core.fieldvaluedirectanswer.verticalkey.md
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [FieldValueDirectAnswer](./search-core.fieldvaluedirectanswer.md) > [verticalKey](./search-core.fieldvaluedirectanswer.verticalkey.md)
-
-## FieldValueDirectAnswer.verticalKey property
-
-The vertical key of the direct answer.
-
-Signature:
-
-```typescript
-verticalKey: string;
-```
diff --git a/docs/search-core.filter.fieldid.md b/docs/search-core.fieldvaluefilter.fieldid.md
similarity index 61%
rename from docs/search-core.filter.fieldid.md
rename to docs/search-core.fieldvaluefilter.fieldid.md
index 9c2ca524..8e3ad0d0 100644
--- a/docs/search-core.filter.fieldid.md
+++ b/docs/search-core.fieldvaluefilter.fieldid.md
@@ -1,8 +1,8 @@
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [Filter](./search-core.filter.md) > [fieldId](./search-core.filter.fieldid.md)
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [FieldValueFilter](./search-core.fieldvaluefilter.md) > [fieldId](./search-core.fieldvaluefilter.fieldid.md)
-## Filter.fieldId property
+## FieldValueFilter.fieldId property
The fieldId to apply the filter against.
diff --git a/docs/search-core.filter.matcher.md b/docs/search-core.fieldvaluefilter.matcher.md
similarity index 59%
rename from docs/search-core.filter.matcher.md
rename to docs/search-core.fieldvaluefilter.matcher.md
index 41197f93..ec908ff3 100644
--- a/docs/search-core.filter.matcher.md
+++ b/docs/search-core.fieldvaluefilter.matcher.md
@@ -1,8 +1,8 @@
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [Filter](./search-core.filter.md) > [matcher](./search-core.filter.matcher.md)
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [FieldValueFilter](./search-core.fieldvaluefilter.md) > [matcher](./search-core.fieldvaluefilter.matcher.md)
-## Filter.matcher property
+## FieldValueFilter.matcher property
A Matcher is a filtering operation.
diff --git a/docs/search-core.fieldvaluefilter.md b/docs/search-core.fieldvaluefilter.md
new file mode 100644
index 00000000..204e12d0
--- /dev/null
+++ b/docs/search-core.fieldvaluefilter.md
@@ -0,0 +1,22 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [FieldValueFilter](./search-core.fieldvaluefilter.md)
+
+## FieldValueFilter interface
+
+Represents a filter which compares values to a single field.
+
+Signature:
+
+```typescript
+export interface FieldValueFilter
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [fieldId](./search-core.fieldvaluefilter.fieldid.md) | string | The fieldId to apply the filter against. |
+| [matcher](./search-core.fieldvaluefilter.matcher.md) | [Matcher](./search-core.matcher.md) | A Matcher is a filtering operation. |
+| [value](./search-core.fieldvaluefilter.value.md) | string \| number \| boolean \| [NearFilterValue](./search-core.nearfiltervalue.md) \| [NumberRangeValue](./search-core.numberrangevalue.md) | The value to compare. |
+
diff --git a/docs/search-core.filter.value.md b/docs/search-core.fieldvaluefilter.value.md
similarity index 64%
rename from docs/search-core.filter.value.md
rename to docs/search-core.fieldvaluefilter.value.md
index a552358c..d473650e 100644
--- a/docs/search-core.filter.value.md
+++ b/docs/search-core.fieldvaluefilter.value.md
@@ -1,8 +1,8 @@
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [Filter](./search-core.filter.md) > [value](./search-core.filter.value.md)
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [FieldValueFilter](./search-core.fieldvaluefilter.md) > [value](./search-core.fieldvaluefilter.value.md)
-## Filter.value property
+## FieldValueFilter.value property
The value to compare.
diff --git a/docs/search-core.fieldvaluestaticfilter.kind.md b/docs/search-core.fieldvaluestaticfilter.kind.md
new file mode 100644
index 00000000..2650e070
--- /dev/null
+++ b/docs/search-core.fieldvaluestaticfilter.kind.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [FieldValueStaticFilter](./search-core.fieldvaluestaticfilter.md) > [kind](./search-core.fieldvaluestaticfilter.kind.md)
+
+## FieldValueStaticFilter.kind property
+
+The kind of static filter.
+
+Signature:
+
+```typescript
+kind: 'fieldValue';
+```
diff --git a/docs/search-core.fieldvaluestaticfilter.md b/docs/search-core.fieldvaluestaticfilter.md
new file mode 100644
index 00000000..66f1fe4a
--- /dev/null
+++ b/docs/search-core.fieldvaluestaticfilter.md
@@ -0,0 +1,21 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [FieldValueStaticFilter](./search-core.fieldvaluestaticfilter.md)
+
+## FieldValueStaticFilter interface
+
+A [FieldValueFilter](./search-core.fieldvaluefilter.md) with the kind of filter specified to discriminate between static filter types.
+
+Signature:
+
+```typescript
+export interface FieldValueStaticFilter extends FieldValueFilter
+```
+Extends: [FieldValueFilter](./search-core.fieldvaluefilter.md)
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [kind](./search-core.fieldvaluestaticfilter.kind.md) | 'fieldValue' | The kind of static filter. |
+
diff --git a/docs/search-core.filter.md b/docs/search-core.filter.md
deleted file mode 100644
index 4851d627..00000000
--- a/docs/search-core.filter.md
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [Filter](./search-core.filter.md)
-
-## Filter interface
-
-Represents a filter which compares values to a single field.
-
-Signature:
-
-```typescript
-export interface Filter
-```
-
-## Properties
-
-| Property | Type | Description |
-| --- | --- | --- |
-| [fieldId](./search-core.filter.fieldid.md) | string | The fieldId to apply the filter against. |
-| [matcher](./search-core.filter.matcher.md) | [Matcher](./search-core.matcher.md) | A Matcher is a filtering operation. |
-| [value](./search-core.filter.value.md) | string \| number \| boolean \| [NearFilterValue](./search-core.nearfiltervalue.md) \| [NumberRangeValue](./search-core.numberrangevalue.md) | The value to compare. |
-
diff --git a/docs/search-core.filtercombinator.md b/docs/search-core.filtercombinator.md
index 7c2789e5..566b8ff1 100644
--- a/docs/search-core.filtercombinator.md
+++ b/docs/search-core.filtercombinator.md
@@ -4,7 +4,7 @@
## FilterCombinator enum
-Indicates how the filters in a [CombinedFilter](./search-core.combinedfilter.md) should be combined.
+Indicates how child filters in a [StaticFilter](./search-core.staticfilter.md) should be combined.
Signature:
diff --git a/docs/search-core.filtersearchrequest.excluded.md b/docs/search-core.filtersearchrequest.excluded.md
index 621b3d3d..46610a10 100644
--- a/docs/search-core.filtersearchrequest.excluded.md
+++ b/docs/search-core.filtersearchrequest.excluded.md
@@ -4,10 +4,10 @@
## FilterSearchRequest.excluded property
-an array of filters that should be excluded from filter search results.
+An array of field value filters that should be excluded from filter search results.
Signature:
```typescript
-excluded?: Filter[];
+excluded?: FieldValueFilter[];
```
diff --git a/docs/search-core.filtersearchrequest.fields.md b/docs/search-core.filtersearchrequest.fields.md
index 98fe1a1f..aedfbd86 100644
--- a/docs/search-core.filtersearchrequest.fields.md
+++ b/docs/search-core.filtersearchrequest.fields.md
@@ -4,7 +4,7 @@
## FilterSearchRequest.fields property
-An array of [SearchParameterField](./search-core.searchparameterfield.md)
+An array of [SearchParameterField](./search-core.searchparameterfield.md).
Signature:
diff --git a/docs/search-core.filtersearchrequest.md b/docs/search-core.filtersearchrequest.md
index 266caf5c..1facc433 100644
--- a/docs/search-core.filtersearchrequest.md
+++ b/docs/search-core.filtersearchrequest.md
@@ -17,8 +17,8 @@ export interface FilterSearchRequest extends SearchRequest
| Property | Type | Description |
| --- | --- | --- |
-| [excluded?](./search-core.filtersearchrequest.excluded.md) | [Filter](./search-core.filter.md)\[\] | (Optional) an array of filters that should be excluded from filter search results. |
-| [fields](./search-core.filtersearchrequest.fields.md) | [SearchParameterField](./search-core.searchparameterfield.md)\[\] | An array of [SearchParameterField](./search-core.searchparameterfield.md) |
+| [excluded?](./search-core.filtersearchrequest.excluded.md) | [FieldValueFilter](./search-core.fieldvaluefilter.md)\[\] | (Optional) An array of field value filters that should be excluded from filter search results. |
+| [fields](./search-core.filtersearchrequest.fields.md) | [SearchParameterField](./search-core.searchparameterfield.md)\[\] | An array of [SearchParameterField](./search-core.searchparameterfield.md). |
| [input](./search-core.filtersearchrequest.input.md) | string | The input string for autocomplete. |
| [sectioned](./search-core.filtersearchrequest.sectioned.md) | boolean | Determines whether or not the results of the [FilterSearchResponse](./search-core.filtersearchresponse.md) are separated by field. |
| [sessionTrackingEnabled?](./search-core.filtersearchrequest.sessiontrackingenabled.md) | boolean | (Optional) Enables session tracking. |
diff --git a/docs/search-core.holidayhours.date.md b/docs/search-core.holidayhours.date.md
new file mode 100644
index 00000000..83353f60
--- /dev/null
+++ b/docs/search-core.holidayhours.date.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [HolidayHours](./search-core.holidayhours.md) > [date](./search-core.holidayhours.date.md)
+
+## HolidayHours.date property
+
+Signature:
+
+```typescript
+date: string;
+```
diff --git a/docs/search-core.holidayhours.isclosed.md b/docs/search-core.holidayhours.isclosed.md
new file mode 100644
index 00000000..fc2486a4
--- /dev/null
+++ b/docs/search-core.holidayhours.isclosed.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [HolidayHours](./search-core.holidayhours.md) > [isClosed](./search-core.holidayhours.isclosed.md)
+
+## HolidayHours.isClosed property
+
+Signature:
+
+```typescript
+isClosed?: boolean;
+```
diff --git a/docs/search-core.holidayhours.isregularhours.md b/docs/search-core.holidayhours.isregularhours.md
new file mode 100644
index 00000000..da39c59c
--- /dev/null
+++ b/docs/search-core.holidayhours.isregularhours.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [HolidayHours](./search-core.holidayhours.md) > [isRegularHours](./search-core.holidayhours.isregularhours.md)
+
+## HolidayHours.isRegularHours property
+
+Signature:
+
+```typescript
+isRegularHours?: boolean;
+```
diff --git a/docs/search-core.holidayhours.md b/docs/search-core.holidayhours.md
new file mode 100644
index 00000000..9decf23b
--- /dev/null
+++ b/docs/search-core.holidayhours.md
@@ -0,0 +1,23 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [HolidayHours](./search-core.holidayhours.md)
+
+## HolidayHours interface
+
+An interface for holiday hours to use in [BaseFieldValueDirectAnswer.value](./search-core.basefieldvaluedirectanswer.value.md).
+
+Signature:
+
+```typescript
+export interface HolidayHours
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [date](./search-core.holidayhours.date.md) | string | |
+| [isClosed?](./search-core.holidayhours.isclosed.md) | boolean | (Optional) |
+| [isRegularHours?](./search-core.holidayhours.isregularhours.md) | boolean | (Optional) |
+| [openIntervals?](./search-core.holidayhours.openintervals.md) | [Interval](./search-core.interval.md)\[\] | (Optional) |
+
diff --git a/docs/search-core.holidayhours.openintervals.md b/docs/search-core.holidayhours.openintervals.md
new file mode 100644
index 00000000..38a3dcc3
--- /dev/null
+++ b/docs/search-core.holidayhours.openintervals.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [HolidayHours](./search-core.holidayhours.md) > [openIntervals](./search-core.holidayhours.openintervals.md)
+
+## HolidayHours.openIntervals property
+
+Signature:
+
+```typescript
+openIntervals?: Interval[];
+```
diff --git a/docs/search-core.hours.friday.md b/docs/search-core.hours.friday.md
new file mode 100644
index 00000000..50c6b426
--- /dev/null
+++ b/docs/search-core.hours.friday.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Hours](./search-core.hours.md) > [friday](./search-core.hours.friday.md)
+
+## Hours.friday property
+
+Signature:
+
+```typescript
+friday?: DayHour;
+```
diff --git a/docs/search-core.hours.holidayhours.md b/docs/search-core.hours.holidayhours.md
new file mode 100644
index 00000000..16decf5b
--- /dev/null
+++ b/docs/search-core.hours.holidayhours.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Hours](./search-core.hours.md) > [holidayHours](./search-core.hours.holidayhours.md)
+
+## Hours.holidayHours property
+
+Signature:
+
+```typescript
+holidayHours?: HolidayHours[];
+```
diff --git a/docs/search-core.hours.md b/docs/search-core.hours.md
new file mode 100644
index 00000000..2498686f
--- /dev/null
+++ b/docs/search-core.hours.md
@@ -0,0 +1,28 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Hours](./search-core.hours.md)
+
+## Hours interface
+
+An interface for hours fields to use in [BaseFieldValueDirectAnswer.value](./search-core.basefieldvaluedirectanswer.value.md).
+
+Signature:
+
+```typescript
+export interface Hours
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [friday?](./search-core.hours.friday.md) | [DayHour](./search-core.dayhour.md) | (Optional) |
+| [holidayHours?](./search-core.hours.holidayhours.md) | [HolidayHours](./search-core.holidayhours.md)\[\] | (Optional) |
+| [monday?](./search-core.hours.monday.md) | [DayHour](./search-core.dayhour.md) | (Optional) |
+| [reopenDate?](./search-core.hours.reopendate.md) | string | (Optional) |
+| [saturday?](./search-core.hours.saturday.md) | [DayHour](./search-core.dayhour.md) | (Optional) |
+| [sunday?](./search-core.hours.sunday.md) | [DayHour](./search-core.dayhour.md) | (Optional) |
+| [thursday?](./search-core.hours.thursday.md) | [DayHour](./search-core.dayhour.md) | (Optional) |
+| [tuesday?](./search-core.hours.tuesday.md) | [DayHour](./search-core.dayhour.md) | (Optional) |
+| [wednesday?](./search-core.hours.wednesday.md) | [DayHour](./search-core.dayhour.md) | (Optional) |
+
diff --git a/docs/search-core.hours.monday.md b/docs/search-core.hours.monday.md
new file mode 100644
index 00000000..ac0ebfd2
--- /dev/null
+++ b/docs/search-core.hours.monday.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Hours](./search-core.hours.md) > [monday](./search-core.hours.monday.md)
+
+## Hours.monday property
+
+Signature:
+
+```typescript
+monday?: DayHour;
+```
diff --git a/docs/search-core.hours.reopendate.md b/docs/search-core.hours.reopendate.md
new file mode 100644
index 00000000..367b1252
--- /dev/null
+++ b/docs/search-core.hours.reopendate.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Hours](./search-core.hours.md) > [reopenDate](./search-core.hours.reopendate.md)
+
+## Hours.reopenDate property
+
+Signature:
+
+```typescript
+reopenDate?: string;
+```
diff --git a/docs/search-core.hours.saturday.md b/docs/search-core.hours.saturday.md
new file mode 100644
index 00000000..300c7369
--- /dev/null
+++ b/docs/search-core.hours.saturday.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Hours](./search-core.hours.md) > [saturday](./search-core.hours.saturday.md)
+
+## Hours.saturday property
+
+Signature:
+
+```typescript
+saturday?: DayHour;
+```
diff --git a/docs/search-core.hours.sunday.md b/docs/search-core.hours.sunday.md
new file mode 100644
index 00000000..76f29e76
--- /dev/null
+++ b/docs/search-core.hours.sunday.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Hours](./search-core.hours.md) > [sunday](./search-core.hours.sunday.md)
+
+## Hours.sunday property
+
+Signature:
+
+```typescript
+sunday?: DayHour;
+```
diff --git a/docs/search-core.hours.thursday.md b/docs/search-core.hours.thursday.md
new file mode 100644
index 00000000..e8eeb401
--- /dev/null
+++ b/docs/search-core.hours.thursday.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Hours](./search-core.hours.md) > [thursday](./search-core.hours.thursday.md)
+
+## Hours.thursday property
+
+Signature:
+
+```typescript
+thursday?: DayHour;
+```
diff --git a/docs/search-core.hours.tuesday.md b/docs/search-core.hours.tuesday.md
new file mode 100644
index 00000000..62718769
--- /dev/null
+++ b/docs/search-core.hours.tuesday.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Hours](./search-core.hours.md) > [tuesday](./search-core.hours.tuesday.md)
+
+## Hours.tuesday property
+
+Signature:
+
+```typescript
+tuesday?: DayHour;
+```
diff --git a/docs/search-core.hours.wednesday.md b/docs/search-core.hours.wednesday.md
new file mode 100644
index 00000000..63522c30
--- /dev/null
+++ b/docs/search-core.hours.wednesday.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Hours](./search-core.hours.md) > [wednesday](./search-core.hours.wednesday.md)
+
+## Hours.wednesday property
+
+Signature:
+
+```typescript
+wednesday?: DayHour;
+```
diff --git a/docs/search-core.hoursdirectanswer.fieldtype.md b/docs/search-core.hoursdirectanswer.fieldtype.md
new file mode 100644
index 00000000..19d8efa0
--- /dev/null
+++ b/docs/search-core.hoursdirectanswer.fieldtype.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [HoursDirectAnswer](./search-core.hoursdirectanswer.md) > [fieldType](./search-core.hoursdirectanswer.fieldtype.md)
+
+## HoursDirectAnswer.fieldType property
+
+Signature:
+
+```typescript
+fieldType: EnumOrLiteral;
+```
diff --git a/docs/search-core.hoursdirectanswer.md b/docs/search-core.hoursdirectanswer.md
new file mode 100644
index 00000000..977144fd
--- /dev/null
+++ b/docs/search-core.hoursdirectanswer.md
@@ -0,0 +1,21 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [HoursDirectAnswer](./search-core.hoursdirectanswer.md)
+
+## HoursDirectAnswer interface
+
+A [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md) interface with 'hours' field type.
+
+Signature:
+
+```typescript
+export interface HoursDirectAnswer extends BaseFieldValueDirectAnswer
+```
+Extends: [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md)<[Hours](./search-core.hours.md) \| [Hours](./search-core.hours.md)\[\]>
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [fieldType](./search-core.hoursdirectanswer.fieldtype.md) | [EnumOrLiteral](./search-core.enumorliteral.md)<[BuiltInFieldType.Hours](./search-core.builtinfieldtype.md)> | |
+
diff --git a/docs/search-core.instagramhandledirectanswer.fieldtype.md b/docs/search-core.instagramhandledirectanswer.fieldtype.md
new file mode 100644
index 00000000..57db7932
--- /dev/null
+++ b/docs/search-core.instagramhandledirectanswer.fieldtype.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [InstagramHandleDirectAnswer](./search-core.instagramhandledirectanswer.md) > [fieldType](./search-core.instagramhandledirectanswer.fieldtype.md)
+
+## InstagramHandleDirectAnswer.fieldType property
+
+Signature:
+
+```typescript
+fieldType: EnumOrLiteral;
+```
diff --git a/docs/search-core.instagramhandledirectanswer.md b/docs/search-core.instagramhandledirectanswer.md
new file mode 100644
index 00000000..ad4c088a
--- /dev/null
+++ b/docs/search-core.instagramhandledirectanswer.md
@@ -0,0 +1,21 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [InstagramHandleDirectAnswer](./search-core.instagramhandledirectanswer.md)
+
+## InstagramHandleDirectAnswer interface
+
+A direct answer for an instagram handle field.
+
+Signature:
+
+```typescript
+export interface InstagramHandleDirectAnswer extends BaseFieldValueDirectAnswer
+```
+Extends: [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md)<string>
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [fieldType](./search-core.instagramhandledirectanswer.fieldtype.md) | [EnumOrLiteral](./search-core.enumorliteral.md)<[BuiltInFieldType.InstagramHandle](./search-core.builtinfieldtype.md)> | |
+
diff --git a/docs/search-core.integerdirectanswer.fieldtype.md b/docs/search-core.integerdirectanswer.fieldtype.md
new file mode 100644
index 00000000..03d12abb
--- /dev/null
+++ b/docs/search-core.integerdirectanswer.fieldtype.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [IntegerDirectAnswer](./search-core.integerdirectanswer.md) > [fieldType](./search-core.integerdirectanswer.fieldtype.md)
+
+## IntegerDirectAnswer.fieldType property
+
+Signature:
+
+```typescript
+fieldType: EnumOrLiteral;
+```
diff --git a/docs/search-core.integerdirectanswer.md b/docs/search-core.integerdirectanswer.md
new file mode 100644
index 00000000..374cc186
--- /dev/null
+++ b/docs/search-core.integerdirectanswer.md
@@ -0,0 +1,25 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [IntegerDirectAnswer](./search-core.integerdirectanswer.md)
+
+## IntegerDirectAnswer interface
+
+A direct answer for an integer field.
+
+Signature:
+
+```typescript
+export interface IntegerDirectAnswer extends BaseFieldValueDirectAnswer
+```
+Extends: [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md)<number>
+
+## Remarks
+
+`IntegerDirectAnswer`s are only used for built in number fields. Custom number fields use [DecimalDirectAnswer](./search-core.decimaldirectanswer.md) instead.
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [fieldType](./search-core.integerdirectanswer.fieldtype.md) | [EnumOrLiteral](./search-core.enumorliteral.md)<[BuiltInFieldType.Integer](./search-core.builtinfieldtype.md)> | |
+
diff --git a/docs/search-core.interval.end.md b/docs/search-core.interval.end.md
new file mode 100644
index 00000000..9b259347
--- /dev/null
+++ b/docs/search-core.interval.end.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Interval](./search-core.interval.md) > [end](./search-core.interval.end.md)
+
+## Interval.end property
+
+Signature:
+
+```typescript
+end?: string;
+```
diff --git a/docs/search-core.interval.md b/docs/search-core.interval.md
new file mode 100644
index 00000000..38be524b
--- /dev/null
+++ b/docs/search-core.interval.md
@@ -0,0 +1,21 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Interval](./search-core.interval.md)
+
+## Interval interface
+
+An interface for a time interval to use in [BaseFieldValueDirectAnswer.value](./search-core.basefieldvaluedirectanswer.value.md).
+
+Signature:
+
+```typescript
+export interface Interval
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [end?](./search-core.interval.end.md) | string | (Optional) |
+| [start?](./search-core.interval.start.md) | string | (Optional) |
+
diff --git a/docs/search-core.interval.start.md b/docs/search-core.interval.start.md
new file mode 100644
index 00000000..96fba5f6
--- /dev/null
+++ b/docs/search-core.interval.start.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [Interval](./search-core.interval.md) > [start](./search-core.interval.start.md)
+
+## Interval.start property
+
+Signature:
+
+```typescript
+start?: string;
+```
diff --git a/docs/search-core.iosappurldirectanswer.fieldtype.md b/docs/search-core.iosappurldirectanswer.fieldtype.md
new file mode 100644
index 00000000..1d54979a
--- /dev/null
+++ b/docs/search-core.iosappurldirectanswer.fieldtype.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [IosAppUrlDirectAnswer](./search-core.iosappurldirectanswer.md) > [fieldType](./search-core.iosappurldirectanswer.fieldtype.md)
+
+## IosAppUrlDirectAnswer.fieldType property
+
+Signature:
+
+```typescript
+fieldType: EnumOrLiteral;
+```
diff --git a/docs/search-core.iosappurldirectanswer.md b/docs/search-core.iosappurldirectanswer.md
new file mode 100644
index 00000000..cc17fac5
--- /dev/null
+++ b/docs/search-core.iosappurldirectanswer.md
@@ -0,0 +1,21 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [IosAppUrlDirectAnswer](./search-core.iosappurldirectanswer.md)
+
+## IosAppUrlDirectAnswer interface
+
+A direct answer for an iOS app url field.
+
+Signature:
+
+```typescript
+export interface IosAppUrlDirectAnswer extends BaseFieldValueDirectAnswer
+```
+Extends: [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md)<string>
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [fieldType](./search-core.iosappurldirectanswer.fieldtype.md) | [EnumOrLiteral](./search-core.enumorliteral.md)<[BuiltInFieldType.IOSAppURL](./search-core.builtinfieldtype.md)> | |
+
diff --git a/docs/search-core.md b/docs/search-core.md
index 3b130d7b..615f03a8 100644
--- a/docs/search-core.md
+++ b/docs/search-core.md
@@ -8,7 +8,6 @@
| Class | Description |
| --- | --- |
-| [AnswersCore](./search-core.answerscore.md) | |
| [SearchCore](./search-core.searchcore.md) | Provides methods for executing searches, submitting questions, and performing autocompletes. |
| [SearchError](./search-core.searcherror.md) | Represents an error |
@@ -17,10 +16,11 @@
| Enumeration | Description |
| --- | --- |
| [AppliedQueryFilterType](./search-core.appliedqueryfiltertype.md) | Represents the type of [AppliedQueryFilter](./search-core.appliedqueryfilter.md) applied to a search. |
+| [BuiltInFieldType](./search-core.builtinfieldtype.md) | Possible built-in field types for [DirectAnswer.fieldType](./search-core.directanswer.fieldtype.md). |
| [DirectAnswerType](./search-core.directanswertype.md) | Represents the type of direct answer. |
| [Direction](./search-core.direction.md) | The direction of a sort. |
| [ErrorType](./search-core.errortype.md) | Identifier for the type of error causing the failure. |
-| [FilterCombinator](./search-core.filtercombinator.md) | Indicates how the filters in a [CombinedFilter](./search-core.combinedfilter.md) should be combined. |
+| [FilterCombinator](./search-core.filtercombinator.md) | Indicates how child filters in a [StaticFilter](./search-core.staticfilter.md) should be combined. |
| [LocationBiasMethod](./search-core.locationbiasmethod.md) | The method used to determine the location. |
| [Matcher](./search-core.matcher.md) | A Matcher is a filtering operation. |
| [QuerySource](./search-core.querysource.md) | The source of the search request. |
@@ -41,43 +41,60 @@
| Interface | Description |
| --- | --- |
| [AdditionalHttpHeaders](./search-core.additionalhttpheaders.md) | AdditionalHttpHeaders allows users to specify additional values for specific HTTP headers. |
-| [AnswersConfigWithApiKey](./search-core.answersconfigwithapikey.md) | |
-| [AnswersConfigWithToken](./search-core.answersconfigwithtoken.md) | |
-| [AnswersError](./search-core.answerserror.md) | |
-| [AnswersRequest](./search-core.answersrequest.md) | |
+| [Address](./search-core.address.md) | An interface with address fields to use in [BaseFieldValueDirectAnswer.value](./search-core.basefieldvaluedirectanswer.value.md). |
+| [AddressDirectAnswer](./search-core.addressdirectanswer.md) | A [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md) interface with 'address' field type. |
+| [AndroidAppUrlDirectAnswer](./search-core.androidappurldirectanswer.md) | A direct answer for an android app url field. |
| [AppliedQueryFilter](./search-core.appliedqueryfilter.md) | A filter that the Search API applied to the search. |
| [AutocompleteResponse](./search-core.autocompleteresponse.md) | The response of a universal or vertical autocomplete request. |
| [AutocompleteResult](./search-core.autocompleteresult.md) | An autocomplete suggestion. |
| [AutocompleteService](./search-core.autocompleteservice.md) | A service for autocomplete requests. |
-| [BaseAnswersConfig](./search-core.baseanswersconfig.md) | |
+| [BaseFeaturedSnippetDirectAnswer](./search-core.basefeaturedsnippetdirectanswer.md) | A direct answer which was found within a document. |
+| [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md) | A direct answer where the answer came from a field from the knowledge graph. |
| [BaseSearchConfig](./search-core.basesearchconfig.md) | The base configuration options for [SearchCore](./search-core.searchcore.md). |
| [ClientSDKHeaderValues](./search-core.clientsdkheadervalues.md) | Additional agents and their versions used to create the Search experience. The information for these agents is added to the Client-SDK HTTP header along with that of the ANSWERS\_CORE agent. |
-| [CombinedFilter](./search-core.combinedfilter.md) | Represents multiple filters that will be combined to refine results. |
+| [ComplexURL](./search-core.complexurl.md) | The shape of a [BuiltInFieldType.ComplexURL](./search-core.builtinfieldtype.md) DirectAnswer value |
+| [ComplexUrlDirectAnswer](./search-core.complexurldirectanswer.md) | A direct answer for a complex url field. |
+| [ConjunctionStaticFilter](./search-core.conjunctionstaticfilter.md) | A static filter composed by combining other static filters with the logical AND operator. |
+| [DayHour](./search-core.dayhour.md) | An interface for a day's hours to use in [BaseFieldValueDirectAnswer.value](./search-core.basefieldvaluedirectanswer.value.md). |
+| [DecimalDirectAnswer](./search-core.decimaldirectanswer.md) | A direct answer for a decimal field, which is a number represented using a string. |
| [DirectAnswer](./search-core.directanswer.md) | A direct answer to a search. |
+| [DisjunctionStaticFilter](./search-core.disjunctionstaticfilter.md) | A static filter composed by combining filters with the logical OR operator. The combined filters can either be field value filters or other disjunction filters. |
| [DisplayableFacet](./search-core.displayablefacet.md) | A [Facet](./search-core.facet.md) which contains extra fields meant to be displayed to the end user. |
| [DisplayableFacetOption](./search-core.displayablefacetoption.md) | A [FacetOption](./search-core.facetoption.md) with extra data meant to be displayed to the end user. |
+| [EmailDirectAnswer](./search-core.emaildirectanswer.md) | A [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md) interface with 'email' field type. |
| [Endpoints](./search-core.endpoints.md) | Overrides for the URLs which are used when making requests to the Search API. |
+| [FacebookUrlDirectAnswer](./search-core.facebookurldirectanswer.md) | A direct answer for a facebook url field. |
| [Facet](./search-core.facet.md) | Represents dynamic filter options for the Search API. |
| [FacetOption](./search-core.facetoption.md) | A filter associated with the facet. |
| [FailedVertical](./search-core.failedvertical.md) | Error information from when a vertical fails to return results. |
-| [FeaturedSnippetDirectAnswer](./search-core.featuredsnippetdirectanswer.md) | A direct answer which was found within a document. |
-| [FieldValueDirectAnswer](./search-core.fieldvaluedirectanswer.md) | A direct answer where the answer came from a field from the knowledge graph. |
-| [Filter](./search-core.filter.md) | Represents a filter which compares values to a single field. |
+| [FieldValueFilter](./search-core.fieldvaluefilter.md) | Represents a filter which compares values to a single field. |
+| [FieldValueStaticFilter](./search-core.fieldvaluestaticfilter.md) | A [FieldValueFilter](./search-core.fieldvaluefilter.md) with the kind of filter specified to discriminate between static filter types. |
| [FilterSearchRequest](./search-core.filtersearchrequest.md) | Options for a filtersearch request. |
| [FilterSearchResponse](./search-core.filtersearchresponse.md) | The response of a filtersearch request. |
| [HighlightedValue](./search-core.highlightedvalue.md) | A field value and its substring matches as emphasized by the Search API. |
+| [HolidayHours](./search-core.holidayhours.md) | An interface for holiday hours to use in [BaseFieldValueDirectAnswer.value](./search-core.basefieldvaluedirectanswer.value.md). |
+| [Hours](./search-core.hours.md) | An interface for hours fields to use in [BaseFieldValueDirectAnswer.value](./search-core.basefieldvaluedirectanswer.value.md). |
+| [HoursDirectAnswer](./search-core.hoursdirectanswer.md) | A [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md) interface with 'hours' field type. |
+| [InstagramHandleDirectAnswer](./search-core.instagramhandledirectanswer.md) | A direct answer for an instagram handle field. |
+| [IntegerDirectAnswer](./search-core.integerdirectanswer.md) | A direct answer for an integer field. |
+| [Interval](./search-core.interval.md) | An interface for a time interval to use in [BaseFieldValueDirectAnswer.value](./search-core.basefieldvaluedirectanswer.value.md). |
+| [IosAppUrlDirectAnswer](./search-core.iosappurldirectanswer.md) | A direct answer for an iOS app url field. |
| [LatLong](./search-core.latlong.md) | The latitude and longitude of the user making the request. Used to bias the results. |
| [LocationBias](./search-core.locationbias.md) | Information about the user's location. |
| [LocationBoundingBox](./search-core.locationboundingbox.md) | Location boundaries for a filter with "Place" for its [AppliedQueryFilterType](./search-core.appliedqueryfiltertype.md). (e.g. boundary for a locality or region specific location filter) |
| [LocationFilterDetails](./search-core.locationfilterdetails.md) | Additional details relevant to the filter with "PLACE" for its [AppliedQueryFilterType](./search-core.appliedqueryfiltertype.md). |
| [LowerNumberRangeLimit](./search-core.lowernumberrangelimit.md) | The start limit of [NumberRangeValue](./search-core.numberrangevalue.md). |
+| [MultiLineTextSnippetDirectAnswer](./search-core.multilinetextsnippetdirectanswer.md) | A [BaseFeaturedSnippetDirectAnswer](./search-core.basefeaturedsnippetdirectanswer.md) with 'multi\_line\_text' field type. |
| [NearFilterValue](./search-core.nearfiltervalue.md) | A filter value for a filter with a $near [Matcher](./search-core.matcher.md). |
| [NumberRangeValue](./search-core.numberrangevalue.md) | A filter value for a filter with a $between [Matcher](./search-core.matcher.md). |
+| [PhoneDirectAnswer](./search-core.phonedirectanswer.md) | A [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md) interface with phone value. |
| [QueryRulesActionsData](./search-core.queryrulesactionsdata.md) | Data returned from the Search query rules system. |
| [QuestionSubmissionRequest](./search-core.questionsubmissionrequest.md) | Options for a QuestionSubmission request. |
| [QuestionSubmissionResponse](./search-core.questionsubmissionresponse.md) | A representation of a question submission response. |
| [QuestionSubmissionService](./search-core.questionsubmissionservice.md) | Submits a custom question to the Search API. |
| [Result](./search-core.result.md) | An individual search result. |
+| [RichTextDirectAnswer](./search-core.richtextdirectanswer.md) | A direct answer for a rich text field. |
+| [RichTextSnippetDirectAnswer](./search-core.richtextsnippetdirectanswer.md) | A [BaseFeaturedSnippetDirectAnswer](./search-core.basefeaturedsnippetdirectanswer.md) with 'rich\_text' field type. "value" field is omitted for featured snippet direct answer of this field type. |
| [SearchConfigWithApiKey](./search-core.searchconfigwithapikey.md) | Configuration options for [SearchCore](./search-core.searchcore.md), which includes the options from [BaseSearchConfig](./search-core.basesearchconfig.md), but requires apiKey. |
| [SearchConfigWithToken](./search-core.searchconfigwithtoken.md) | Configuration options for [SearchCore](./search-core.searchcore.md), which includes the options from [BaseSearchConfig](./search-core.basesearchconfig.md), but requires token. |
| [SearchParameterField](./search-core.searchparameterfield.md) | Indicates which entity field to perform the autocomplete request on. |
@@ -86,11 +103,15 @@
| [Snippet](./search-core.snippet.md) | The section of text where a [FeaturedSnippetDirectAnswer](./search-core.featuredsnippetdirectanswer.md) was found. |
| [SortBy](./search-core.sortby.md) | Represents a criterion that can be used to sort results. |
| [SpellCheck](./search-core.spellcheck.md) | A spellcheck response from a search query. |
+| [TextDirectAnswer](./search-core.textdirectanswer.md) | A direct answer whose source is a string or string list field in the knowledge graph. |
+| [TwitterHandleDirectAnswer](./search-core.twitterhandledirectanswer.md) | A direct answer for an twitter handle field. |
| [UniversalAutocompleteRequest](./search-core.universalautocompleterequest.md) | Options for a universal autocomplete request. |
| [UniversalLimit](./search-core.universallimit.md) | The maximum limit of results per vertical. Each limit can be set from 1-50, inclusive. |
| [UniversalSearchRequest](./search-core.universalsearchrequest.md) | Options which can be specified for a universal search. |
| [UniversalSearchResponse](./search-core.universalsearchresponse.md) | A representation of a response from a universal search. |
+| [UnknownFieldValueDirectAnswer](./search-core.unknownfieldvaluedirectanswer.md) | A [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md) with a field type outside of [BuiltInFieldType](./search-core.builtinfieldtype.md). |
| [UpperNumberRangeLimit](./search-core.uppernumberrangelimit.md) | The end limit of [NumberRangeValue](./search-core.numberrangevalue.md). |
+| [UrlDirectAnswer](./search-core.urldirectanswer.md) | A direct answer for a simple url field. |
| [VerticalAutocompleteRequest](./search-core.verticalautocompleterequest.md) | Options for a vertial autocomplete request. |
| [VerticalResults](./search-core.verticalresults.md) | Represents results from a search vertical. |
| [VerticalSearchRequest](./search-core.verticalsearchrequest.md) | Options which can be specified for a vertical search. |
@@ -107,8 +128,11 @@
| Type Alias | Description |
| --- | --- |
-| [AnswersConfig](./search-core.answersconfig.md) | |
| [Context](./search-core.context.md) | Used to trigger Search [Query Rules](https://hitchhikers.yext.com/tracks/answers-advanced/ans302-query-rules/). |
+| [EnumOrLiteral](./search-core.enumorliteral.md) | Produces a union type from the enum passed as a generic which consists of the enum values and the string literals of the enum. |
+| [FeaturedSnippetDirectAnswer](./search-core.featuredsnippetdirectanswer.md) | All possible built-in [BaseFeaturedSnippetDirectAnswer](./search-core.basefeaturedsnippetdirectanswer.md) interfaces. |
+| [FieldValueDirectAnswer](./search-core.fieldvaluedirectanswer.md) | Possible built-in and custom [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md) interfaces. |
| [HighlightedFields](./search-core.highlightedfields.md) | A mapping of fields to the values emphasized by the Search API. |
| [SearchConfig](./search-core.searchconfig.md) | The main configuration options for [SearchCore](./search-core.searchcore.md). For a full description of the options, see [BaseSearchConfig](./search-core.basesearchconfig.md). The config requires either an apiKey or a token. |
+| [StaticFilter](./search-core.staticfilter.md) | Represents a static filter that will be used to refine results. |
diff --git a/docs/search-core.multilinetextsnippetdirectanswer.fieldtype.md b/docs/search-core.multilinetextsnippetdirectanswer.fieldtype.md
new file mode 100644
index 00000000..cd86822f
--- /dev/null
+++ b/docs/search-core.multilinetextsnippetdirectanswer.fieldtype.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [MultiLineTextSnippetDirectAnswer](./search-core.multilinetextsnippetdirectanswer.md) > [fieldType](./search-core.multilinetextsnippetdirectanswer.fieldtype.md)
+
+## MultiLineTextSnippetDirectAnswer.fieldType property
+
+The field type of the direct answer.
+
+Signature:
+
+```typescript
+fieldType: EnumOrLiteral;
+```
diff --git a/docs/search-core.multilinetextsnippetdirectanswer.md b/docs/search-core.multilinetextsnippetdirectanswer.md
new file mode 100644
index 00000000..dbe3bc75
--- /dev/null
+++ b/docs/search-core.multilinetextsnippetdirectanswer.md
@@ -0,0 +1,22 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [MultiLineTextSnippetDirectAnswer](./search-core.multilinetextsnippetdirectanswer.md)
+
+## MultiLineTextSnippetDirectAnswer interface
+
+A [BaseFeaturedSnippetDirectAnswer](./search-core.basefeaturedsnippetdirectanswer.md) with 'multi\_line\_text' field type.
+
+Signature:
+
+```typescript
+export interface MultiLineTextSnippetDirectAnswer extends BaseFeaturedSnippetDirectAnswer
+```
+Extends: [BaseFeaturedSnippetDirectAnswer](./search-core.basefeaturedsnippetdirectanswer.md)<string>
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [fieldType](./search-core.multilinetextsnippetdirectanswer.fieldtype.md) | [EnumOrLiteral](./search-core.enumorliteral.md)<[BuiltInFieldType.MultiLineText](./search-core.builtinfieldtype.md)> | The field type of the direct answer. |
+| [value](./search-core.multilinetextsnippetdirectanswer.value.md) | string | The value of the direct answer. |
+
diff --git a/docs/search-core.multilinetextsnippetdirectanswer.value.md b/docs/search-core.multilinetextsnippetdirectanswer.value.md
new file mode 100644
index 00000000..8184b639
--- /dev/null
+++ b/docs/search-core.multilinetextsnippetdirectanswer.value.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [MultiLineTextSnippetDirectAnswer](./search-core.multilinetextsnippetdirectanswer.md) > [value](./search-core.multilinetextsnippetdirectanswer.value.md)
+
+## MultiLineTextSnippetDirectAnswer.value property
+
+The value of the direct answer.
+
+Signature:
+
+```typescript
+value: string;
+```
diff --git a/docs/search-core.phonedirectanswer.fieldtype.md b/docs/search-core.phonedirectanswer.fieldtype.md
new file mode 100644
index 00000000..e342ab59
--- /dev/null
+++ b/docs/search-core.phonedirectanswer.fieldtype.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [PhoneDirectAnswer](./search-core.phonedirectanswer.md) > [fieldType](./search-core.phonedirectanswer.fieldtype.md)
+
+## PhoneDirectAnswer.fieldType property
+
+Signature:
+
+```typescript
+fieldType: BuiltInFieldType.Phone;
+```
diff --git a/docs/search-core.phonedirectanswer.md b/docs/search-core.phonedirectanswer.md
new file mode 100644
index 00000000..dc504094
--- /dev/null
+++ b/docs/search-core.phonedirectanswer.md
@@ -0,0 +1,21 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [PhoneDirectAnswer](./search-core.phonedirectanswer.md)
+
+## PhoneDirectAnswer interface
+
+A [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md) interface with phone value.
+
+Signature:
+
+```typescript
+export interface PhoneDirectAnswer extends BaseFieldValueDirectAnswer
+```
+Extends: [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md)<string>
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [fieldType](./search-core.phonedirectanswer.fieldtype.md) | [BuiltInFieldType.Phone](./search-core.builtinfieldtype.md) | |
+
diff --git a/docs/search-core.richtextdirectanswer.fieldtype.md b/docs/search-core.richtextdirectanswer.fieldtype.md
new file mode 100644
index 00000000..2a6ab44c
--- /dev/null
+++ b/docs/search-core.richtextdirectanswer.fieldtype.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [RichTextDirectAnswer](./search-core.richtextdirectanswer.md) > [fieldType](./search-core.richtextdirectanswer.fieldtype.md)
+
+## RichTextDirectAnswer.fieldType property
+
+Signature:
+
+```typescript
+fieldType: EnumOrLiteral;
+```
diff --git a/docs/search-core.richtextdirectanswer.md b/docs/search-core.richtextdirectanswer.md
new file mode 100644
index 00000000..1460dcfb
--- /dev/null
+++ b/docs/search-core.richtextdirectanswer.md
@@ -0,0 +1,21 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [RichTextDirectAnswer](./search-core.richtextdirectanswer.md)
+
+## RichTextDirectAnswer interface
+
+A direct answer for a rich text field.
+
+Signature:
+
+```typescript
+export interface RichTextDirectAnswer extends BaseFieldValueDirectAnswer
+```
+Extends: [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md)<string \| string\[\]>
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [fieldType](./search-core.richtextdirectanswer.fieldtype.md) | [EnumOrLiteral](./search-core.enumorliteral.md)<[BuiltInFieldType.RichText](./search-core.builtinfieldtype.md)> | |
+
diff --git a/docs/search-core.featuredsnippetdirectanswer.fieldtype.md b/docs/search-core.richtextsnippetdirectanswer.fieldtype.md
similarity index 50%
rename from docs/search-core.featuredsnippetdirectanswer.fieldtype.md
rename to docs/search-core.richtextsnippetdirectanswer.fieldtype.md
index 1a5e64a0..42d81d8d 100644
--- a/docs/search-core.featuredsnippetdirectanswer.fieldtype.md
+++ b/docs/search-core.richtextsnippetdirectanswer.fieldtype.md
@@ -1,13 +1,13 @@
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [FeaturedSnippetDirectAnswer](./search-core.featuredsnippetdirectanswer.md) > [fieldType](./search-core.featuredsnippetdirectanswer.fieldtype.md)
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [RichTextSnippetDirectAnswer](./search-core.richtextsnippetdirectanswer.md) > [fieldType](./search-core.richtextsnippetdirectanswer.fieldtype.md)
-## FeaturedSnippetDirectAnswer.fieldType property
+## RichTextSnippetDirectAnswer.fieldType property
The field type of the direct answer.
Signature:
```typescript
-fieldType: string;
+fieldType: EnumOrLiteral;
```
diff --git a/docs/search-core.richtextsnippetdirectanswer.md b/docs/search-core.richtextsnippetdirectanswer.md
new file mode 100644
index 00000000..231fb466
--- /dev/null
+++ b/docs/search-core.richtextsnippetdirectanswer.md
@@ -0,0 +1,21 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [RichTextSnippetDirectAnswer](./search-core.richtextsnippetdirectanswer.md)
+
+## RichTextSnippetDirectAnswer interface
+
+A [BaseFeaturedSnippetDirectAnswer](./search-core.basefeaturedsnippetdirectanswer.md) with 'rich\_text' field type. "value" field is omitted for featured snippet direct answer of this field type.
+
+Signature:
+
+```typescript
+export interface RichTextSnippetDirectAnswer extends Omit, 'value'>
+```
+Extends: Omit<[BaseFeaturedSnippetDirectAnswer](./search-core.basefeaturedsnippetdirectanswer.md)<string>, 'value'>
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [fieldType](./search-core.richtextsnippetdirectanswer.fieldtype.md) | [EnumOrLiteral](./search-core.enumorliteral.md)<[BuiltInFieldType.RichText](./search-core.builtinfieldtype.md)> | The field type of the direct answer. |
+
diff --git a/docs/search-core.snippet.matchedsubstrings.md b/docs/search-core.snippet.matchedsubstrings.md
index 7a3945f9..983a7f15 100644
--- a/docs/search-core.snippet.matchedsubstrings.md
+++ b/docs/search-core.snippet.matchedsubstrings.md
@@ -4,7 +4,7 @@
## Snippet.matchedSubstrings property
-The locations in the document text of the [FeaturedSnippetDirectAnswer.value](./search-core.featuredsnippetdirectanswer.value.md)
+The locations in the document text of the [DirectAnswer.value](./search-core.directanswer.value.md)
Signature:
diff --git a/docs/search-core.snippet.md b/docs/search-core.snippet.md
index 50692ffc..35d1cf84 100644
--- a/docs/search-core.snippet.md
+++ b/docs/search-core.snippet.md
@@ -16,6 +16,6 @@ export interface Snippet
| Property | Type | Description |
| --- | --- | --- |
-| [matchedSubstrings](./search-core.snippet.matchedsubstrings.md) | { offset: number; length: number; }\[\] | The locations in the document text of the [FeaturedSnippetDirectAnswer.value](./search-core.featuredsnippetdirectanswer.value.md) |
+| [matchedSubstrings](./search-core.snippet.matchedsubstrings.md) | { offset: number; length: number; }\[\] | The locations in the document text of the [DirectAnswer.value](./search-core.directanswer.value.md) |
| [value](./search-core.snippet.value.md) | string | The snippet's body of text |
diff --git a/docs/search-core.staticfilter.md b/docs/search-core.staticfilter.md
new file mode 100644
index 00000000..757a6a6d
--- /dev/null
+++ b/docs/search-core.staticfilter.md
@@ -0,0 +1,15 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [StaticFilter](./search-core.staticfilter.md)
+
+## StaticFilter type
+
+Represents a static filter that will be used to refine results.
+
+Signature:
+
+```typescript
+export declare type StaticFilter = FieldValueStaticFilter | DisjunctionStaticFilter | ConjunctionStaticFilter;
+```
+References: [FieldValueStaticFilter](./search-core.fieldvaluestaticfilter.md), [DisjunctionStaticFilter](./search-core.disjunctionstaticfilter.md), [ConjunctionStaticFilter](./search-core.conjunctionstaticfilter.md)
+
diff --git a/docs/search-core.textdirectanswer.fieldtype.md b/docs/search-core.textdirectanswer.fieldtype.md
new file mode 100644
index 00000000..ceb70d7e
--- /dev/null
+++ b/docs/search-core.textdirectanswer.fieldtype.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [TextDirectAnswer](./search-core.textdirectanswer.md) > [fieldType](./search-core.textdirectanswer.fieldtype.md)
+
+## TextDirectAnswer.fieldType property
+
+Signature:
+
+```typescript
+fieldType: EnumOrLiteral;
+```
diff --git a/docs/search-core.textdirectanswer.md b/docs/search-core.textdirectanswer.md
new file mode 100644
index 00000000..206bc73d
--- /dev/null
+++ b/docs/search-core.textdirectanswer.md
@@ -0,0 +1,21 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [TextDirectAnswer](./search-core.textdirectanswer.md)
+
+## TextDirectAnswer interface
+
+A direct answer whose source is a string or string list field in the knowledge graph.
+
+Signature:
+
+```typescript
+export interface TextDirectAnswer extends BaseFieldValueDirectAnswer
+```
+Extends: [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md)<string \| string\[\]>
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [fieldType](./search-core.textdirectanswer.fieldtype.md) | [EnumOrLiteral](./search-core.enumorliteral.md)<[BuiltInFieldType.SingleLineText](./search-core.builtinfieldtype.md) \| [BuiltInFieldType.MultiLineText](./search-core.builtinfieldtype.md)> | |
+
diff --git a/docs/search-core.twitterhandledirectanswer.fieldtype.md b/docs/search-core.twitterhandledirectanswer.fieldtype.md
new file mode 100644
index 00000000..6bc84554
--- /dev/null
+++ b/docs/search-core.twitterhandledirectanswer.fieldtype.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [TwitterHandleDirectAnswer](./search-core.twitterhandledirectanswer.md) > [fieldType](./search-core.twitterhandledirectanswer.fieldtype.md)
+
+## TwitterHandleDirectAnswer.fieldType property
+
+Signature:
+
+```typescript
+fieldType: EnumOrLiteral;
+```
diff --git a/docs/search-core.twitterhandledirectanswer.md b/docs/search-core.twitterhandledirectanswer.md
new file mode 100644
index 00000000..c8f1750b
--- /dev/null
+++ b/docs/search-core.twitterhandledirectanswer.md
@@ -0,0 +1,21 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [TwitterHandleDirectAnswer](./search-core.twitterhandledirectanswer.md)
+
+## TwitterHandleDirectAnswer interface
+
+A direct answer for an twitter handle field.
+
+Signature:
+
+```typescript
+export interface TwitterHandleDirectAnswer extends BaseFieldValueDirectAnswer
+```
+Extends: [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md)<string>
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [fieldType](./search-core.twitterhandledirectanswer.fieldtype.md) | [EnumOrLiteral](./search-core.enumorliteral.md)<[BuiltInFieldType.TwitterHandle](./search-core.builtinfieldtype.md)> | |
+
diff --git a/docs/search-core.universalsearchrequest.referrerpageurl.md b/docs/search-core.universalsearchrequest.referrerpageurl.md
index ae9428ee..b2185ad0 100644
--- a/docs/search-core.universalsearchrequest.referrerpageurl.md
+++ b/docs/search-core.universalsearchrequest.referrerpageurl.md
@@ -14,5 +14,5 @@ referrerPageUrl?: string;
## Example
-If a user is on https://www.yext.com/ and navigates to https://www.yext.com/answers and perform a search, the referrerPageUrl would be https://www.yext.com/.
+If a user is on https://www.yext.com/ and navigates to https://search.yext.com/ and perform a search, the referrerPageUrl would be https://www.yext.com/.
diff --git a/docs/search-core.unknownfieldvaluedirectanswer.fieldtype.md b/docs/search-core.unknownfieldvaluedirectanswer.fieldtype.md
new file mode 100644
index 00000000..291ac4f3
--- /dev/null
+++ b/docs/search-core.unknownfieldvaluedirectanswer.fieldtype.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [UnknownFieldValueDirectAnswer](./search-core.unknownfieldvaluedirectanswer.md) > [fieldType](./search-core.unknownfieldvaluedirectanswer.fieldtype.md)
+
+## UnknownFieldValueDirectAnswer.fieldType property
+
+The field type of the direct answer.
+
+Signature:
+
+```typescript
+fieldType: 'unknown';
+```
diff --git a/docs/search-core.unknownfieldvaluedirectanswer.md b/docs/search-core.unknownfieldvaluedirectanswer.md
new file mode 100644
index 00000000..351f27f5
--- /dev/null
+++ b/docs/search-core.unknownfieldvaluedirectanswer.md
@@ -0,0 +1,21 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [UnknownFieldValueDirectAnswer](./search-core.unknownfieldvaluedirectanswer.md)
+
+## UnknownFieldValueDirectAnswer interface
+
+A [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md) with a field type outside of [BuiltInFieldType](./search-core.builtinfieldtype.md).
+
+Signature:
+
+```typescript
+export interface UnknownFieldValueDirectAnswer extends BaseFieldValueDirectAnswer
+```
+Extends: [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md)<T>
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [fieldType](./search-core.unknownfieldvaluedirectanswer.fieldtype.md) | 'unknown' | The field type of the direct answer. |
+
diff --git a/docs/search-core.urldirectanswer.fieldtype.md b/docs/search-core.urldirectanswer.fieldtype.md
new file mode 100644
index 00000000..b07732c8
--- /dev/null
+++ b/docs/search-core.urldirectanswer.fieldtype.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [UrlDirectAnswer](./search-core.urldirectanswer.md) > [fieldType](./search-core.urldirectanswer.fieldtype.md)
+
+## UrlDirectAnswer.fieldType property
+
+Signature:
+
+```typescript
+fieldType: EnumOrLiteral;
+```
diff --git a/docs/search-core.urldirectanswer.md b/docs/search-core.urldirectanswer.md
new file mode 100644
index 00000000..b2f3539f
--- /dev/null
+++ b/docs/search-core.urldirectanswer.md
@@ -0,0 +1,21 @@
+
+
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [UrlDirectAnswer](./search-core.urldirectanswer.md)
+
+## UrlDirectAnswer interface
+
+A direct answer for a simple url field.
+
+Signature:
+
+```typescript
+export interface UrlDirectAnswer extends BaseFieldValueDirectAnswer
+```
+Extends: [BaseFieldValueDirectAnswer](./search-core.basefieldvaluedirectanswer.md)<string \| string\[\]>
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [fieldType](./search-core.urldirectanswer.fieldtype.md) | [EnumOrLiteral](./search-core.enumorliteral.md)<[BuiltInFieldType.URL](./search-core.builtinfieldtype.md)> | |
+
diff --git a/docs/search-core.verticalsearchrequest.md b/docs/search-core.verticalsearchrequest.md
index 5a7d6959..0be58e4d 100644
--- a/docs/search-core.verticalsearchrequest.md
+++ b/docs/search-core.verticalsearchrequest.md
@@ -33,6 +33,6 @@ export interface VerticalSearchRequest extends SearchRequest
| [sessionTrackingEnabled?](./search-core.verticalsearchrequest.sessiontrackingenabled.md) | boolean | (Optional) Enables session tracking. |
| [skipSpellCheck?](./search-core.verticalsearchrequest.skipspellcheck.md) | boolean | (Optional) Skips spell checking if true. |
| [sortBys?](./search-core.verticalsearchrequest.sortbys.md) | [SortBy](./search-core.sortby.md)\[\] | (Optional) Determines how results are sorted. \* |
-| [staticFilters?](./search-core.verticalsearchrequest.staticfilters.md) | [CombinedFilter](./search-core.combinedfilter.md) \| [Filter](./search-core.filter.md) | (Optional) The static filters to apply to the search. |
+| [staticFilter?](./search-core.verticalsearchrequest.staticfilter.md) | [StaticFilter](./search-core.staticfilter.md) | (Optional) The static filter to apply to the search. |
| [verticalKey](./search-core.verticalsearchrequest.verticalkey.md) | string | The key associated with the vertical. |
diff --git a/docs/search-core.verticalsearchrequest.staticfilters.md b/docs/search-core.verticalsearchrequest.staticfilter.md
similarity index 52%
rename from docs/search-core.verticalsearchrequest.staticfilters.md
rename to docs/search-core.verticalsearchrequest.staticfilter.md
index 4d42211f..2cd74f11 100644
--- a/docs/search-core.verticalsearchrequest.staticfilters.md
+++ b/docs/search-core.verticalsearchrequest.staticfilter.md
@@ -1,13 +1,13 @@
-[Home](./index.md) > [@yext/search-core](./search-core.md) > [VerticalSearchRequest](./search-core.verticalsearchrequest.md) > [staticFilters](./search-core.verticalsearchrequest.staticfilters.md)
+[Home](./index.md) > [@yext/search-core](./search-core.md) > [VerticalSearchRequest](./search-core.verticalsearchrequest.md) > [staticFilter](./search-core.verticalsearchrequest.staticfilter.md)
-## VerticalSearchRequest.staticFilters property
+## VerticalSearchRequest.staticFilter property
-The static filters to apply to the search.
+The static filter to apply to the search.
Signature:
```typescript
-staticFilters?: CombinedFilter | Filter;
+staticFilter?: StaticFilter;
```
diff --git a/etc/search-core.api.md b/etc/search-core.api.md
index b1830baf..1cbf0217 100644
--- a/etc/search-core.api.md
+++ b/etc/search-core.api.md
@@ -9,27 +9,38 @@ export interface AdditionalHttpHeaders {
'Client-SDK'?: ClientSDKHeaderValues;
}
-// @public @deprecated (undocumented)
-export type AnswersConfig = SearchConfig;
-
-// @public @deprecated (undocumented)
-export interface AnswersConfigWithApiKey extends SearchConfigWithApiKey {
-}
-
-// @public @deprecated (undocumented)
-export interface AnswersConfigWithToken extends SearchConfigWithToken {
-}
-
-// @public @deprecated (undocumented)
-export class AnswersCore extends SearchCore {
+// @public
+export interface Address {
+ // (undocumented)
+ city?: string;
+ // (undocumented)
+ countryCode: string;
+ // (undocumented)
+ extraDescription?: string;
+ // (undocumented)
+ line1?: string;
+ // (undocumented)
+ line2?: string;
+ // (undocumented)
+ line3?: string;
+ // (undocumented)
+ postalCode?: string;
+ // (undocumented)
+ region?: string;
+ // (undocumented)
+ sublocality?: string;
}
-// @public @deprecated (undocumented)
-export interface AnswersError extends SearchError {
+// @public
+export interface AddressDirectAnswer extends BaseFieldValueDirectAnswer {
+ // (undocumented)
+ fieldType: EnumOrLiteral;
}
-// @public @deprecated (undocumented)
-export interface AnswersRequest extends SearchRequest {
+// @public
+export interface AndroidAppUrlDirectAnswer extends BaseFieldValueDirectAnswer {
+ // (undocumented)
+ fieldType: EnumOrLiteral;
}
// @public
@@ -37,7 +48,7 @@ export interface AppliedQueryFilter {
details?: LocationFilterDetails;
displayKey: string;
displayValue: string;
- filter: Filter;
+ filter: FieldValueFilter;
type: AppliedQueryFilterType;
}
@@ -58,7 +69,7 @@ export interface AutocompleteResponse {
// @public
export interface AutocompleteResult {
- filter?: Filter;
+ filter?: FieldValueFilter;
key?: string;
matchedSubstrings?: {
length: number;
@@ -76,13 +87,24 @@ export interface AutocompleteService {
verticalAutocomplete(request: VerticalAutocompleteRequest): Promise;
}
-// @public @deprecated (undocumented)
-export interface BaseAnswersConfig extends BaseSearchConfig {
+// @public
+export interface BaseFeaturedSnippetDirectAnswer extends DirectAnswer {
+ fieldType: EnumOrLiteral;
+ snippet: Snippet;
+ type: DirectAnswerType.FeaturedSnippet;
+}
+
+// @public
+export interface BaseFieldValueDirectAnswer extends DirectAnswer {
+ entityName: string;
+ fieldApiName: string;
+ fieldName: string;
+ type: DirectAnswerType.FieldValue;
+ value: T;
}
// @public
export interface BaseSearchConfig {
- // @alpha
additionalQueryParams?: {
[key: string]: string | number | boolean;
};
@@ -93,6 +115,42 @@ export interface BaseSearchConfig {
visitor?: Visitor;
}
+// @public
+export enum BuiltInFieldType {
+ // (undocumented)
+ Address = "address",
+ // (undocumented)
+ AndroidAppURL = "android_app_url",
+ // (undocumented)
+ ComplexURL = "complex_url",
+ // (undocumented)
+ Decimal = "decimal",
+ // (undocumented)
+ Email = "email",
+ // (undocumented)
+ FacebookURL = "facebook_url",
+ // (undocumented)
+ Hours = "hours",
+ // (undocumented)
+ InstagramHandle = "instagram_handle",
+ // (undocumented)
+ Integer = "integer",
+ // (undocumented)
+ IOSAppURL = "ios_app_url",
+ // (undocumented)
+ MultiLineText = "multi_line_text",
+ // (undocumented)
+ Phone = "phone",
+ // (undocumented)
+ RichText = "rich_text",
+ // (undocumented)
+ SingleLineText = "single_line_text",
+ // (undocumented)
+ TwitterHandle = "twitter_handle",
+ // (undocumented)
+ URL = "url"
+}
+
// @public
export interface ClientSDKHeaderValues {
[agent: string]: string | undefined;
@@ -100,20 +158,51 @@ export interface ClientSDKHeaderValues {
}
// @public
-export interface CombinedFilter {
- combinator: FilterCombinator;
- filters: (Filter | CombinedFilter)[];
+export interface ComplexURL {
+ // (undocumented)
+ displayUrl?: string;
+ // (undocumented)
+ preferDisplayUrl: boolean;
+ // (undocumented)
+ url: string;
+}
+
+// @public
+export interface ComplexUrlDirectAnswer extends BaseFieldValueDirectAnswer {
+ // (undocumented)
+ fieldType: EnumOrLiteral;
+}
+
+// @public
+export interface ConjunctionStaticFilter {
+ combinator: FilterCombinator.AND;
+ filters: StaticFilter[];
+ kind: 'conjunction';
}
// @public
export type Context = any;
// @public
-export interface DirectAnswer {
- fieldType: string;
+export interface DayHour {
+ // (undocumented)
+ isClosed?: boolean;
+ // (undocumented)
+ openIntervals?: Interval[];
+}
+
+// @public
+export interface DecimalDirectAnswer extends BaseFieldValueDirectAnswer {
+ // (undocumented)
+ fieldType: EnumOrLiteral;
+}
+
+// @public
+export interface DirectAnswer {
+ fieldType: EnumOrLiteral | 'unknown';
relatedResult: Result;
type: DirectAnswerType;
- value?: string;
+ value?: T;
verticalKey: string;
}
@@ -129,10 +218,16 @@ export enum Direction {
Descending = "DESC"
}
+// @public
+export interface DisjunctionStaticFilter {
+ combinator: FilterCombinator.OR;
+ filters: (DisjunctionStaticFilter | FieldValueStaticFilter)[];
+ kind: 'disjunction';
+}
+
// @public
export interface DisplayableFacet extends Facet {
displayName: string;
- fieldId: string;
options: DisplayableFacetOption[];
}
@@ -140,9 +235,13 @@ export interface DisplayableFacet extends Facet {
export interface DisplayableFacetOption extends FacetOption {
count: number;
displayName: string;
- matcher: Matcher;
selected: boolean;
- value: string | number | boolean | NumberRangeValue;
+}
+
+// @public
+export interface EmailDirectAnswer extends BaseFieldValueDirectAnswer {
+ // (undocumented)
+ fieldType: EnumOrLiteral;
}
// @public
@@ -163,6 +262,9 @@ export interface Endpoints {
verticalSearch?: string;
}
+// @public
+export type EnumOrLiteral = T | `${T}`;
+
// @public
export enum ErrorType {
BackendError = "BACKEND_ERROR",
@@ -171,6 +273,12 @@ export enum ErrorType {
Timeout = "TIMEOUT"
}
+// @public
+export interface FacebookUrlDirectAnswer extends BaseFieldValueDirectAnswer {
+ // (undocumented)
+ fieldType: EnumOrLiteral;
+}
+
// @public
export interface Facet {
fieldId: string;
@@ -178,9 +286,8 @@ export interface Facet {
}
// @public
-export interface FacetOption {
- matcher: Matcher;
- value: string | number | boolean | NumberRangeValue;
+export interface FacetOption extends Omit {
+ value: Exclude;
}
// @public
@@ -195,34 +302,23 @@ export interface FailedVertical {
}
// @public
-export interface FeaturedSnippetDirectAnswer extends DirectAnswer {
- fieldType: string;
- relatedResult: Result;
- snippet: Snippet;
- type: DirectAnswerType.FeaturedSnippet;
- value?: string;
- verticalKey: string;
-}
+export type FeaturedSnippetDirectAnswer = MultiLineTextSnippetDirectAnswer | RichTextSnippetDirectAnswer;
// @public
-export interface FieldValueDirectAnswer extends DirectAnswer {
- entityName: string;
- fieldApiName: string;
- fieldName: string;
- fieldType: string;
- relatedResult: Result;
- type: DirectAnswerType.FieldValue;
- value: string;
- verticalKey: string;
-}
+export type FieldValueDirectAnswer = UnknownFieldValueDirectAnswer | TextDirectAnswer | UrlDirectAnswer | RichTextDirectAnswer | DecimalDirectAnswer | FacebookUrlDirectAnswer | InstagramHandleDirectAnswer | TwitterHandleDirectAnswer | IosAppUrlDirectAnswer | AndroidAppUrlDirectAnswer | ComplexUrlDirectAnswer | IntegerDirectAnswer | PhoneDirectAnswer | EmailDirectAnswer | AddressDirectAnswer | HoursDirectAnswer;
// @public
-export interface Filter {
+export interface FieldValueFilter {
fieldId: string;
matcher: Matcher;
value: string | number | boolean | NearFilterValue | NumberRangeValue;
}
+// @public
+export interface FieldValueStaticFilter extends FieldValueFilter {
+ kind: 'fieldValue';
+}
+
// @public
export enum FilterCombinator {
AND = "$and",
@@ -231,7 +327,7 @@ export enum FilterCombinator {
// @public
export interface FilterSearchRequest extends SearchRequest {
- excluded?: Filter[];
+ excluded?: FieldValueFilter[];
fields: SearchParameterField[];
input: string;
sectioned: boolean;
@@ -264,6 +360,72 @@ export interface HighlightedValue {
value: string;
}
+// @public
+export interface HolidayHours {
+ // (undocumented)
+ date: string;
+ // (undocumented)
+ isClosed?: boolean;
+ // (undocumented)
+ isRegularHours?: boolean;
+ // (undocumented)
+ openIntervals?: Interval[];
+}
+
+// @public
+export interface Hours {
+ // (undocumented)
+ friday?: DayHour;
+ // (undocumented)
+ holidayHours?: HolidayHours[];
+ // (undocumented)
+ monday?: DayHour;
+ // (undocumented)
+ reopenDate?: string;
+ // (undocumented)
+ saturday?: DayHour;
+ // (undocumented)
+ sunday?: DayHour;
+ // (undocumented)
+ thursday?: DayHour;
+ // (undocumented)
+ tuesday?: DayHour;
+ // (undocumented)
+ wednesday?: DayHour;
+}
+
+// @public
+export interface HoursDirectAnswer extends BaseFieldValueDirectAnswer {
+ // (undocumented)
+ fieldType: EnumOrLiteral;
+}
+
+// @public
+export interface InstagramHandleDirectAnswer extends BaseFieldValueDirectAnswer {
+ // (undocumented)
+ fieldType: EnumOrLiteral;
+}
+
+// @public
+export interface IntegerDirectAnswer extends BaseFieldValueDirectAnswer {
+ // (undocumented)
+ fieldType: EnumOrLiteral;
+}
+
+// @public
+export interface Interval {
+ // (undocumented)
+ end?: string;
+ // (undocumented)
+ start?: string;
+}
+
+// @public
+export interface IosAppUrlDirectAnswer extends BaseFieldValueDirectAnswer {
+ // (undocumented)
+ fieldType: EnumOrLiteral;
+}
+
// @public
export interface LatLong {
latitude: number;
@@ -320,6 +482,12 @@ export enum Matcher {
NotEquals = "!$eq"
}
+// @public
+export interface MultiLineTextSnippetDirectAnswer extends BaseFeaturedSnippetDirectAnswer {
+ fieldType: EnumOrLiteral;
+ value: string;
+}
+
// @public
export interface NearFilterValue {
lat: number;
@@ -333,6 +501,12 @@ export interface NumberRangeValue {
start?: LowerNumberRangeLimit;
}
+// @public
+export interface PhoneDirectAnswer extends BaseFieldValueDirectAnswer {
+ // (undocumented)
+ fieldType: BuiltInFieldType.Phone;
+}
+
// @public
export function provideCore(config: SearchConfig): SearchCore;
@@ -395,6 +569,17 @@ export interface Result> {
source: Source;
}
+// @public
+export interface RichTextDirectAnswer extends BaseFieldValueDirectAnswer {
+ // (undocumented)
+ fieldType: EnumOrLiteral;
+}
+
+// @public
+export interface RichTextSnippetDirectAnswer extends Omit, 'value'> {
+ fieldType: EnumOrLiteral;
+}
+
// @public
export const SandboxEndpoints: Required;
@@ -507,6 +692,21 @@ export enum SpellCheckType {
Suggest = "SUGGEST"
}
+// @public
+export type StaticFilter = FieldValueStaticFilter | DisjunctionStaticFilter | ConjunctionStaticFilter;
+
+// @public
+export interface TextDirectAnswer extends BaseFieldValueDirectAnswer {
+ // (undocumented)
+ fieldType: EnumOrLiteral;
+}
+
+// @public
+export interface TwitterHandleDirectAnswer extends BaseFieldValueDirectAnswer {
+ // (undocumented)
+ fieldType: EnumOrLiteral;
+}
+
// @public
export interface UniversalAutocompleteRequest extends SearchRequest {
input: string;
@@ -547,12 +747,23 @@ export interface UniversalSearchResponse {
verticalResults: VerticalResults[];
}
+// @public
+export interface UnknownFieldValueDirectAnswer extends BaseFieldValueDirectAnswer {
+ fieldType: 'unknown';
+}
+
// @public
export interface UpperNumberRangeLimit {
matcher: Matcher.LessThan | Matcher.LessThanOrEqualTo;
value: number;
}
+// @public
+export interface UrlDirectAnswer extends BaseFieldValueDirectAnswer {
+ // (undocumented)
+ fieldType: EnumOrLiteral;
+}
+
// @public
export interface VerticalAutocompleteRequest extends SearchRequest {
input: string;
@@ -588,7 +799,7 @@ export interface VerticalSearchRequest extends SearchRequest {
sessionTrackingEnabled?: boolean;
skipSpellCheck?: boolean;
sortBys?: SortBy[];
- staticFilters?: CombinedFilter | Filter;
+ staticFilter?: StaticFilter;
verticalKey: string;
}
diff --git a/package-lock.json b/package-lock.json
index f133465e..940ed4b6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@yext/search-core",
- "version": "1.9.0",
+ "version": "2.0.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@yext/search-core",
- "version": "1.9.0",
+ "version": "2.0.0",
"license": "BSD-3-Clause",
"dependencies": {
"@babel/runtime-corejs3": "^7.12.5",
@@ -5810,9 +5810,9 @@
}
},
"node_modules/cli-spinners": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz",
- "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==",
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz",
+ "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==",
"dev": true,
"engines": {
"node": ">=6"
@@ -5844,7 +5844,7 @@
"node_modules/clone": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
- "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
"dev": true,
"engines": {
"node": ">=0.8"
@@ -6176,7 +6176,7 @@
"node_modules/defaults": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
- "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==",
"dev": true,
"dependencies": {
"clone": "^1.0.2"
@@ -6616,9 +6616,9 @@
}
},
"node_modules/eslint-config-prettier": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz",
- "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==",
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz",
+ "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==",
"dev": true,
"bin": {
"eslint-config-prettier": "bin/cli.js"
@@ -8611,9 +8611,9 @@
}
},
"node_modules/inquirer/node_modules/chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
@@ -14168,9 +14168,9 @@
}
},
"node_modules/rxjs": {
- "version": "6.6.6",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.6.tgz",
- "integrity": "sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg==",
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
"dev": true,
"dependencies": {
"tslib": "^1.9.0"
@@ -15439,7 +15439,7 @@
"node_modules/through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
"dev": true
},
"node_modules/timsort": {
@@ -16056,7 +16056,7 @@
"node_modules/wcwidth": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
- "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+ "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
"dev": true,
"dependencies": {
"defaults": "^1.0.3"
@@ -20830,9 +20830,9 @@
}
},
"cli-spinners": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz",
- "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==",
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz",
+ "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==",
"dev": true
},
"cli-width": {
@@ -20855,7 +20855,7 @@
"clone": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
- "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
"dev": true
},
"clone-deep": {
@@ -21127,7 +21127,7 @@
"defaults": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
- "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==",
"dev": true,
"requires": {
"clone": "^1.0.2"
@@ -21567,9 +21567,9 @@
}
},
"eslint-config-prettier": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz",
- "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==",
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz",
+ "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==",
"dev": true,
"requires": {}
},
@@ -22966,9 +22966,9 @@
}
},
"chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
@@ -27256,9 +27256,9 @@
}
},
"rxjs": {
- "version": "6.6.6",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.6.tgz",
- "integrity": "sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg==",
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
"dev": true,
"requires": {
"tslib": "^1.9.0"
@@ -28270,7 +28270,7 @@
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
"dev": true
},
"timsort": {
@@ -28749,7 +28749,7 @@
"wcwidth": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
- "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+ "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
"dev": true,
"requires": {
"defaults": "^1.0.3"
diff --git a/package.json b/package.json
index 14fdcc8b..476db98c 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@yext/search-core",
- "version": "1.9.0",
+ "version": "2.0.0",
"description": "Typescript Networking Library for the Yext Search API",
"main": "./dist/commonjs/src/index.js",
"module": "./dist/esm/src/index.js",
@@ -28,7 +28,7 @@
},
"scripts": {
"test": "npm run lint && jest",
- "lint": "eslint .",
+ "lint": "eslint . --max-warnings=0",
"tsc-cjs": "tsc -p tsconfig.cjs.json",
"tsc-esm": "tsc -p tsconfig.esm.json",
"tsc": "npm run tsc-cjs && npm run tsc-esm",
diff --git a/src/constants.ts b/src/constants.ts
index aa60d984..fed7d675 100644
--- a/src/constants.ts
+++ b/src/constants.ts
@@ -3,13 +3,13 @@ import { Endpoints } from './models/core/Endpoints';
export const defaultApiVersion = 20220511;
export const defaultEndpoints: Required = {
- universalSearch: 'https://liveapi.yext.com/v2/accounts/me/answers/query',
- verticalSearch: 'https://liveapi.yext.com/v2/accounts/me/answers/vertical/query',
+ universalSearch: 'https://liveapi.yext.com/v2/accounts/me/search/query',
+ verticalSearch: 'https://liveapi.yext.com/v2/accounts/me/search/vertical/query',
questionSubmission: 'https://liveapi.yext.com/v2/accounts/me/createQuestion',
status: 'https://answersstatus.pagescdn.com',
- universalAutocomplete: 'https://liveapi-cached.yext.com/v2/accounts/me/answers/autocomplete',
- verticalAutocomplete: 'https://liveapi-cached.yext.com/v2/accounts/me/answers/vertical/autocomplete',
- filterSearch: 'https://liveapi-cached.yext.com/v2/accounts/me/answers/filtersearch',
+ universalAutocomplete: 'https://liveapi-cached.yext.com/v2/accounts/me/search/autocomplete',
+ verticalAutocomplete: 'https://liveapi-cached.yext.com/v2/accounts/me/search/vertical/autocomplete',
+ filterSearch: 'https://liveapi-cached.yext.com/v2/accounts/me/search/filtersearch',
} as const;
/**
@@ -18,11 +18,11 @@ export const defaultEndpoints: Required = {
* @public
*/
export const SandboxEndpoints: Required = {
- universalSearch: 'https://liveapi-sandbox.yext.com/v2/accounts/me/answers/query',
- verticalSearch: 'https://liveapi-sandbox.yext.com/v2/accounts/me/answers/vertical/query',
+ universalSearch: 'https://liveapi-sandbox.yext.com/v2/accounts/me/search/query',
+ verticalSearch: 'https://liveapi-sandbox.yext.com/v2/accounts/me/search/vertical/query',
questionSubmission: 'https://liveapi-sandbox.yext.com/v2/accounts/me/createQuestion',
status: 'https://answersstatus.pagescdn.com',
- universalAutocomplete: 'https://liveapi-sandbox.yext.com/v2/accounts/me/answers/autocomplete',
- verticalAutocomplete: 'https://liveapi-sandbox.yext.com/v2/accounts/me/answers/vertical/autocomplete',
- filterSearch: 'https://liveapi-sandbox.yext.com/v2/accounts/me/answers/filtersearch',
+ universalAutocomplete: 'https://liveapi-sandbox.yext.com/v2/accounts/me/search/autocomplete',
+ verticalAutocomplete: 'https://liveapi-sandbox.yext.com/v2/accounts/me/search/vertical/autocomplete',
+ filterSearch: 'https://liveapi-sandbox.yext.com/v2/accounts/me/search/filtersearch',
} as const;
\ No newline at end of file
diff --git a/src/deprecated.ts b/src/deprecated.ts
deleted file mode 100644
index 7b965448..00000000
--- a/src/deprecated.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { SearchCore } from './SearchCore';
-
-/**
- * @deprecated AnswersCore is deprecated and has been replaced by {@link SearchCore}
- * @public
- */
-export class AnswersCore extends SearchCore{}
\ No newline at end of file
diff --git a/src/index.ts b/src/index.ts
index 8862474c..fcff8109 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,6 +1,3 @@
-// deprecated symbols
-export { AnswersCore } from './deprecated';
-
// main symbols
export { SearchCore } from './SearchCore';
export { provideCore } from './provideCore';
diff --git a/src/infra/SearchServiceImpl.ts b/src/infra/SearchServiceImpl.ts
index 2f0411d2..0355e8b7 100644
--- a/src/infra/SearchServiceImpl.ts
+++ b/src/infra/SearchServiceImpl.ts
@@ -150,7 +150,7 @@ export class SearchServiceImpl implements SearchService {
input: request.query,
location: this.stringifyLatLong(request.location),
verticalKey: request.verticalKey,
- filters: request.staticFilters && serializeStaticFilters(request.staticFilters),
+ filters: request.staticFilter && serializeStaticFilters(request.staticFilter),
limit: request.limit,
offset: request.offset,
retrieveFacets: request.retrieveFacets,
diff --git a/src/models/autocompleteservice/AutocompleteRequest.ts b/src/models/autocompleteservice/AutocompleteRequest.ts
index 15a3e4db..c6c42959 100644
--- a/src/models/autocompleteservice/AutocompleteRequest.ts
+++ b/src/models/autocompleteservice/AutocompleteRequest.ts
@@ -1,5 +1,5 @@
import { SearchRequest } from '../core/SearchRequest';
-import { Filter } from '../searchservice/request/Filter';
+import { FieldValueFilter } from '../searchservice/request/FieldValueFilter';
/**
* Options for a universal autocomplete request.
@@ -41,10 +41,10 @@ export interface FilterSearchRequest extends SearchRequest {
verticalKey: string,
/** Determines whether or not the results of the {@link FilterSearchResponse} are separated by field. */
sectioned: boolean,
- /** An array of {@link SearchParameterField} */
+ /** An array of {@link SearchParameterField}. */
fields: SearchParameterField[],
- /** an array of filters that should be excluded from filter search results. */
- excluded?: Filter[]
+ /** An array of field value filters that should be excluded from filter search results. */
+ excluded?: FieldValueFilter[]
}
/**
diff --git a/src/models/autocompleteservice/AutocompleteResponse.ts b/src/models/autocompleteservice/AutocompleteResponse.ts
index 50b20498..bff6380e 100644
--- a/src/models/autocompleteservice/AutocompleteResponse.ts
+++ b/src/models/autocompleteservice/AutocompleteResponse.ts
@@ -1,4 +1,4 @@
-import { Filter } from '../searchservice/request/Filter';
+import { FieldValueFilter } from '../searchservice/request/FieldValueFilter';
import { SearchIntent } from '../searchservice/response/SearchIntent';
import { Result } from '../searchservice/response/Result';
@@ -63,7 +63,7 @@ export interface AutocompleteResult {
* @remarks
* This property is only defined for filtersearch.
*/
- filter?: Filter,
+ filter?: FieldValueFilter,
/**
* The fieldId which corresponds to the AutocompleteResult value.
*
diff --git a/src/models/core/SearchConfig.ts b/src/models/core/SearchConfig.ts
index 6a198725..ae6e2178 100644
--- a/src/models/core/SearchConfig.ts
+++ b/src/models/core/SearchConfig.ts
@@ -31,7 +31,7 @@ export interface BaseSearchConfig {
/**
* Additional query params added on to every request.
*
- * @alpha
+ * @public
*/
additionalQueryParams?: {
[key: string]: string | number | boolean
diff --git a/src/models/deprecated.ts b/src/models/deprecated.ts
deleted file mode 100644
index 839ed26a..00000000
--- a/src/models/deprecated.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-/* eslint-disable @typescript-eslint/no-empty-interface */
-import { SearchConfig } from './core/SearchConfig';
-import { BaseSearchConfig } from './core/SearchConfig';
-import { SearchConfigWithApiKey } from './core/SearchConfig';
-import { SearchConfigWithToken } from './core/SearchConfig';
-import { SearchError } from './searchapi/SearchError';
-import { SearchRequest } from './core/SearchRequest';
-
-/**
- * @deprecated AnswersConfig is deprecated and has been replaced by {@link SearchConfig}
- * @public
- */
-export type AnswersConfig = SearchConfig;
-
-/**
- * @deprecated BaseAnswersConfig is deprecated and has been replaced by {@link BaseSearchConfig}
- * @public
- */
-export interface BaseAnswersConfig extends BaseSearchConfig{}
-
-/**
- * @deprecated AnswersConfigWithApiKey is deprecated and has been replaced by {@link SearchConfigWithApiKey}
- * @public
- */
-export interface AnswersConfigWithApiKey extends SearchConfigWithApiKey{}
-
-/**
- * @deprecated AnswersConfigWithToken is deprecated and has been replaced by {@link SearchConfigWithToken}
- * @public
- */
-export interface AnswersConfigWithToken extends SearchConfigWithToken{}
-
-/**
- * @deprecated AnswersError is deprecated and has been replaced by {@link SearchError}
- * @public
- */
-export interface AnswersError extends SearchError{}
-
-/**
-* @deprecated AnswersRequest is deprecated and has been replaced by {@link SearchRequest}
-* @public
-*/
-export interface AnswersRequest extends SearchRequest{}
diff --git a/src/models/index.ts b/src/models/index.ts
index e16a746c..023f7576 100644
--- a/src/models/index.ts
+++ b/src/models/index.ts
@@ -1,11 +1,3 @@
-// deprecated symbols
-export { AnswersConfig } from './deprecated';
-export { BaseAnswersConfig } from './deprecated';
-export { AnswersConfigWithApiKey } from './deprecated';
-export { AnswersConfigWithToken } from './deprecated';
-export { AnswersError } from './deprecated';
-export { AnswersRequest } from './deprecated';
-
// Search API models
export { SearchError } from './searchapi/SearchError';
@@ -33,14 +25,20 @@ export { QuestionSubmissionRequest } from './questionsubmission/QuestionSubmissi
export { QuestionSubmissionResponse } from './questionsubmission/QuestionSubmissionResponse';
// Search service request models
-export { CombinedFilter, FilterCombinator } from './searchservice/request/CombinedFilter';
+export {
+ StaticFilter,
+ FieldValueStaticFilter,
+ ConjunctionStaticFilter,
+ DisjunctionStaticFilter,
+ FilterCombinator
+} from './searchservice/request/StaticFilter';
export { Context } from './searchservice/request/Context';
export { UniversalLimit } from './searchservice/request/UniversalLimit';
export { LatLong } from './searchservice/request/LatLong';
export { QuerySource } from './searchservice/request/QuerySource';
export { QueryTrigger } from './searchservice/request/QueryTrigger';
export { Facet, FacetOption } from './searchservice/request/Facet';
-export { Filter, NearFilterValue } from './searchservice/request/Filter';
+export { FieldValueFilter, NearFilterValue } from './searchservice/request/FieldValueFilter';
export { SortBy } from './searchservice/request/SortBy';
export { UniversalSearchRequest } from './searchservice/request/UniversalSearchRequest';
export { VerticalSearchRequest } from './searchservice/request/VerticalSearchRequest';
@@ -51,10 +49,21 @@ export { Direction } from './searchservice/request/Direction';
export { AppliedQueryFilter } from './searchservice/response/AppliedQueryFilter';
export { AppliedQueryFilterType } from './searchservice/response/AppliedQueryFilterType';
export { LocationFilterDetails, LocationBoundingBox } from './searchservice/response/LocationFilterDetails';
-export { DirectAnswer } from './searchservice/response/DirectAnswer';
-export { FieldValueDirectAnswer } from './searchservice/response/FieldValueDirectAnswer';
-export { FeaturedSnippetDirectAnswer } from './searchservice/response/FeaturedSnippetDirectAnswer';
-export { DirectAnswerType } from './searchservice/response/DirectAnswerType';
+
+export { DirectAnswer } from './searchservice/response/directanswer/DirectAnswer';
+export { DirectAnswerType } from './searchservice/response/directanswer/DirectAnswerType';
+export { BuiltInFieldType } from './searchservice/response/directanswer/BuiltInFieldType';
+
+export { BaseFieldValueDirectAnswer } from './searchservice/response/directanswer/BaseFieldValueDirectAnswer';
+export { FieldValueDirectAnswer } from './searchservice/response/directanswer/FieldValueDirectAnswer';
+export * from './searchservice/response/directanswer/fieldvaluedirectanswers';
+
+export {
+ BaseFeaturedSnippetDirectAnswer,
+ FeaturedSnippetDirectAnswer
+} from './searchservice/response/directanswer/FeaturedSnippetDirectAnswer';
+export * from './searchservice/response/directanswer/featuredsnippetdirectanswers';
+
export { DisplayableFacet, DisplayableFacetOption } from './searchservice/response/DisplayableFacet';
export { HighlightedFields } from './searchservice/response/HighlightedFields';
export { HighlightedValue } from './searchservice/response/HighlightedValue';
@@ -78,3 +87,6 @@ export {
LowerNumberRangeLimit,
UpperNumberRangeLimit
} from './searchservice/common/NumberRangeValue';
+
+// Utils
+export { EnumOrLiteral } from './utils/EnumOrLiteral';
diff --git a/src/models/searchservice/request/ApiStaticFilters.ts b/src/models/searchservice/request/ApiStaticFilters.ts
index 5f9b13c9..cf27cd13 100644
--- a/src/models/searchservice/request/ApiStaticFilters.ts
+++ b/src/models/searchservice/request/ApiStaticFilters.ts
@@ -1,4 +1,4 @@
-import { NearFilterValue } from './Filter';
+import { NearFilterValue } from './FieldValueFilter';
/**
* Represents static filters in the format that the Search API expects.
diff --git a/src/models/searchservice/request/CombinedFilter.ts b/src/models/searchservice/request/CombinedFilter.ts
deleted file mode 100644
index 6bd3f580..00000000
--- a/src/models/searchservice/request/CombinedFilter.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { Filter } from './Filter';
-
-/**
- * Represents multiple filters that will be combined to refine results.
- *
- * @public
- */
-export interface CombinedFilter {
- /** An array of filters applied to the search. */
- filters: (Filter | CombinedFilter)[],
- /** The logical operator used to combine the filters. */
- combinator: FilterCombinator
-}
-
-/**
- * Indicates how the filters in a {@link CombinedFilter} should be combined.
- *
- * @public
- */
-export enum FilterCombinator {
- /** Indicates that filters should be combined with a logical AND. */
- AND = '$and',
- /** Indicates that filters should be combined with a logical OR. */
- OR = '$or'
-}
\ No newline at end of file
diff --git a/src/models/searchservice/request/Facet.ts b/src/models/searchservice/request/Facet.ts
index 4e943ab8..6a6ea296 100644
--- a/src/models/searchservice/request/Facet.ts
+++ b/src/models/searchservice/request/Facet.ts
@@ -1,5 +1,4 @@
-import { Matcher } from '../common/Matcher';
-import { NumberRangeValue } from '../common/NumberRangeValue';
+import { FieldValueFilter, NearFilterValue } from './FieldValueFilter';
/**
* Represents dynamic filter options for the Search API.
@@ -23,14 +22,12 @@ export interface Facet {
*
* @public
*/
-export interface FacetOption {
- /** {@inheritDoc Matcher} */
- matcher: Matcher,
+export interface FacetOption extends Omit {
/**
* The value to compare.
*
* @example
* 'Sales'
*/
- value: string | number | boolean | NumberRangeValue
+ value: Exclude
}
diff --git a/src/models/searchservice/request/Filter.ts b/src/models/searchservice/request/FieldValueFilter.ts
similarity index 95%
rename from src/models/searchservice/request/Filter.ts
rename to src/models/searchservice/request/FieldValueFilter.ts
index 41e170c4..514bb9cf 100644
--- a/src/models/searchservice/request/Filter.ts
+++ b/src/models/searchservice/request/FieldValueFilter.ts
@@ -6,7 +6,7 @@ import { NumberRangeValue } from '../common/NumberRangeValue';
*
* @public
*/
-export interface Filter {
+export interface FieldValueFilter {
/**
* The fieldId to apply the filter against.
*
diff --git a/src/models/searchservice/request/StaticFilter.ts b/src/models/searchservice/request/StaticFilter.ts
new file mode 100644
index 00000000..ce4b33bc
--- /dev/null
+++ b/src/models/searchservice/request/StaticFilter.ts
@@ -0,0 +1,62 @@
+import { FieldValueFilter } from './FieldValueFilter';
+
+/**
+ * Represents a static filter that will be used to refine results.
+ *
+ * @public
+ */
+export type StaticFilter = FieldValueStaticFilter | DisjunctionStaticFilter | ConjunctionStaticFilter;
+
+/**
+ * A {@link FieldValueFilter} with the kind of filter specified
+ * to discriminate between static filter types.
+ *
+ * @public
+ */
+export interface FieldValueStaticFilter extends FieldValueFilter {
+ /** The kind of static filter. */
+ kind: 'fieldValue'
+}
+
+/**
+ * A static filter composed by combining filters with the logical OR
+ * operator. The combined filters can either be field value filters or
+ * other disjunction filters.
+ *
+ * @public
+ */
+export interface DisjunctionStaticFilter {
+ /** {@inheritDoc FieldValueStaticFilter.kind} */
+ kind: 'disjunction',
+ /** {@inheritDoc FilterCombinator.OR} */
+ combinator: FilterCombinator.OR,
+ /** The filters to combine together. */
+ filters: (DisjunctionStaticFilter | FieldValueStaticFilter)[]
+}
+
+/**
+ * A static filter composed by combining other static filters with the
+ * logical AND operator.
+ *
+ * @public
+ */
+export interface ConjunctionStaticFilter {
+ /** {@inheritDoc FieldValueStaticFilter.kind} */
+ kind: 'conjunction',
+ /** {@inheritDoc FilterCombinator.AND} */
+ combinator: FilterCombinator.AND,
+ /** {@inheritDoc DisjunctionStaticFilter.filters} */
+ filters: StaticFilter[]
+}
+
+/**
+ * Indicates how child filters in a {@link StaticFilter} should be combined.
+ *
+ * @public
+ */
+export enum FilterCombinator {
+ /** Indicates that filters should be combined with a logical AND. */
+ AND = '$and',
+ /** Indicates that filters should be combined with a logical OR. */
+ OR = '$or'
+}
\ No newline at end of file
diff --git a/src/models/searchservice/request/UniversalSearchRequest.ts b/src/models/searchservice/request/UniversalSearchRequest.ts
index de9b49d9..8e4086a8 100644
--- a/src/models/searchservice/request/UniversalSearchRequest.ts
+++ b/src/models/searchservice/request/UniversalSearchRequest.ts
@@ -29,7 +29,7 @@ export interface UniversalSearchRequest extends SearchRequest {
* The URl of the page which referred the user to the current page.
*
* @example
- * If a user is on https://www.yext.com/ and navigates to https://www.yext.com/answers and perform a search,
+ * If a user is on https://www.yext.com/ and navigates to https://search.yext.com/ and perform a search,
* the referrerPageUrl would be https://www.yext.com/.
*/
referrerPageUrl?: string,
diff --git a/src/models/searchservice/request/VerticalSearchRequest.ts b/src/models/searchservice/request/VerticalSearchRequest.ts
index 84e1921d..b9cdf9ab 100644
--- a/src/models/searchservice/request/VerticalSearchRequest.ts
+++ b/src/models/searchservice/request/VerticalSearchRequest.ts
@@ -1,5 +1,4 @@
-import { CombinedFilter } from './CombinedFilter';
-import { Filter } from './Filter';
+import { StaticFilter } from './StaticFilter';
import { Context } from './Context';
import { LatLong } from './LatLong';
import { QueryTrigger } from './QueryTrigger';
@@ -38,8 +37,8 @@ export interface VerticalSearchRequest extends SearchRequest {
sessionId?: string,
/** Enables session tracking. */
sessionTrackingEnabled?: boolean,
- /** The static filters to apply to the search. */
- staticFilters?: CombinedFilter | Filter,
+ /** The static filter to apply to the search. */
+ staticFilter?: StaticFilter,
/** Determines how results are sorted. **/
sortBys?: SortBy[],
/** {@inheritdoc UniversalSearchRequest.referrerPageUrl} */
diff --git a/src/models/searchservice/response/AppliedQueryFilter.ts b/src/models/searchservice/response/AppliedQueryFilter.ts
index 9b9b71e6..f922e26f 100644
--- a/src/models/searchservice/response/AppliedQueryFilter.ts
+++ b/src/models/searchservice/response/AppliedQueryFilter.ts
@@ -1,4 +1,4 @@
-import { Filter } from '../request/Filter';
+import { FieldValueFilter } from '../request/FieldValueFilter';
import { AppliedQueryFilterType } from './AppliedQueryFilterType';
import { LocationFilterDetails } from './LocationFilterDetails';
@@ -23,7 +23,7 @@ export interface AppliedQueryFilter {
*/
displayValue: string,
/** The filter applied to the query results. */
- filter: Filter,
+ filter: FieldValueFilter,
/** {@inheritDoc AppliedQueryFilterType} */
type: AppliedQueryFilterType,
/** {@inheritDoc LocationFilterDetails} */
diff --git a/src/models/searchservice/response/DirectAnswer.ts b/src/models/searchservice/response/DirectAnswer.ts
deleted file mode 100644
index 7a4b2eed..00000000
--- a/src/models/searchservice/response/DirectAnswer.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { Result } from './Result';
-import { DirectAnswerType } from './DirectAnswerType';
-
-/**
- * A direct answer to a search.
- *
- * @public
- */
-export interface DirectAnswer {
- /** The {@link DirectAnswerType}. */
- type: DirectAnswerType,
- /**
- * The result of the direct answer.
- *
- * @remarks
- * A value will not be present if the {@link DirectAnswer.fieldType} is 'rich_text'.
- */
- value?: string,
- /** The entity associated with the direct answer. */
- relatedResult: Result,
- /** The vertical key of the direct answer. */
- verticalKey: string,
- /** The field type of the direct answer. */
- fieldType: string
-}
\ No newline at end of file
diff --git a/src/models/searchservice/response/DisplayableFacet.ts b/src/models/searchservice/response/DisplayableFacet.ts
index ca71c3ba..1a370d48 100644
--- a/src/models/searchservice/response/DisplayableFacet.ts
+++ b/src/models/searchservice/response/DisplayableFacet.ts
@@ -1,6 +1,4 @@
import { Facet, FacetOption } from '../request/Facet';
-import { Matcher } from '../common/Matcher';
-import { NumberRangeValue } from '../common/NumberRangeValue';
/**
* A {@link Facet} which contains extra fields meant to be displayed to the end user.
@@ -8,8 +6,6 @@ import { NumberRangeValue } from '../common/NumberRangeValue';
* @public
*/
export interface DisplayableFacet extends Facet {
- /** {@inheritDoc Facet.fieldId} */
- fieldId: string,
/** An array of {@link DisplayableFacetOption} */
options: DisplayableFacetOption[],
/** The name of the facet which is meant to be displayed to the user. */
@@ -22,10 +18,6 @@ export interface DisplayableFacet extends Facet {
* @public
*/
export interface DisplayableFacetOption extends FacetOption {
- /** {@inheritDoc Matcher} */
- matcher: Matcher,
- /** {@inheritDoc FacetOption.value} */
- value: string | number | boolean | NumberRangeValue,
/** The name of the facet option which is meant to be displayed to the end user. */
displayName: string,
/** The number of results associated with this facet option. */
diff --git a/src/models/searchservice/response/FeaturedSnippetDirectAnswer.ts b/src/models/searchservice/response/FeaturedSnippetDirectAnswer.ts
deleted file mode 100644
index 1c2138c8..00000000
--- a/src/models/searchservice/response/FeaturedSnippetDirectAnswer.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-import { DirectAnswer } from './DirectAnswer';
-import { DirectAnswerType } from './DirectAnswerType';
-import { Result } from './Result';
-import { Snippet } from './Snippet';
-
-/**
- * A direct answer which was found within a document.
- *
- * @public
- */
-export interface FeaturedSnippetDirectAnswer extends DirectAnswer {
- /** {@link DirectAnswerType}.FeaturedSnippet. */
- type: DirectAnswerType.FeaturedSnippet,
- /** {@inheritDoc DirectAnswer.value} */
- value?: string,
- /** {@inheritDoc DirectAnswer.relatedResult} */
- relatedResult: Result,
- /** {@inheritDoc DirectAnswer.verticalKey} */
- verticalKey: string,
- /** {@inheritDoc DirectAnswer.fieldType} */
- fieldType: string,
- /** The snippet where the direct answer was found. */
- snippet: Snippet
-}
\ No newline at end of file
diff --git a/src/models/searchservice/response/Snippet.ts b/src/models/searchservice/response/Snippet.ts
index b6b47577..1f2538ff 100644
--- a/src/models/searchservice/response/Snippet.ts
+++ b/src/models/searchservice/response/Snippet.ts
@@ -6,6 +6,6 @@
export interface Snippet {
/** The snippet's body of text */
value: string,
- /** The locations in the document text of the {@link FeaturedSnippetDirectAnswer.value} */
+ /** The locations in the document text of the {@link DirectAnswer.value} */
matchedSubstrings: { offset: number, length: number }[]
}
\ No newline at end of file
diff --git a/src/models/searchservice/response/UniversalSearchResponse.ts b/src/models/searchservice/response/UniversalSearchResponse.ts
index f8e2a30c..c1ddb4ec 100644
--- a/src/models/searchservice/response/UniversalSearchResponse.ts
+++ b/src/models/searchservice/response/UniversalSearchResponse.ts
@@ -1,7 +1,7 @@
import { VerticalResults } from './VerticalResults';
import { SearchIntent } from './SearchIntent';
-import { FeaturedSnippetDirectAnswer } from './FeaturedSnippetDirectAnswer';
-import { FieldValueDirectAnswer } from './FieldValueDirectAnswer';
+import { FeaturedSnippetDirectAnswer } from './directanswer/FeaturedSnippetDirectAnswer';
+import { FieldValueDirectAnswer } from './directanswer/FieldValueDirectAnswer';
import { SpellCheck } from './SpellCheck';
import { LocationBias } from './LocationBias';
import { QueryRulesActionsData } from './QueryRulesActionsData';
diff --git a/src/models/searchservice/response/VerticalSearchResponse.ts b/src/models/searchservice/response/VerticalSearchResponse.ts
index 7a0d0a1c..54904f63 100644
--- a/src/models/searchservice/response/VerticalSearchResponse.ts
+++ b/src/models/searchservice/response/VerticalSearchResponse.ts
@@ -1,7 +1,7 @@
import { VerticalResults } from './VerticalResults';
import { SearchIntent } from './SearchIntent';
-import { FeaturedSnippetDirectAnswer } from './FeaturedSnippetDirectAnswer';
-import { FieldValueDirectAnswer } from './FieldValueDirectAnswer';
+import { FeaturedSnippetDirectAnswer } from './directanswer/FeaturedSnippetDirectAnswer';
+import { FieldValueDirectAnswer } from './directanswer/FieldValueDirectAnswer';
import { DisplayableFacet } from './DisplayableFacet';
import { LocationBias } from './LocationBias';
import { SpellCheck } from './SpellCheck';
@@ -35,4 +35,4 @@ export interface VerticalSearchResponse {
uuid: string,
/** {@inheritDoc QueryRulesActionsData} */
queryRulesActionsData?: QueryRulesActionsData[]
-}
\ No newline at end of file
+}
diff --git a/src/models/searchservice/response/FieldValueDirectAnswer.ts b/src/models/searchservice/response/directanswer/BaseFieldValueDirectAnswer.ts
similarity index 52%
rename from src/models/searchservice/response/FieldValueDirectAnswer.ts
rename to src/models/searchservice/response/directanswer/BaseFieldValueDirectAnswer.ts
index 32b7a438..7bca684b 100644
--- a/src/models/searchservice/response/FieldValueDirectAnswer.ts
+++ b/src/models/searchservice/response/directanswer/BaseFieldValueDirectAnswer.ts
@@ -1,27 +1,20 @@
import { DirectAnswer } from './DirectAnswer';
import { DirectAnswerType } from './DirectAnswerType';
-import { Result } from './Result';
/**
* A direct answer where the answer came from a field from the knowledge graph.
*
* @public
*/
-export interface FieldValueDirectAnswer extends DirectAnswer {
- /** {@link DirectAnswerType}.FieldValue. */
+export interface BaseFieldValueDirectAnswer extends DirectAnswer {
+ /** {@inheritDoc DirectAnswerType.FieldValue} */
type: DirectAnswerType.FieldValue,
- /** {@inheritDoc DirectAnswer.value} */
- value: string,
- /** {@inheritDoc DirectAnswer.relatedResult} */
- relatedResult: Result,
- /** {@inheritDoc DirectAnswer.verticalKey} */
- verticalKey: string,
- /** {@inheritDoc DirectAnswer.fieldType} */
- fieldType: string,
+ /** The result of the direct answer. */
+ value: T,
/** The name of the entity that direct answer came from. */
entityName: string,
/** The field name of the direct answer. */
fieldName: string,
/** The field api name of the direct answer. */
fieldApiName: string
-}
\ No newline at end of file
+}
diff --git a/src/models/searchservice/response/directanswer/BuiltInFieldType.ts b/src/models/searchservice/response/directanswer/BuiltInFieldType.ts
new file mode 100644
index 00000000..8251ecb0
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/BuiltInFieldType.ts
@@ -0,0 +1,23 @@
+/**
+ * Possible built-in field types for {@link DirectAnswer.fieldType}.
+ *
+ * @public
+ */
+export enum BuiltInFieldType {
+ URL = 'url',
+ ComplexURL = 'complex_url',
+ IOSAppURL = 'ios_app_url',
+ AndroidAppURL = 'android_app_url',
+ FacebookURL = 'facebook_url',
+ Email = 'email',
+ InstagramHandle = 'instagram_handle',
+ TwitterHandle = 'twitter_handle',
+ Phone = 'phone',
+ Address = 'address',
+ Hours = 'hours',
+ Decimal = 'decimal',
+ Integer = 'integer',
+ SingleLineText = 'single_line_text',
+ RichText = 'rich_text',
+ MultiLineText = 'multi_line_text'
+}
\ No newline at end of file
diff --git a/src/models/searchservice/response/directanswer/DirectAnswer.ts b/src/models/searchservice/response/directanswer/DirectAnswer.ts
new file mode 100644
index 00000000..a4d38b45
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/DirectAnswer.ts
@@ -0,0 +1,28 @@
+import { Result } from '../Result';
+import { DirectAnswerType } from './DirectAnswerType';
+import { BuiltInFieldType } from './BuiltInFieldType';
+import { EnumOrLiteral } from '../../../utils/EnumOrLiteral';
+
+/**
+ * A direct answer to a search.
+ *
+ * @public
+ */
+export interface DirectAnswer {
+ /** The {@link DirectAnswerType}. */
+ type: DirectAnswerType,
+ /**
+ * The value of the direct answer.
+ *
+ * @remarks
+ * A value will not be present if the {@link DirectAnswer."type"} is 'FEATURED_SNIPPET'
+ * and {@link DirectAnswer.fieldType} is 'rich_text'.
+ */
+ value?: T,
+ /** The entity associated with the direct answer. */
+ relatedResult: Result,
+ /** The vertical key of the direct answer. */
+ verticalKey: string,
+ /** The field type of the direct answer. */
+ fieldType: EnumOrLiteral | 'unknown'
+}
diff --git a/src/models/searchservice/response/DirectAnswerType.ts b/src/models/searchservice/response/directanswer/DirectAnswerType.ts
similarity index 100%
rename from src/models/searchservice/response/DirectAnswerType.ts
rename to src/models/searchservice/response/directanswer/DirectAnswerType.ts
diff --git a/src/models/searchservice/response/directanswer/FeaturedSnippetDirectAnswer.ts b/src/models/searchservice/response/directanswer/FeaturedSnippetDirectAnswer.ts
new file mode 100644
index 00000000..ec48022f
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/FeaturedSnippetDirectAnswer.ts
@@ -0,0 +1,31 @@
+import { DirectAnswer } from './DirectAnswer';
+import { DirectAnswerType } from './DirectAnswerType';
+import { Snippet } from '../Snippet';
+import { BuiltInFieldType } from './BuiltInFieldType';
+import { EnumOrLiteral } from '../../../utils/EnumOrLiteral';
+import {
+ MultiLineTextSnippetDirectAnswer,
+ RichTextSnippetDirectAnswer
+} from './featuredsnippetdirectanswers';
+
+/**
+ * A direct answer which was found within a document.
+ *
+ * @public
+ */
+export interface BaseFeaturedSnippetDirectAnswer extends DirectAnswer {
+ /** {@inheritDoc DirectAnswerType.FeaturedSnippet} */
+ type: DirectAnswerType.FeaturedSnippet,
+ /** {@inheritDoc DirectAnswer.fieldType} */
+ fieldType: EnumOrLiteral,
+ /** The snippet where the direct answer was found. */
+ snippet: Snippet
+}
+
+/**
+ * All possible built-in {@link BaseFeaturedSnippetDirectAnswer} interfaces.
+ *
+ * @public
+ */
+export type FeaturedSnippetDirectAnswer =
+ MultiLineTextSnippetDirectAnswer | RichTextSnippetDirectAnswer;
diff --git a/src/models/searchservice/response/directanswer/FieldValueDirectAnswer.ts b/src/models/searchservice/response/directanswer/FieldValueDirectAnswer.ts
new file mode 100644
index 00000000..411a783e
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/FieldValueDirectAnswer.ts
@@ -0,0 +1,41 @@
+import {
+ UnknownFieldValueDirectAnswer,
+ DecimalDirectAnswer,
+ InstagramHandleDirectAnswer,
+ IosAppUrlDirectAnswer,
+ AndroidAppUrlDirectAnswer,
+ TwitterHandleDirectAnswer,
+ FacebookUrlDirectAnswer,
+ RichTextDirectAnswer,
+ UrlDirectAnswer,
+ TextDirectAnswer,
+ ComplexUrlDirectAnswer,
+ IntegerDirectAnswer,
+ PhoneDirectAnswer,
+ EmailDirectAnswer,
+ AddressDirectAnswer,
+ HoursDirectAnswer
+} from './fieldvaluedirectanswers';
+
+/**
+ * Possible built-in and custom {@link BaseFieldValueDirectAnswer} interfaces.
+ *
+ * @public
+ */
+export type FieldValueDirectAnswer =
+ UnknownFieldValueDirectAnswer |
+ TextDirectAnswer |
+ UrlDirectAnswer |
+ RichTextDirectAnswer |
+ DecimalDirectAnswer |
+ FacebookUrlDirectAnswer |
+ InstagramHandleDirectAnswer |
+ TwitterHandleDirectAnswer |
+ IosAppUrlDirectAnswer |
+ AndroidAppUrlDirectAnswer |
+ ComplexUrlDirectAnswer |
+ IntegerDirectAnswer |
+ PhoneDirectAnswer |
+ EmailDirectAnswer |
+ AddressDirectAnswer |
+ HoursDirectAnswer;
diff --git a/src/models/searchservice/response/directanswer/featuredsnippetdirectanswers/MultiLineTextSnippetDirectAnswer.ts b/src/models/searchservice/response/directanswer/featuredsnippetdirectanswers/MultiLineTextSnippetDirectAnswer.ts
new file mode 100644
index 00000000..c3c4a2e4
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/featuredsnippetdirectanswers/MultiLineTextSnippetDirectAnswer.ts
@@ -0,0 +1,15 @@
+import { EnumOrLiteral } from '../../../../utils/EnumOrLiteral';
+import { BuiltInFieldType } from '../BuiltInFieldType';
+import { BaseFeaturedSnippetDirectAnswer } from '../FeaturedSnippetDirectAnswer';
+
+/**
+ * A {@link BaseFeaturedSnippetDirectAnswer} with 'multi_line_text' field type.
+ *
+ * @public
+ */
+export interface MultiLineTextSnippetDirectAnswer extends BaseFeaturedSnippetDirectAnswer {
+ /** The value of the direct answer. */
+ value: string,
+ /** {@inheritDoc DirectAnswer.fieldType} */
+ fieldType: EnumOrLiteral
+}
\ No newline at end of file
diff --git a/src/models/searchservice/response/directanswer/featuredsnippetdirectanswers/RichTextSnippetDirectAnswer.ts b/src/models/searchservice/response/directanswer/featuredsnippetdirectanswers/RichTextSnippetDirectAnswer.ts
new file mode 100644
index 00000000..fe60225a
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/featuredsnippetdirectanswers/RichTextSnippetDirectAnswer.ts
@@ -0,0 +1,14 @@
+import { EnumOrLiteral } from '../../../../utils/EnumOrLiteral';
+import { BuiltInFieldType } from '../BuiltInFieldType';
+import { BaseFeaturedSnippetDirectAnswer } from '../FeaturedSnippetDirectAnswer';
+
+/**
+ * A {@link BaseFeaturedSnippetDirectAnswer} with 'rich_text' field type.
+ * "value" field is omitted for featured snippet direct answer of this field type.
+ *
+ * @public
+ */
+export interface RichTextSnippetDirectAnswer extends Omit, 'value'> {
+ /** {@inheritDoc DirectAnswer.fieldType} */
+ fieldType: EnumOrLiteral
+}
diff --git a/src/models/searchservice/response/directanswer/featuredsnippetdirectanswers/index.ts b/src/models/searchservice/response/directanswer/featuredsnippetdirectanswers/index.ts
new file mode 100644
index 00000000..61b085e5
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/featuredsnippetdirectanswers/index.ts
@@ -0,0 +1,2 @@
+export { RichTextSnippetDirectAnswer } from './RichTextSnippetDirectAnswer';
+export { MultiLineTextSnippetDirectAnswer } from './MultiLineTextSnippetDirectAnswer';
diff --git a/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/AddressDirectAnswer.ts b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/AddressDirectAnswer.ts
new file mode 100644
index 00000000..087e7de2
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/AddressDirectAnswer.ts
@@ -0,0 +1,29 @@
+import { BuiltInFieldType } from '../BuiltInFieldType';
+import { BaseFieldValueDirectAnswer } from '../BaseFieldValueDirectAnswer';
+import { EnumOrLiteral } from '../../../../utils/EnumOrLiteral';
+
+/**
+ * A {@link BaseFieldValueDirectAnswer} interface with 'address' field type.
+ *
+ * @public
+ */
+export interface AddressDirectAnswer extends BaseFieldValueDirectAnswer {
+ fieldType: EnumOrLiteral
+}
+
+/**
+ * An interface with address fields to use in {@link BaseFieldValueDirectAnswer.value}.
+ *
+ * @public
+ */
+export interface Address {
+ line1?: string,
+ line2?: string,
+ line3?: string,
+ sublocality?: string,
+ city?: string,
+ region?: string,
+ postalCode?: string,
+ extraDescription?: string,
+ countryCode: string
+}
\ No newline at end of file
diff --git a/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/AndroidAppUrlDirectAnswer.ts b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/AndroidAppUrlDirectAnswer.ts
new file mode 100644
index 00000000..e83b73a2
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/AndroidAppUrlDirectAnswer.ts
@@ -0,0 +1,12 @@
+import { EnumOrLiteral } from '../../../../utils/EnumOrLiteral';
+import { BaseFieldValueDirectAnswer } from '../BaseFieldValueDirectAnswer';
+import { BuiltInFieldType } from '../BuiltInFieldType';
+
+/**
+ * A direct answer for an android app url field.
+ *
+ * @public
+ */
+export interface AndroidAppUrlDirectAnswer extends BaseFieldValueDirectAnswer {
+ fieldType: EnumOrLiteral
+}
\ No newline at end of file
diff --git a/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/ComplexUrlDirectAnswer.ts b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/ComplexUrlDirectAnswer.ts
new file mode 100644
index 00000000..e9c9a4c8
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/ComplexUrlDirectAnswer.ts
@@ -0,0 +1,23 @@
+import { EnumOrLiteral } from '../../../../utils/EnumOrLiteral';
+import { BaseFieldValueDirectAnswer } from '../BaseFieldValueDirectAnswer';
+import { BuiltInFieldType } from '../BuiltInFieldType';
+
+/**
+ * A direct answer for a complex url field.
+ *
+ * @public
+ */
+export interface ComplexUrlDirectAnswer extends BaseFieldValueDirectAnswer {
+ fieldType: EnumOrLiteral
+}
+
+/**
+ * The shape of a {@link BuiltInFieldType.ComplexURL} DirectAnswer value
+ *
+ * @public
+ */
+export interface ComplexURL {
+ url: string,
+ displayUrl?: string,
+ preferDisplayUrl: boolean
+}
\ No newline at end of file
diff --git a/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/DecimalDirectAnswer.ts b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/DecimalDirectAnswer.ts
new file mode 100644
index 00000000..0f9968fb
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/DecimalDirectAnswer.ts
@@ -0,0 +1,12 @@
+import { EnumOrLiteral } from '../../../../utils/EnumOrLiteral';
+import { BaseFieldValueDirectAnswer } from '../BaseFieldValueDirectAnswer';
+import { BuiltInFieldType } from '../BuiltInFieldType';
+
+/**
+ * A direct answer for a decimal field, which is a number represented using a string.
+ *
+ * @public
+ */
+export interface DecimalDirectAnswer extends BaseFieldValueDirectAnswer {
+ fieldType: EnumOrLiteral
+}
\ No newline at end of file
diff --git a/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/EmailDirectAnswer.ts b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/EmailDirectAnswer.ts
new file mode 100644
index 00000000..02c2b037
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/EmailDirectAnswer.ts
@@ -0,0 +1,12 @@
+import { BuiltInFieldType } from '../BuiltInFieldType';
+import { BaseFieldValueDirectAnswer } from '../BaseFieldValueDirectAnswer';
+import { EnumOrLiteral } from '../../../../utils/EnumOrLiteral';
+
+/**
+ * A {@link BaseFieldValueDirectAnswer} interface with 'email' field type.
+ *
+ * @public
+ */
+export interface EmailDirectAnswer extends BaseFieldValueDirectAnswer {
+ fieldType: EnumOrLiteral
+}
\ No newline at end of file
diff --git a/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/FacebookUrlDirectAnswer.ts b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/FacebookUrlDirectAnswer.ts
new file mode 100644
index 00000000..9a3fc7f5
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/FacebookUrlDirectAnswer.ts
@@ -0,0 +1,12 @@
+import { EnumOrLiteral } from '../../../../utils/EnumOrLiteral';
+import { BaseFieldValueDirectAnswer } from '../BaseFieldValueDirectAnswer';
+import { BuiltInFieldType } from '../BuiltInFieldType';
+
+/**
+ * A direct answer for a facebook url field.
+ *
+ * @public
+ */
+export interface FacebookUrlDirectAnswer extends BaseFieldValueDirectAnswer {
+ fieldType: EnumOrLiteral
+}
diff --git a/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/HoursDirectAnswer.ts b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/HoursDirectAnswer.ts
new file mode 100644
index 00000000..61729fb9
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/HoursDirectAnswer.ts
@@ -0,0 +1,61 @@
+import { BuiltInFieldType } from '../BuiltInFieldType';
+import { BaseFieldValueDirectAnswer } from '../BaseFieldValueDirectAnswer';
+import { EnumOrLiteral } from '../../../../utils/EnumOrLiteral';
+
+/**
+ * A {@link BaseFieldValueDirectAnswer} interface with 'hours' field type.
+ *
+ * @public
+ */
+export interface HoursDirectAnswer extends BaseFieldValueDirectAnswer {
+ fieldType: EnumOrLiteral
+}
+
+/**
+ * An interface for hours fields to use in {@link BaseFieldValueDirectAnswer.value}.
+ *
+ * @public
+ */
+export interface Hours {
+ monday?: DayHour,
+ tuesday?: DayHour,
+ wednesday?: DayHour,
+ thursday?: DayHour,
+ friday?: DayHour,
+ saturday?: DayHour,
+ sunday?: DayHour,
+ holidayHours?: HolidayHours[],
+ reopenDate?: string
+}
+
+/**
+ * An interface for a day's hours to use in {@link BaseFieldValueDirectAnswer.value}.
+ *
+ * @public
+ */
+export interface DayHour {
+ openIntervals?: Interval[],
+ isClosed?: boolean
+}
+
+/**
+ * An interface for holiday hours to use in {@link BaseFieldValueDirectAnswer.value}.
+ *
+ * @public
+ */
+export interface HolidayHours {
+ date: string,
+ openIntervals?: Interval[],
+ isClosed?: boolean,
+ isRegularHours?: boolean
+}
+
+/**
+ * An interface for a time interval to use in {@link BaseFieldValueDirectAnswer.value}.
+ *
+ * @public
+ */
+export interface Interval {
+ start?: string,
+ end?: string
+}
diff --git a/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/InstagramHandleDirectAnswer.ts b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/InstagramHandleDirectAnswer.ts
new file mode 100644
index 00000000..e39149e6
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/InstagramHandleDirectAnswer.ts
@@ -0,0 +1,12 @@
+import { EnumOrLiteral } from '../../../../utils/EnumOrLiteral';
+import { BaseFieldValueDirectAnswer } from '../BaseFieldValueDirectAnswer';
+import { BuiltInFieldType } from '../BuiltInFieldType';
+
+/**
+ * A direct answer for an instagram handle field.
+ *
+ * @public
+ */
+export interface InstagramHandleDirectAnswer extends BaseFieldValueDirectAnswer {
+ fieldType: EnumOrLiteral
+}
diff --git a/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/IntegerDirectAnswer.ts b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/IntegerDirectAnswer.ts
new file mode 100644
index 00000000..96116622
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/IntegerDirectAnswer.ts
@@ -0,0 +1,16 @@
+import { EnumOrLiteral } from '../../../../utils/EnumOrLiteral';
+import { BaseFieldValueDirectAnswer } from '../BaseFieldValueDirectAnswer';
+import { BuiltInFieldType } from '../BuiltInFieldType';
+
+/**
+ * A direct answer for an integer field.
+ *
+ * @remarks
+ * `IntegerDirectAnswer`s are only used for built in number fields.
+ * Custom number fields use {@link DecimalDirectAnswer} instead.
+ *
+ * @public
+ */
+export interface IntegerDirectAnswer extends BaseFieldValueDirectAnswer {
+ fieldType: EnumOrLiteral
+}
diff --git a/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/IosAppUrlDirectAnswer.ts b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/IosAppUrlDirectAnswer.ts
new file mode 100644
index 00000000..278c1417
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/IosAppUrlDirectAnswer.ts
@@ -0,0 +1,12 @@
+import { EnumOrLiteral } from '../../../../utils/EnumOrLiteral';
+import { BaseFieldValueDirectAnswer } from '../BaseFieldValueDirectAnswer';
+import { BuiltInFieldType } from '../BuiltInFieldType';
+
+/**
+ * A direct answer for an iOS app url field.
+ *
+ * @public
+ */
+export interface IosAppUrlDirectAnswer extends BaseFieldValueDirectAnswer {
+ fieldType: EnumOrLiteral
+}
diff --git a/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/PhoneDirectAnswer.ts b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/PhoneDirectAnswer.ts
new file mode 100644
index 00000000..c1bdb587
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/PhoneDirectAnswer.ts
@@ -0,0 +1,11 @@
+import { BuiltInFieldType } from '../BuiltInFieldType';
+import { BaseFieldValueDirectAnswer } from '../BaseFieldValueDirectAnswer';
+
+/**
+ * A {@link BaseFieldValueDirectAnswer} interface with phone value.
+ *
+ * @public
+ */
+export interface PhoneDirectAnswer extends BaseFieldValueDirectAnswer {
+ fieldType: BuiltInFieldType.Phone
+}
\ No newline at end of file
diff --git a/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/RichTextDirectAnswer.ts b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/RichTextDirectAnswer.ts
new file mode 100644
index 00000000..dd5e12ca
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/RichTextDirectAnswer.ts
@@ -0,0 +1,12 @@
+import { EnumOrLiteral } from '../../../../utils/EnumOrLiteral';
+import { BaseFieldValueDirectAnswer } from '../BaseFieldValueDirectAnswer';
+import { BuiltInFieldType } from '../BuiltInFieldType';
+
+/**
+ * A direct answer for a rich text field.
+ *
+ * @public
+ */
+export interface RichTextDirectAnswer extends BaseFieldValueDirectAnswer {
+ fieldType: EnumOrLiteral
+}
diff --git a/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/TextDirectAnswer.ts b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/TextDirectAnswer.ts
new file mode 100644
index 00000000..9aa5d0a0
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/TextDirectAnswer.ts
@@ -0,0 +1,12 @@
+import { EnumOrLiteral } from '../../../../utils/EnumOrLiteral';
+import { BaseFieldValueDirectAnswer } from '../BaseFieldValueDirectAnswer';
+import { BuiltInFieldType } from '../BuiltInFieldType';
+
+/**
+ * A direct answer whose source is a string or string list field in the knowledge graph.
+ *
+ * @public
+ */
+export interface TextDirectAnswer extends BaseFieldValueDirectAnswer {
+ fieldType: EnumOrLiteral
+}
\ No newline at end of file
diff --git a/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/TwitterHandleDirectAnswer.ts b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/TwitterHandleDirectAnswer.ts
new file mode 100644
index 00000000..131b1a7b
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/TwitterHandleDirectAnswer.ts
@@ -0,0 +1,12 @@
+import { EnumOrLiteral } from '../../../../utils/EnumOrLiteral';
+import { BaseFieldValueDirectAnswer } from '../BaseFieldValueDirectAnswer';
+import { BuiltInFieldType } from '../BuiltInFieldType';
+
+/**
+ * A direct answer for an twitter handle field.
+ *
+ * @public
+ */
+export interface TwitterHandleDirectAnswer extends BaseFieldValueDirectAnswer {
+ fieldType: EnumOrLiteral
+}
diff --git a/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/UnknownFieldValueDirectAnswer.ts b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/UnknownFieldValueDirectAnswer.ts
new file mode 100644
index 00000000..154e8b52
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/UnknownFieldValueDirectAnswer.ts
@@ -0,0 +1,11 @@
+import { BaseFieldValueDirectAnswer } from '../BaseFieldValueDirectAnswer';
+
+/**
+ * A {@link BaseFieldValueDirectAnswer} with a field type outside of {@link BuiltInFieldType}.
+ *
+ * @public
+ */
+export interface UnknownFieldValueDirectAnswer extends BaseFieldValueDirectAnswer{
+ /** {@inheritDoc DirectAnswer.fieldType} */
+ fieldType: 'unknown'
+}
diff --git a/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/UrlDirectAnswer.ts b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/UrlDirectAnswer.ts
new file mode 100644
index 00000000..6466669a
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/UrlDirectAnswer.ts
@@ -0,0 +1,12 @@
+import { EnumOrLiteral } from '../../../../utils/EnumOrLiteral';
+import { BaseFieldValueDirectAnswer } from '../BaseFieldValueDirectAnswer';
+import { BuiltInFieldType } from '../BuiltInFieldType';
+
+/**
+ * A direct answer for a simple url field.
+ *
+ * @public
+ */
+export interface UrlDirectAnswer extends BaseFieldValueDirectAnswer {
+ fieldType: EnumOrLiteral
+}
diff --git a/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/index.ts b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/index.ts
new file mode 100644
index 00000000..4b0bf664
--- /dev/null
+++ b/src/models/searchservice/response/directanswer/fieldvaluedirectanswers/index.ts
@@ -0,0 +1,16 @@
+export { UnknownFieldValueDirectAnswer } from './UnknownFieldValueDirectAnswer';
+export { DecimalDirectAnswer } from './DecimalDirectAnswer';
+export { InstagramHandleDirectAnswer } from './InstagramHandleDirectAnswer';
+export { IosAppUrlDirectAnswer } from './IosAppUrlDirectAnswer';
+export { AndroidAppUrlDirectAnswer } from './AndroidAppUrlDirectAnswer';
+export { TwitterHandleDirectAnswer } from './TwitterHandleDirectAnswer';
+export { FacebookUrlDirectAnswer } from './FacebookUrlDirectAnswer';
+export { RichTextDirectAnswer } from './RichTextDirectAnswer';
+export { UrlDirectAnswer } from './UrlDirectAnswer';
+export { TextDirectAnswer } from './TextDirectAnswer';
+export { ComplexUrlDirectAnswer, ComplexURL } from './ComplexUrlDirectAnswer';
+export { IntegerDirectAnswer } from './IntegerDirectAnswer';
+export { AddressDirectAnswer, Address } from './AddressDirectAnswer';
+export { PhoneDirectAnswer } from './PhoneDirectAnswer';
+export { EmailDirectAnswer } from './EmailDirectAnswer';
+export { HoursDirectAnswer, Hours, HolidayHours, DayHour, Interval } from './HoursDirectAnswer';
diff --git a/src/models/utils/EnumOrLiteral.ts b/src/models/utils/EnumOrLiteral.ts
new file mode 100644
index 00000000..b630513e
--- /dev/null
+++ b/src/models/utils/EnumOrLiteral.ts
@@ -0,0 +1,7 @@
+/**
+ * Produces a union type from the enum passed as a generic which consists of the enum values
+ * and the string literals of the enum.
+ *
+ * @public
+ */
+export type EnumOrLiteral = T | `${T}`;
diff --git a/src/serializers/serializeFacets.ts b/src/serializers/serializeFacets.ts
index c9181e34..ab68dd55 100644
--- a/src/serializers/serializeFacets.ts
+++ b/src/serializers/serializeFacets.ts
@@ -1,6 +1,6 @@
import { Facet, FacetOption } from '../models/searchservice/request/Facet';
import { ApiStaticFilters } from '../models/searchservice/request/ApiStaticFilters';
-import { shapeFilterForApi } from './serializeStaticFilters';
+import { shapeFieldValueFilterForApi } from './serializeStaticFilters';
export function serializeFacets(filters: Facet[]): string {
return JSON.stringify(filters.reduce>((obj, facet) => {
@@ -13,6 +13,6 @@ export function serializeFacets(filters: Facet[]): string {
function shapeFacetOptionArrayForApi(options: FacetOption[], fieldId: string): ApiStaticFilters[] {
return options.map((option) => {
- return shapeFilterForApi({ ...option, fieldId: fieldId });
+ return shapeFieldValueFilterForApi({ ...option, fieldId: fieldId });
});
}
\ No newline at end of file
diff --git a/src/serializers/serializeFilterSearch.ts b/src/serializers/serializeFilterSearch.ts
index dc533e15..2700e618 100644
--- a/src/serializers/serializeFilterSearch.ts
+++ b/src/serializers/serializeFilterSearch.ts
@@ -1,5 +1,5 @@
import { SearchParameterField } from '../models/autocompleteservice/AutocompleteRequest';
-import { Filter } from '../models/searchservice/request/Filter';
+import { FieldValueFilter } from '../models/searchservice/request/FieldValueFilter';
export function serializeSearchParameterFields(fields: SearchParameterField[]) {
return fields.map(({ fieldApiName, entityType, fetchEntities }) => (
@@ -11,7 +11,7 @@ export function serializeSearchParameterFields(fields: SearchParameterField[]) {
));
}
-export function serializeExcludedFields(excludedFields?: Filter[]) {
+export function serializeExcludedFields(excludedFields?: FieldValueFilter[]) {
return excludedFields?.map(({ fieldId, matcher, value }) => (
{
[fieldId]: {
diff --git a/src/serializers/serializeStaticFilters.ts b/src/serializers/serializeStaticFilters.ts
index df13a525..1fe8da67 100644
--- a/src/serializers/serializeStaticFilters.ts
+++ b/src/serializers/serializeStaticFilters.ts
@@ -1,32 +1,39 @@
import { isNumberRangeValue } from '../models/searchservice/common/NumberRangeValue';
-import { CombinedFilter } from '../models/searchservice/request/CombinedFilter';
-import { Filter } from '../models/searchservice/request/Filter';
+import { FilterCombinator, StaticFilter } from '../models/searchservice/request/StaticFilter';
+import { FieldValueFilter } from '../models/searchservice/request/FieldValueFilter';
import { ApiStaticFilters, ApiFilter } from '../models/searchservice/request/ApiStaticFilters';
-export function serializeStaticFilters(
- filter: CombinedFilter | Filter): string | undefined {
- if (isCombinedFilter(filter)) {
- return JSON.stringify(shapeCombinedFilterForApi(filter));
+export function serializeStaticFilters(filter: StaticFilter): string | undefined {
+ if (filter.kind !== 'fieldValue') {
+ const shapedFilter = shapeCombinedFilterForApi(filter.combinator, filter.filters);
+ return shapedFilter && JSON.stringify(shapedFilter);
}
- return JSON.stringify(shapeFilterForApi(filter));
+ return JSON.stringify(shapeFieldValueFilterForApi(filter));
}
-function shapeCombinedFilterForApi(combinedFilter: CombinedFilter): ApiStaticFilters {
+function shapeCombinedFilterForApi(
+ combinator: FilterCombinator,
+ filters: StaticFilter[]
+): ApiStaticFilters | undefined {
const shapedFilters: ApiStaticFilters[] = [];
- for (const filter of combinedFilter.filters) {
- if (isCombinedFilter(filter)) {
- shapedFilters.push(shapeCombinedFilterForApi(filter));
+ for (const filter of filters) {
+ if (filter.kind !== 'fieldValue') {
+ const shapedFilter = shapeCombinedFilterForApi(filter.combinator, filter.filters);
+ shapedFilter && shapedFilters.push(shapedFilter);
} else {
- shapedFilters.push(shapeFilterForApi(filter));
+ shapedFilters.push(shapeFieldValueFilterForApi(filter));
}
}
- return shapedFilters.length === 1
- ? shapedFilters[0]
- : { [combinedFilter.combinator]: shapedFilters };
+
+ return shapedFilters.length === 0
+ ? undefined
+ : shapedFilters.length === 1
+ ? shapedFilters[0]
+ : { [combinator]: shapedFilters };
}
-export function shapeFilterForApi(filter: Filter): ApiStaticFilters {
+export function shapeFieldValueFilterForApi(filter: FieldValueFilter): ApiStaticFilters {
let filterValues: ApiFilter = {};
if (isNumberRangeValue(filter.value)) {
if (filter.value.start) {
@@ -42,8 +49,3 @@ export function shapeFilterForApi(filter: Filter): ApiStaticFilters {
[filter.fieldId]: filterValues
};
}
-
-function isCombinedFilter(filter: CombinedFilter | Filter): filter is CombinedFilter {
- return ((filter as CombinedFilter).filters !== undefined)
- && ((filter as CombinedFilter).combinator !== undefined);
-}
\ No newline at end of file
diff --git a/src/transformers/autocompleteservice/createAutocompleteResult.ts b/src/transformers/autocompleteservice/createAutocompleteResult.ts
index 0dc4d56a..e47f83a3 100644
--- a/src/transformers/autocompleteservice/createAutocompleteResult.ts
+++ b/src/transformers/autocompleteservice/createAutocompleteResult.ts
@@ -1,6 +1,6 @@
import { AutocompleteResult } from '../../models/autocompleteservice/AutocompleteResponse';
import { Source } from '../../models/searchservice/response/Source';
-import { createFilter } from '../core/createFilter';
+import { createFieldValueFilter } from '../core/createFieldValueFilter';
import { ResultsFactory } from '../searchservice/ResultsFactory';
export function createAutocompleteResult(result: any): AutocompleteResult {
@@ -8,7 +8,7 @@ export function createAutocompleteResult(result: any): AutocompleteResult {
? ResultsFactory.create([result.relatedItem], Source.KnowledgeManager)[0]
: result.relatedItem;
return {
- filter: result.filter && createFilter(result.filter),
+ filter: result.filter && createFieldValueFilter(result.filter),
key: result.key,
matchedSubstrings: result.matchedSubstrings || [],
value: result.value,
diff --git a/src/transformers/core/createFilter.ts b/src/transformers/core/createFieldValueFilter.ts
similarity index 86%
rename from src/transformers/core/createFilter.ts
rename to src/transformers/core/createFieldValueFilter.ts
index 98ff4fdb..e02856df 100644
--- a/src/transformers/core/createFilter.ts
+++ b/src/transformers/core/createFieldValueFilter.ts
@@ -1,8 +1,8 @@
-import { Filter, NearFilterValue } from '../../models/searchservice/request/Filter';
+import { FieldValueFilter, NearFilterValue } from '../../models/searchservice/request/FieldValueFilter';
import { Matcher } from '../../models/searchservice/common/Matcher';
import { NumberRangeValue } from '../../models/searchservice/common/NumberRangeValue';
-export function createFilter(filter: any): Filter {
+export function createFieldValueFilter(filter: any): FieldValueFilter {
const fieldId = Object.keys(filter)[0];
const matcher = Object.keys(filter[fieldId])[0];
let value: string | number | boolean | NearFilterValue | NumberRangeValue;
diff --git a/src/transformers/searchservice/createAppliedQueryFilter.ts b/src/transformers/searchservice/createAppliedQueryFilter.ts
index 41421217..a84d140b 100644
--- a/src/transformers/searchservice/createAppliedQueryFilter.ts
+++ b/src/transformers/searchservice/createAppliedQueryFilter.ts
@@ -1,11 +1,11 @@
import { AppliedQueryFilter } from '../../models/searchservice/response/AppliedQueryFilter';
-import { createFilter } from '../core/createFilter';
+import { createFieldValueFilter } from '../core/createFieldValueFilter';
export function createAppliedQueryFilter(data: any): AppliedQueryFilter {
return {
displayKey: data.displayKey,
displayValue: data.displayValue,
- filter: createFilter(data.filter),
+ filter: createFieldValueFilter(data.filter),
type: data.type,
...(data.details && { details: data.details })
};
diff --git a/src/transformers/searchservice/createDirectAnswer.ts b/src/transformers/searchservice/createDirectAnswer.ts
index fdc1cc40..b964b1d5 100644
--- a/src/transformers/searchservice/createDirectAnswer.ts
+++ b/src/transformers/searchservice/createDirectAnswer.ts
@@ -1,7 +1,8 @@
-import { FeaturedSnippetDirectAnswer } from '../../models/searchservice/response/FeaturedSnippetDirectAnswer';
-import { FieldValueDirectAnswer } from '../../models/searchservice/response/FieldValueDirectAnswer';
-import { DirectAnswerType } from '../../models/searchservice/response/DirectAnswerType';
+import { FeaturedSnippetDirectAnswer } from '../../models/searchservice/response/directanswer/FeaturedSnippetDirectAnswer';
+import { FieldValueDirectAnswer } from '../../models/searchservice/response/directanswer/FieldValueDirectAnswer';
+import { DirectAnswerType } from '../../models/searchservice/response/directanswer/DirectAnswerType';
import { ResultsFactory } from './ResultsFactory';
+import { BuiltInFieldType } from '../../models/searchservice/response/directanswer/BuiltInFieldType';
export function createDirectAnswer(data: any): FeaturedSnippetDirectAnswer | FieldValueDirectAnswer {
const isFieldValueDirectAnswer = data?.type === DirectAnswerType.FieldValue;
@@ -11,7 +12,7 @@ export function createDirectAnswer(data: any): FeaturedSnippetDirectAnswer | Fie
value: data.answer.value,
relatedResult: ResultsFactory.fromDirectAnswer(data.relatedItem.data),
verticalKey: data.relatedItem.verticalConfigId,
- fieldType: data.answer.fieldType
+ fieldType: Object.values(BuiltInFieldType).includes(data.answer.fieldType) ? data.answer.fieldType : 'unknown'
};
if (isFieldValueDirectAnswer) {
@@ -23,12 +24,16 @@ export function createDirectAnswer(data: any): FeaturedSnippetDirectAnswer | Fie
fieldApiName: data.answer.fieldApiName,
};
} else if (isFeaturedSnippetDirectAnswer) {
+ const fieldType = commonDirectAnswerData.fieldType;
+ if (fieldType != BuiltInFieldType.MultiLineText && fieldType != BuiltInFieldType.RichText) {
+ throw new Error(`Unexpected fieldType for featured snippet direct answer: ${fieldType}`);
+ }
return {
type: DirectAnswerType.FeaturedSnippet,
...commonDirectAnswerData,
snippet: data.answer.snippet
};
} else {
- throw new Error('The Search API returned an unknown direct answer type');
+ throw new Error(`The Search API returned an unknown direct answer type: ${data?.type}`);
}
}
\ No newline at end of file
diff --git a/src/transformers/searchservice/createFacets.ts b/src/transformers/searchservice/createFacets.ts
index 19d97e81..e928ba6d 100644
--- a/src/transformers/searchservice/createFacets.ts
+++ b/src/transformers/searchservice/createFacets.ts
@@ -1,6 +1,6 @@
import { NumberRangeValue } from '../../models/searchservice/common/NumberRangeValue';
import { DisplayableFacet, DisplayableFacetOption } from '../../models/searchservice/response/DisplayableFacet';
-import { createFilter } from '../core/createFilter';
+import { createFieldValueFilter } from '../core/createFieldValueFilter';
export function createFacets(facets: any): DisplayableFacet[] {
if (!facets) {
@@ -16,7 +16,7 @@ export function createFacets(facets: any): DisplayableFacet[] {
function createFacetOptions(options: any[]): DisplayableFacetOption[] {
return options.map((option: any) => {
- const filter = createFilter(option.filter);
+ const filter = createFieldValueFilter(option.filter);
return {
displayName: option.displayName,
diff --git a/test-site/index.html b/test-site/index.html
index 0c435a86..5bc1868c 100644
--- a/test-site/index.html
+++ b/test-site/index.html
@@ -6,6 +6,7 @@
+
diff --git a/test-site/src/js/index.js b/test-site/src/js/index.js
index 8ce2e33b..19a7ed73 100644
--- a/test-site/src/js/index.js
+++ b/test-site/src/js/index.js
@@ -3,7 +3,7 @@ import { provideCore } from '@yext/search-core';
import verticalRequest from './requests/verticalRequest';
import universalRequest from './requests/universalRequest';
import questionRequest from './requests/questionRequest';
-import { univeralAutocompleteRequest, verticalAutocompleteRequest, filterSearchRequest } from './requests/autoCompleteRequests';
+import { univeralAutocompleteRequest, verticalAutocompleteRequest, filterSearchRequest } from './requests/autocompleteRequests';
const coreConfig = {
apiKey: 'df4b24f4075800e5e9705090c54c6c13',
diff --git a/test-site/src/ts/index.ts b/test-site/src/ts/index.ts
index 675ac3cb..b844a45f 100644
--- a/test-site/src/ts/index.ts
+++ b/test-site/src/ts/index.ts
@@ -1,8 +1,9 @@
-import { provideCore, SearchConfig, SearchCore } from '@yext/search-core';
+import { provideCore, SearchConfig, SearchCore, UniversalSearchRequest, UniversalSearchResponse } from '@yext/search-core';
import verticalRequest from './requests/verticalRequest';
import universalRequest from './requests/universalRequest';
import questionRequest from './requests/questionRequest';
import { univeralAutocompleteRequest, verticalAutocompleteRequest, filterSearchRequest } from './requests/autocompleteRequests';
+import initDirectAnswers from './initDirectAnswers';
const coreConfig: SearchConfig = {
apiKey: '2d8c550071a64ea23e263118a2b0680b',
@@ -14,10 +15,20 @@ const coreConfig: SearchConfig = {
const element = document.createElement('pre');
window.onload = () => {
document.body.appendChild(element);
+ initDirectAnswers();
};
const globalCore: SearchCore = provideCore(coreConfig);
+export async function directAnswer(query: string): Promise {
+ loadingSpinner();
+ const startTime = new Date().getTime();
+ const req: UniversalSearchRequest = { query };
+ const res: UniversalSearchResponse = await globalCore.universalSearch(req);
+ updateUI(res.directAnswer, startTime, 'Universal Direct Answer Response:');
+ return res;
+}
+
export async function universalSearch(): Promise {
loadingSpinner();
const startTime = new Date().getTime();
diff --git a/test-site/src/ts/initDirectAnswers.ts b/test-site/src/ts/initDirectAnswers.ts
new file mode 100644
index 00000000..056bd593
--- /dev/null
+++ b/test-site/src/ts/initDirectAnswers.ts
@@ -0,0 +1,168 @@
+import { BuiltInFieldType, DirectAnswerType, FeaturedSnippetDirectAnswer, FieldValueDirectAnswer } from '@yext/search-core';
+import { directAnswer } from './index';
+
+/**
+ * The comments denote the expected {@link DirectAnswer.value} type.
+ */
+const FEATURED_SNIPPET_QUERIES = {
+ [BuiltInFieldType.MultiLineText]: [
+ 'what is oliver shi’s birthday', // string
+ 'who is chihaya ayase' // string
+ ],
+ [BuiltInFieldType.RichText]: [
+ 'how to rich text' // no value
+ ]
+};
+const FIELD_VALUE_QUERIES = {
+ [BuiltInFieldType.URL]: [
+ 'what is Abington\'s myurl ', // string
+ 'what are oliver shi\'s list of urls?' // string[]
+ ],
+ [BuiltInFieldType.SingleLineText]: [
+ 'Abington Services Offered' // string[]
+ ],
+ [BuiltInFieldType.Decimal]: [
+ 'oliver shi popularity', // string
+ 'what are oliver shi\'s favorite numbers?' // string[]
+ ],
+ [BuiltInFieldType.AndroidAppURL]: [
+ 'what is oliver shi\'s android app url?' // string
+ ],
+ [BuiltInFieldType.FacebookURL]: [
+ 'what is oliver shi\'s facebook url?' // string
+ ],
+ [BuiltInFieldType.IOSAppURL]: [
+ 'what is oliver shi\'s ios app url?' // string
+ ],
+ [BuiltInFieldType.InstagramHandle]: [
+ 'what is oliver shi\'s instagram handle?' // string
+ ],
+ [BuiltInFieldType.TwitterHandle]: [
+ 'what is oliver shi\'s twitter handle?' // string
+ ],
+ [BuiltInFieldType.RichText]: [
+ 'oliver shi my rich text field', // string
+ 'oliver shi multi line rich text' // string[]
+ ],
+ [BuiltInFieldType.ComplexURL]: [
+ 'oliver shi website url' // ComplexUrl
+ ],
+ [BuiltInFieldType.Integer]: [
+ 'oliver shi outdoor pools?' // number
+ ],
+ [BuiltInFieldType.Address]: [
+ 'oliver shi address?' // Address
+ ],
+ [BuiltInFieldType.Phone]: [
+ 'amani farooque phone number?' // string
+ ],
+ [BuiltInFieldType.Email]: [
+ 'oliver shi email' // string[]
+ ],
+ [BuiltInFieldType.Hours]: [
+ 'what are Abington hours?'
+ ]
+};
+
+export default function initDirectAnswers() {
+ const selectEl = document.getElementById('directAnswers');
+ if (!(selectEl instanceof HTMLSelectElement)) {
+ console.error('no select el found');
+ return;
+ }
+ const possibleQueries = [
+ ...Object.values(FEATURED_SNIPPET_QUERIES).flatMap(v => v),
+ ...Object.values(FIELD_VALUE_QUERIES).flatMap(v => v)
+ ];
+
+ possibleQueries.forEach(q => {
+ const optionEl = document.createElement('option');
+ optionEl.innerText = q;
+ selectEl.appendChild(optionEl);
+ });
+
+ selectEl.addEventListener('change', async e => {
+ const val = (e.target as HTMLSelectElement).value;
+ const res = await directAnswer(val);
+ const da = res.directAnswer;
+ if (da.type === DirectAnswerType.FieldValue) {
+ ensureFieldValueSwitchability(da);
+ } else if (da.type === DirectAnswerType.FeaturedSnippet) {
+ ensureFeaturedSnippetSwitchability(da);
+ }
+ });
+}
+
+/**
+ * This function will only compile if every direct answer case can be switched over,
+ * otherwise `da` will have type `never`, which will cause a compile time error when
+ * trying to access `da.value`.
+ */
+function ensureFieldValueSwitchability(da: FieldValueDirectAnswer) {
+ switch (da.fieldType) {
+ case BuiltInFieldType.AndroidAppURL:
+ console.log(da.value);
+ break;
+ case BuiltInFieldType.Decimal:
+ console.log(da.value);
+ break;
+ case BuiltInFieldType.FacebookURL:
+ console.log(da.value);
+ break;
+ case BuiltInFieldType.IOSAppURL:
+ console.log(da.value);
+ break;
+ case BuiltInFieldType.InstagramHandle:
+ console.log(da.value);
+ break;
+ case BuiltInFieldType.MultiLineText:
+ console.log(da.value);
+ break;
+ case BuiltInFieldType.RichText:
+ console.log(da.value);
+ break;
+ case BuiltInFieldType.SingleLineText:
+ console.log(da.value);
+ break;
+ case BuiltInFieldType.TwitterHandle:
+ console.log(da.value);
+ break;
+ case BuiltInFieldType.URL:
+ console.log(da.value);
+ break;
+ case BuiltInFieldType.ComplexURL:
+ console.log(da.value);
+ break;
+ case BuiltInFieldType.Integer:
+ console.log(da.value);
+ break;
+ case BuiltInFieldType.Address:
+ console.log(da.value);
+ break;
+ case BuiltInFieldType.Phone:
+ console.log(da.value);
+ break;
+ case BuiltInFieldType.Email:
+ console.log(da.value);
+ break;
+ case BuiltInFieldType.Hours:
+ console.log(da.value);
+ break;
+ }
+}
+
+/**
+ * This function will only compile if every direct answer case can be switched over,
+ * otherwise `da` will have type `never`, which will cause a compile time error when
+ * trying to access properties like `da.value` or `da.snippet`.
+ */
+function ensureFeaturedSnippetSwitchability(da: FeaturedSnippetDirectAnswer) {
+ switch (da.fieldType) {
+ case BuiltInFieldType.RichText:
+ console.log(da.snippet);
+ break;
+ case BuiltInFieldType.MultiLineText:
+ console.log(da.value);
+ break;
+ }
+}
diff --git a/test-site/tsconfig.json b/test-site/tsconfig.json
index 14649b15..6d28410b 100644
--- a/test-site/tsconfig.json
+++ b/test-site/tsconfig.json
@@ -4,6 +4,6 @@
"noImplicitAny": true,
"module": "commonjs",
"esModuleInterop": true,
- "target": "es2015",
+ "target": "es2019",
}
}
\ No newline at end of file
diff --git a/tests/infra/SearchServiceImpl.ts b/tests/infra/SearchServiceImpl.ts
index 3395c364..5460b3eb 100644
--- a/tests/infra/SearchServiceImpl.ts
+++ b/tests/infra/SearchServiceImpl.ts
@@ -74,7 +74,7 @@ describe('SearchService', () => {
});
describe('Universal Search', () => {
- const expectedUniversalUrl = 'https://liveapi.yext.com/v2/accounts/me/answers/query';
+ const expectedUniversalUrl = 'https://liveapi.yext.com/v2/accounts/me/search/query';
it('Query params are correct when only required params (without token) are supplied', async () => {
const requestWithRequiredParams: UniversalSearchRequest = {
@@ -200,7 +200,7 @@ describe('SearchService', () => {
});
describe('Vertical Search', () => {
- const expectedVerticalUrl = 'https://liveapi.yext.com/v2/accounts/me/answers/vertical/query';
+ const expectedVerticalUrl = 'https://liveapi.yext.com/v2/accounts/me/search/vertical/query';
it('Query params are correct when only required params (without token) are supplied', async () => {
const requestWithRequiredParams: VerticalSearchRequest = {
@@ -274,7 +274,8 @@ describe('SearchService', () => {
field: 'name',
type: SortType.Field
}],
- staticFilters: {
+ staticFilter: {
+ kind: 'fieldValue',
fieldId: 'city',
matcher: Matcher.NotEquals,
value: 'Arlington'
diff --git a/tests/serializers/serializeStaticFilters.ts b/tests/serializers/serializeStaticFilters.ts
index bc5684c0..98523b2b 100644
--- a/tests/serializers/serializeStaticFilters.ts
+++ b/tests/serializers/serializeStaticFilters.ts
@@ -1,19 +1,66 @@
import { Matcher } from '../../src/models/searchservice/common/Matcher';
-import { FilterCombinator } from '../../src/models/searchservice/request/CombinedFilter';
+import { FilterCombinator } from '../../src/models/searchservice/request/StaticFilter';
import { serializeStaticFilters } from '../../src/serializers/serializeStaticFilters';
it('serializeStaticFilters works with multiple levels of nesting', () => {
const actualSerializedFilters = serializeStaticFilters({
+ kind: 'conjunction',
filters: [
{
+ kind: 'disjunction',
filters:
[
- { fieldId: 'c_Region', matcher: Matcher.Equals, value: 'APAC' },
- { fieldId: 'c_Region', matcher: Matcher.Equals, value: 'EMEA' }
+ {
+ kind: 'fieldValue',
+ fieldId: 'c_Region',
+ matcher: Matcher.Equals,
+ value: 'APAC'
+ },
+ {
+ kind: 'disjunction',
+ filters: [
+ {
+ kind: 'fieldValue',
+ fieldId: 'c_Region',
+ matcher: Matcher.Equals,
+ value: 'EMEA'
+ },
+ {
+ kind: 'fieldValue',
+ fieldId: 'c_puppyPreference',
+ matcher: Matcher.Equals,
+ value: 'Frodo'
+ }
+ ],
+ combinator: FilterCombinator.OR
+ }
],
combinator: FilterCombinator.OR
},
- { fieldId: 'builtin.entityType', matcher: Matcher.Equals, value: 'Publication' },
+ {
+ kind: 'fieldValue',
+ fieldId: 'builtin.entityType',
+ matcher: Matcher.Equals,
+ value: 'Publication'
+ },
+ {
+ kind: 'conjunction',
+ filters: [
+ {
+ kind: 'fieldValue',
+ fieldId: 'c_puppyPreference',
+ matcher: Matcher.Equals,
+ value: 'Marty'
+ },
+ {
+ kind: 'fieldValue',
+ fieldId: 'c_employeeDepartment',
+ matcher: Matcher.Equals,
+ value: 'Technology'
+ },
+ ],
+ combinator: FilterCombinator.AND
+ }
],
combinator: FilterCombinator.AND
});
@@ -23,20 +70,42 @@ it('serializeStaticFilters works with multiple levels of nesting', () => {
{
$or: [
{ c_Region: { $eq: 'APAC' } },
- { c_Region: { $eq: 'EMEA' } }
+ {
+ $or: [
+ { c_Region: { $eq: 'EMEA' } },
+ { c_puppyPreference: { $eq: 'Frodo' } }
+ ]
+ }
+ ]
+ },
+ { 'builtin.entityType': { $eq: 'Publication' } },
+ {
+ $and: [
+ { c_puppyPreference: { $eq: 'Marty' } },
+ { c_employeeDepartment: { $eq: 'Technology' } }
]
},
- { 'builtin.entityType': { $eq: 'Publication' } }
]
};
expect(actualSerializedFilters).toEqual(JSON.stringify(expectedSerializedFilters));
});
-it('serializeStaticFilters works with a simple Combined Filter', () => {
+it('serializeStaticFilters works with a DisjunctionStaticFilter', () => {
const actualSerializedFilters = serializeStaticFilters({
+ kind: 'disjunction',
filters: [
- { fieldId: 'c_Region', matcher: Matcher.Equals, value: 'APAC' },
- { fieldId: 'c_Region', matcher: Matcher.Equals, value: 'EMEA' }
+ {
+ kind: 'fieldValue',
+ fieldId: 'c_Region',
+ matcher: Matcher.Equals,
+ value: 'APAC'
+ },
+ {
+ kind: 'fieldValue',
+ fieldId: 'c_Region',
+ matcher: Matcher.Equals,
+ value: 'EMEA'
+ }
],
combinator: FilterCombinator.OR
});
@@ -50,8 +119,38 @@ it('serializeStaticFilters works with a simple Combined Filter', () => {
expect(actualSerializedFilters).toEqual(JSON.stringify(expectedSerializedFilters));
});
-it('serializeStaticFilters works with only a Simple Filter', () => {
+it('serializeStaticFilters works with a ConjunctionStaticFilter', () => {
+ const actualSerializedFilters = serializeStaticFilters({
+ kind: 'conjunction',
+ filters: [
+ {
+ kind: 'fieldValue',
+ fieldId: 'c_Region',
+ matcher: Matcher.Equals,
+ value: 'APAC'
+ },
+ {
+ kind: 'fieldValue',
+ fieldId: 'builtin.entityType',
+ matcher: Matcher.Equals,
+ value: 'Publication'
+ }
+ ],
+ combinator: FilterCombinator.AND
+ });
+
+ const expectedSerializedFilters = {
+ $and: [
+ { c_Region: { $eq: 'APAC' } },
+ { 'builtin.entityType': { $eq: 'Publication' } }
+ ]
+ };
+ expect(actualSerializedFilters).toEqual(JSON.stringify(expectedSerializedFilters));
+});
+
+it('serializeStaticFilters works with a FieldValueStaticFilter', () => {
const actualSerializedFilters = serializeStaticFilters({
+ kind: 'fieldValue',
fieldId: 'c_Region',
matcher: Matcher.Equals,
value: 'APAC'
@@ -61,8 +160,9 @@ it('serializeStaticFilters works with only a Simple Filter', () => {
expect(actualSerializedFilters).toEqual(JSON.stringify(expectedSerializedFilters));
});
-it('serializeStaticFilters works with a $near Simple filter', () => {
+it('serializeStaticFilters works with a $near FieldValueStaticFilter', () => {
const actualSerializedFilters = serializeStaticFilters({
+ kind: 'fieldValue',
fieldId: 'builtin.location',
matcher: Matcher.Near,
value: {
@@ -84,9 +184,10 @@ it('serializeStaticFilters works with a $near Simple filter', () => {
expect(actualSerializedFilters).toEqual(JSON.stringify(expectedSerializedFilters));
});
-it('serializeStaticFilters works with a $between Simple filter', () => {
+it('serializeStaticFilters works with a $between FieldValueStaticFilter', () => {
const actualSerializedFilters = serializeStaticFilters(
{
+ kind: 'fieldValue',
fieldId: 'price',
matcher: Matcher.Between,
value: {
@@ -102,9 +203,10 @@ it('serializeStaticFilters works with a $between Simple filter', () => {
expect(actualSerializedFilters).toEqual(JSON.stringify(expectedSerializedFilters));
});
-it('serializeStaticFilters works with only lower limit defined for a $between Simple filter', () => {
+it('serializeStaticFilters works with only lower limit defined for a $between FieldValueStaticFilter', () => {
const actualSerializedFilters = serializeStaticFilters(
{
+ kind: 'fieldValue',
fieldId: 'price',
matcher: Matcher.Between,
value: {
@@ -118,9 +220,10 @@ it('serializeStaticFilters works with only lower limit defined for a $between Si
expect(actualSerializedFilters).toEqual(JSON.stringify(expectedSerializedFilters));
});
-it('serializeStaticFilters works with only upper limit defined for a $between Simple filter', () => {
+it('serializeStaticFilters works with only upper limit defined for a $between FieldValueStaticFilter', () => {
const actualSerializedFilters = serializeStaticFilters(
{
+ kind: 'fieldValue',
fieldId: 'price',
matcher: Matcher.Between,
value: {
@@ -132,4 +235,57 @@ it('serializeStaticFilters works with only upper limit defined for a $between Si
price: { $lt: 10 }
};
expect(actualSerializedFilters).toEqual(JSON.stringify(expectedSerializedFilters));
-});
\ No newline at end of file
+});
+
+it('serializeStaticFilters works with a nested filter with single or no children', () => {
+ const actualSerializedFilters = serializeStaticFilters({
+ kind: 'conjunction',
+ filters: [
+ {
+ kind: 'disjunction',
+ filters: [],
+ combinator: FilterCombinator.OR
+ },
+ {
+ kind: 'fieldValue',
+ fieldId: 'builtin.entityType',
+ matcher: Matcher.Equals,
+ value: 'Publication'
+ },
+ ],
+ combinator: FilterCombinator.AND
+ });
+
+ const expectedSerializedFilters = {
+ 'builtin.entityType': { $eq: 'Publication' }
+ };
+ expect(actualSerializedFilters).toEqual(JSON.stringify(expectedSerializedFilters));
+});
+
+it('serializeStaticFilters works with a DisjunctionStaticFilter with no children', () => {
+ const actualSerializedFilters = serializeStaticFilters({
+ kind: 'disjunction',
+ filters: [],
+ combinator: FilterCombinator.OR
+ });
+
+ expect(actualSerializedFilters).toBeUndefined();
+});
+
+it('serializeStaticFilters works with a nested ConjunctionStaticFilter with no children', () => {
+ const actualSerializedFilters = serializeStaticFilters({
+ kind: 'conjunction',
+ filters: [{
+ kind: 'conjunction',
+ filters: [],
+ combinator: FilterCombinator.AND
+ }, {
+ kind: 'disjunction',
+ filters: [],
+ combinator: FilterCombinator.OR
+ }],
+ combinator: FilterCombinator.AND
+ });
+
+ expect(actualSerializedFilters).toBeUndefined();
+});
diff --git a/tests/transformers/searchservice/createDirectAnswer.ts b/tests/transformers/searchservice/createDirectAnswer.ts
index eb1d54fa..78b90aed 100644
--- a/tests/transformers/searchservice/createDirectAnswer.ts
+++ b/tests/transformers/searchservice/createDirectAnswer.ts
@@ -1,5 +1,5 @@
import { createDirectAnswer } from '../../../src/transformers/searchservice/createDirectAnswer';
-import { DirectAnswerType } from '../../../src/models/searchservice/response/DirectAnswerType';
+import { DirectAnswerType } from '../../../src/models/searchservice/response/directanswer/DirectAnswerType';
it('can create a FeaturedSnippetDirectAnswer', () => {
const apiFeaturedSnippetDirectAnswer = {
@@ -32,6 +32,26 @@ it('can create a FeaturedSnippetDirectAnswer', () => {
expect(actualDirectAnswer).toMatchObject(expectedDirectAnswer);
});
+it('can handle unexpected fieldType for a FeaturedSnippetDirectAnswer', () => {
+ const apiFeaturedSnippetDirectAnswer = {
+ type: 'FEATURED_SNIPPET',
+ answer: {
+ value: 'Honolulu. Hawaii',
+ fieldType: 'phone',
+ snippet: {
+ matchedSubstrings: [{ offset: 31, length: 16 }],
+ value: '111 222 3333'
+ }
+ },
+ relatedItem: {
+ verticalConfigId: 'wiki_bios',
+ data: {}
+ }
+ };
+ expect(() => createDirectAnswer(apiFeaturedSnippetDirectAnswer))
+ .toThrow('Unexpected fieldType for featured snippet direct answer: phone');
+});
+
it('can create a FieldValueDirectAnswer', () => {
const apiFieldValueDirectAnswer = {
type: 'FIELD_VALUE',
@@ -59,4 +79,26 @@ it('can create a FieldValueDirectAnswer', () => {
fieldType: 'phone'
};
expect(actualDirectAnswer).toMatchObject(expectedDirectAnswer);
+});
+
+it('can create a custom FieldValueDirectAnswer', () => {
+ const apiFieldValueDirectAnswer = {
+ type: 'FIELD_VALUE',
+ answer: {
+ value: {
+ color: 'yellow',
+ os: 'android'
+ },
+ entityName: 'Obama Phone',
+ fieldName: 'Phone Description',
+ fieldApiName: 'phoneDescription',
+ fieldType: 'c3350634.specialtype'
+ },
+ relatedItem: {
+ verticalConfigId: 'phone',
+ data: {}
+ }
+ };
+ const actualDirectAnswer = createDirectAnswer(apiFieldValueDirectAnswer);
+ expect(actualDirectAnswer).toMatchObject(expect.objectContaining({ fieldType: 'unknown' }));
});
\ No newline at end of file