Configure serving controls for search
Stay organized with collections
Save and categorize content based on your preferences.
Serving controls (also called controls) change the default
behavior of how a request is served when results are returned. Serving controls
act at a data-store level.
For example, controls can boost and bury results, filter entries from returned
results, associate strings with each other as synonyms, or redirect results to
specified URIs.
This page describes serving controls for search apps. For information about
using serving controls with media recommendations, see Create and manage media
serving configs.
About serving controls
To change the results of a request, first create a serving control. Then, attach
that control to the serving config of a search app. A
serving config configures
metadata that's used to generate serving time results, such as search results or
answers. A serving control only affects requests served by the app if the
control is attached to the app's serving config.
Some controls, such as boost controls, have dependencies on data stores. If a
data store is removed from an app, then any data store-dependent controls are
also removed from that app and become inactive, but are not deleted.
Serving control types
The following types of serving controls are available:
Search apps with data stores that support a schema, such as data stores that contain structured data, websites with structured data (advanced website indexing), unstructured data with metadata, or media data
Search apps with data stores that support a schema, such as data stores that contain structured data, websites (advanced website indexing), unstructured data with metadata, or media data
When creating a control, you can optionally define a condition that determines
when the control is applied. Conditions are defined using condition fields. The
following condition fields are available:
Query terms (queryTerms). An optional control that's applied when
specific queries are searched for. When the queryTerms condition is used,
the control is applied when the value of queryTerms matches a term in
SearchRequest.query. Query terms can only be used when the
Control.searchUseCase is set as SOLUTION_TYPE_SEARCH. Up to 10 different
queryTerms can be specified on a single Control.condition. If no query
terms are specified, the queryTerms field is ignored.
For a promote serving control, queryTerms can't be specified if you're
specifying the queryRegex condition, which is applicable to
basic website search only. Additionally, the fullMatch field for
basic website search, must be set to true if queryTerms is specified.
For all other search apps, only queryTerms is supported and fullMatch can
be set to true or false.
Time range (activeTimeRange). An optional control that's applied when a
request occurs within a specified time range. It checks that the time a
request was received is between activeTimeRange.startTime and
activeTimeRange.endTime. Up to 10 activeTimeRange ranges can be specified
on a single Control.condition. If the activeTimeRange field isn't
specified, the field is ignored.
queryRegex. Only available for a promote serving control
for basic website search only. This is
an optional condition that applies the control when the
query matches the specified regular expression. This condition can't be
specified if you're specifying the queryTerms condition.
If multiple conditions are specified for a control, the control is applied
to the search request when both condition types are satisfied. If multiple
values for the same condition are specified, only one of the values needs to
match for that condition to be satisfied.
For example, consider the following condition with two query terms specified:
The condition will be satisfied for a request with
SearchRequest.query="gShoe" or a request with SearchRequest.query="gBoot",
but won't be satisfied with SearchRequest.query="gSandal" or any other
string.
If no conditions are specified, the control is always applied.
For more information, see the Condition field in the API
reference.
Create and attach boost serving controls
A boost serving control reorders the results by promoting or demoting them based
on the applied conditions. Boost works by applying a multiplying factor to the
ranking of a document that meets the boost conditions.
Use the following instructions to create a boost serving control.
Console
To create and attach a boost control using the Google Cloud console, do the
following:
In the Google Cloud console, go to the AI Applications page.
Select the app for which you want to create the boost control.
On your app's overview page, make sure you are on the System overview
tab.
In the Signal stage, click the Boost/Bury tile.
Click Create control.
For Name Your Control, enter a name for your boost/bury control and
click Continue.
For Set Rule Scope & Impact, define the actions that you want to
trigger with this control:
Select a data store from the list. If you want the action to be
applied to multiple data stores, create a control for each data
store.
For Filter, add a filter.
This is a string specifying requirements that must be
met by the document. Only if the document matches all the
requirements, the boost condition is applied. Otherwise, there is no
change. If you don't specify a filter, then the boost is applied to
all documents in the data store.
For Boost/bury value, select a boost/bury value in the range
[-1, 1] using the slider. The slider moves in steps of 0.01.
Click Continue.
For Optional: When This Rule Activates, set the following conditions
that trigger the control. If no conditions are configured, the control is
always in effect:
Add Partial match query terms. The control takes effect when
these query terms match partially.
Add Exact match query terms. The control takes effect when these
query terms match exactly.
To add an active time range, click Add time range and set
Start Time 1 and End Time 1. This defines the window when the
condition is active. You can add a maximum of 10 time ranges.
Click Continue.
For Additional settings, choose if you want to activate the rule:
If you don't want to activate this control as soon as it's created,
turn off Publish this control immediately.
Click Continue.
Click Submit.
REST
A boost serving control is defined as a control with a boostAction.
Use the following instructions to create a boost serving control.
PROJECT_ID: the number or ID of your Google Cloud project.
APP_ID: the ID of the Agent Search app.
CONTROL_ID: a unique identifier for the control.
The ID can contain [1-63] characters that can be letters, digits, hyphens,
and underscores.
DISPLAY_NAME: the human-readable name for the control.
Google recommends that this name provide an indication of when or why to
use the control. Must be a UTF-8 encoded string with length [1,128].
USE_CASE: must be either SEARCH_USE_CASE_SEARCH or
SEARCH_USE_CASE_BROWSE. If SEARCH_USE_CASE_BROWSE is specified,
then Condition.queryTerms can't be used in the condition.
CONDITION: an optional field that defines when the
control should be applied. Contains the following fields:
VALUE: the specific query value to match
against. It's a lowercase UTF-8 string with length [1, 5000]. If
FULL_MATCH_1 is true, this field can have at
most three space-separated terms.
FULL_MATCH: a boolean that indicates whether
the search query needs to exactly match the query term. When set to
true, it requires SearchRequest.query to completely match the
queryTerm.value. When set to false, it requires
SearchRequest.query to contain queryTerm.value as a substring.
START_TIMESTAMP: a timestamp in RFC 3339 UTC
"Zulu" format to indicate the start of a time range.
END_TIMESTAMP: a timestamp in RFC 3339 UTC
"Zulu" format to indicate the end of a time range.
BOOST_VALUE:
a floating point number in the range [-1,1]. When the value is
negative, results are demoted (they appear lower down in the
results). When the value is positive, results are promoted
(they appear higher up in the results).
For more information, see
boostAction.
FILTER: a string specifying requirements that must
be met by the document. If the document matches all the requirements, the
boost is applied. Otherwise, there is no change. If this field is empty, then
the boost is applied to all documents in the data store. For information
about the filtering syntax, see Filter expression
syntax and Syntax for advanced website indexing. For a list key property fields that
can be used in filters, see Key properties that support
filtering.
DATA_STORE_RESOURCE_PATH: the full resource path of
the data store whose documents should be boosted by this control. The
format of the full resource path is
projects/PROJECT_NUMBER/locations/LOCATION_ID/collections/default_collection/dataStores/DATA_STORE_ID.
This data store must be attached to the engine specified in the request.
Replace
BOOST_ID_N with the control IDs that you
created in the previous step.
Create and attach filter serving controls
A filter serving control filters by a given criteria or rule. For example, for
hotel site, you can apply a filter for (price < 175 AND petfriendly = "true")
that only shows pet-friendly hotels under the price of $175 USD per night.
A filter serving control is defined as a control with a filterAction.
Use the following instructions to create a filter serving control.
Select the app for which you want to create the promote control.
On your app's overview page, make sure you are on the System overview tab.
In the Signal stage, click the Filter tile.
Click Create control.
For Name Your Control, enter a name for your filter control and click
Continue.
For Rule Scope & Impact, set the following:
Select a data store from the list that you want to attach this
filter control to. If you want the action to be applied to multiple
data stores, create a control for each data store.
For Filter, tell the rule which specific items to look for. You
can combine search terms using AND, OR, NOT, and group
terms with (). For exact phrases, use quotes "". For
example: status: "open" AND priority:"P1".
For Optional: When This Rule Activates, define the actions that you
want to trigger with this control. If no conditions are configured, the
control is always in effect:
Add Partial match query terms. The control takes effect when
these query terms match partially.
Add Exact match query terms. The control takes effect when
these query terms match exactly.
To add an active time range, click Add time range and set
Start Time 1 and End Time 1. This defines the window when the
condition is active. You can add a maximum of 10 time ranges.
Click Continue.
For Additional settings, choose if you want to activate the rule:
If you don't want to activate this control as soon as it's created, turn
off Publish this control immediately.
Click Continue.
Click Submit.
REST
Find your app ID. If you already have your app ID, skip to the next step.
In the Google Cloud console, go to the AI Applications page.
PROJECT_ID: the number or ID of your Google Cloud project.
APP_ID: the ID of the Agent Search app.
CONTROL_ID: a unique identifier for the control.
The ID can contain [1-63] characters that can be letters, digits, hyphens,
and underscores.
DISPLAY_NAME: the human-readable name for the control.
Google recommends that this name provide an indication of when or why to
use the control. Must be a UTF-8 encoded string with length [1,128].
USE_CASE: must be either SEARCH_USE_CASE_SEARCH or
SEARCH_USE_CASE_BROWSE. If SEARCH_USE_CASE_BROWSE is specified,
then Condition.queryTerms can't be used in the condition.
CONDITION: an optional field that defines when the
control should be applied. Contains the following fields:
VALUE: the specific query value to match
against. It's a lowercase UTF-8 string with length [1, 5000]. If
FULL_MATCH_1 is true, this field can have at
most three space-separated terms.
FULL_MATCH: a boolean that indicates whether
the search query needs to exactly match the query term. When set to
true, it requires SearchRequest.query to completely match the
queryTerm.value. When set to false, it requires
SearchRequest.query to contain queryTerm.value as a substring.
START_TIMESTAMP: a timestamp in RFC 3339 UTC
"Zulu" format to indicate the start of a time range.
END_TIMESTAMP: a timestamp in RFC 3339 UTC
"Zulu" format to indicate the end of a time range.
FILTER: a string specifying requirements that must
be met by the document. If the document matches all the requirements, the
document is returned in the results. Otherwise, the document is not in the
results.
PROJECT_ID: the number or ID of your Google Cloud project.
APP_ID: the ID of the Agent Search app.
CONTROL_ID: a unique identifier for the control.
The ID can contain [1-63] characters that can be letters, digits, hyphens,
and underscores.
DISPLAY_NAME: the human-readable name for the control.
Google recommends that this name provide an indication of when or why to
use the control. Must be a UTF-8 encoded string with length [1,128].
USE_CASE: must be either SEARCH_USE_CASE_SEARCH or
SEARCH_USE_CASE_BROWSE. If SEARCH_USE_CASE_BROWSE is specified,
then Condition.queryTerms can't be used in the condition.
CONDITION: an optional field that defines when the
control should be applied. Contains the following fields:
VALUE: the specific query value to match
against. It's a lowercase UTF-8 string with length [1, 5000]. If
FULL_MATCH_1 is true, this field can have at
most three space-separated terms.
FULL_MATCH: a boolean that indicates whether
the search query needs to exactly match the query term. When set to
true, it requires SearchRequest.query to completely match the
queryTerm.value. When set to false, it requires
SearchRequest.query to contain queryTerm.value as a substring.
START_TIMESTAMP: a timestamp in RFC 3339 UTC
"Zulu" format to indicate the start of a time range.
END_TIMESTAMP: a timestamp in RFC 3339 UTC
"Zulu" format to indicate the end of a time range.
REDIRECT_URI_N: a URI where you are redirected. Can
have a maximum length of 2000 characters. For example, if the value of the
query term is "support", you can set a redirect to your technical support
page instead of returning (or failing to return) search results for
"support". In this example, the redirect URI becomes "https://www.example.com/support".
For more information, see redirectAction.
Replace
REDIRECT_ID_N with the control IDs that you
created in the previous step.
Create and attach promote serving controls
A promote serving control lets you display a link as a promoted result and
is available for the following types of search data stores:
Website data stores with basic website search: For these data stores, you
don't need to attach a promote control to the serving config of the app.
Creating and enabling a promote control activates the promote
control. You can turn a promote control on or off by enabling
or disabling it.
Data stores with structured and unstructured data, website data
with advanced website indexing, and blended search apps: For these
data stores, you need to attach the promote control to the
serving config.
Promote controls are defined using a promoteAction.
To successfully create a promote control, one of the following fields is
required in the creation request:
queryTerms: This condition can't be specified if you're specifying the
queryRegex condition, which is applicable to basic website search only.
For basic website search, fullMatch must be set to true if
queryTerms is specified. For all other search apps, only queryTerms is
supported and fullMatch can be set to true or false.
queryRegex. Only available for a promote serving control
for basic website search only. This condition applies the control when the
query matches the specified regular expression. This condition can't be
specified if you're specifying the queryTerms condition.
That is, for basic website search, you must either specify the queryTerms
field with fullMatch set to true or specify the queryRegex field. For all
other types of search, specify the queryTerms field with fullMatch set to
true or false.
Use the following instructions to create a promote serving control.
Select the app for which you want to modify controls.
In the System overview tab, select either the Prepare or Signal
stage where your control is located.
In the list of the app's controls, click more_vert for a control that you want to modify
and click Edit.
Edit the control in the Edit control pane:
To enable or disable a control, in the list of the
app's filter controls, click
more_vert
for a control that you want to enable or disable and click Enable or
Disable, respectively.
To delete a control, in the list of the
app's controls, click
more_vert
for a control that you want to delete and click Delete.
What's next
To understand the impact of a serving control on the search quality of a
custom search app, evaluate the search quality. For more information, see
Evaluate search quality.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2026-06-09 UTC."],[],[]]