Get personalized browse results Stay organized with collections Save and categorize content based on your preferences.
Browsing is a navigational search that has no query. Browsing uses navigationalmethods to display search results that match the end user's selected categoriesor filters. When used in collaboration with user engagement, you can offer youruserspersonalized browsing. Personalized browsing provides real-time,user-specific feeds based on user interaction history and content features. Itaims to optimize search results for defined KPIs while adhering to yourstrategic controls. For example, a real-estate website can get differenthomepages for its users in London, UK, and in Sydney, Australia; a shoppingwebsite can cater tailor-made results depending upon the user profile.
This page describes how to get browse results for custom search data storesand some best practices to set up your search app.
About personalized browse
The Vertex AI Search personalized browse uses neural networks torankdocuments based on predicted userengagement and conversion. For example, with personalized browsing, you canserve ranked entries in a hotel catalog or articles in a website and return themto the users based on predicted likelihood of clicks or inquiry.
At its core, personalized browse is a sophisticated model that learns theintricate relationships between user navigation patterns, the contents andfeatures of your documents, and user conversion events. Some important featuresare as follows:
Ranking: The model ranks items based on predicted performance against yourdefined objective that's subject to the configured search parameters, such asfilters, custom ranking, and serving controls (like boost, promote, orsynonyms).
Training and refining: After the initial training, the model is continuouslyrefined using live, user-event streams. The model adapts and improves over time.
Diversity: The model implicitly learns about diversity because it recordsnegative signals from non-interaction, such as ignored links, time spent on apage, and jump rates.
How browse differs from search
The following table presents the differences between searching and browsing.
| Feature | Search | Browse |
|---|---|---|
| Purpose | Find specific information | Explore and discover content |
| Example | Searching for "best Koreanrestaurants in Vancouver"on Google Search | Browsing for a restaurant based on thecategories where it might belong,such as "Restaurants > Korean >Vancouver > 4 star and above" |
| UserIntent | Typically goal-oriented | Exploratory |
| Startingpoint | A query or keywordtypically in a search bar | A specific website or platform typicallyusing a menu, breadcrumbs, links, orother navigation methods like facets |
| Method | Entering keywords orphrases and applyingsearch and servingconfiguration | Searching with an empty query, applyingsearch and serving configuration |
| Results | A list of relevant results | All the documents in the data store thatmatch the filters |
Workflow and best practices
Personalized browse is a Google-managed service and Google handles theunderlying deep learning models and data pipelines. To get the best out of thisservice, when you develop your search app, your primary technicalresponsibilities include the following:
- Data provisioning: Collect and supply a comprehensive data store of documentsand user events.
- Objective definition: Specify KPIs for optimization, such as click-throughrate (CTR), high-value actions, and revenue per session with the provided userevents. Make sure that the types of user events that you collect support theobjectives.
- Search parameters: Define and configure search parameters and servingcontrols in your search request. For example, date ranges to filter thelistings or articles that are allowed or boost controls to reorder blogsaccording to their ratings.
In a Vertex AI Search search app, to browse is to search withno query or an empty query. To get browse results, in a custom search datastore, you can call thesearch method leaving the query empty.
Broadly, these are the steps to get the best results for personalized browse:
Have correct and consistent data:
- Accurate timestamp for every user event.
- Consistent user IDs across all user events.
- Document IDs that match between user events and the data store. If you'reusing a sitemap, then its URLs must match the URLs in the user events.
- Filters to serve the exact content on your browsed pages.For more information, seeFilter website search andFilter custom search for structured and unstructured data.
Prepare and ingest your documents:
- Define your schema with as many attributes as you can. The more theattributes, the better the personalization.
- If you're crawling your websites,turn on advanced indexing andenrich your web pages with structured data.
- Prepare your data for ingestion using the instructions inPrepare data for ingesting.
- Create a search data store to ingestyour data. Alternatively,create and update documentsthat can manage the data that needs to be searched or browsed.
- If you're using sitemaps for your website data, maintain them to index themost up-to-date web pages. Either alternatively or additionally, runmanual refresh forspecific pages that are recently updated. Keeping the index fresh yieldsbetter results.
Prepare and ingest user events:
- Prepare at least 30 days of user events for the initial model training.You can use either or bothhistorical user events anduser events in real time..Real-time events yield better personalization results.
- Record and share the
searchevent (used to capture browse data),theview-itemevent, and theconversionevent. - All user events must include the following:
eventTypesuch assearchfor search andbrowse,view-item, andconversion.userPseudoId, which is a consistent pseudonymized useridentifier.eventTime, which is an ISO 8601 timestamp (UTC) for whenthe event was recorded.documents.idshown in the order they appear to the userthat matches document IDs.searchInfo.searchQueryto register the user's searchquery.pageInfo.pageCategorythat adds a context, such as"HomepageCarousel", "Properties > VIC > Richmond".filterthat describes the filter logic used to generatethe impression list. This is often captured by thepageCategoryfield or through system understanding.
For more information, see
userEvents.Enable model training and model pipeline:
After preparing your data and gathering the user events, contact your GoogleCustomer Engineer (CE). The CE can review your data and activate thepersonalization model for your app.
Get personalized browse results
Add more fields to your search request like filters and ranking adjustments,such as boost or custom ranking.
Maintain and keep your data fresh:
Over time, keep your the documents in your data store up-to-date and keepuploading fresh user events. This ensures the model can access the latestdocuments and user interactions for personalized results.
Get browse results for an app with website data
To use the API to get browse results for an app with website data, do thefollowing:
Find your app ID. If you already have your app ID, skip to the next step.
In the Google Cloud console, go to theAI Applications page.
On theApps page, find the name of your app and get the app's ID fromtheID column.
Call the
engines.servingConfigs.searchmethod with anempty query or no query as follows:REST
Key Term: In Vertex AI Search, the termapp can be used interchangeably with the termengine in the context of APIs.curl-XPOST-H"Authorization: Bearer$(gcloudauthprint-access-token)"\-H"Content-Type: application/json"\"https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search"\-d'{"servingConfig": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search","orderBy": "ORDER_BY","params": { "searchType": "0" },"filter": "FILTER","boostSpec": "BOOST_SPEC",}'Replace the following:
PROJECT_ID: the ID of your Google Cloud project.APP_ID: the ID of the Vertex AI Search app that youwant to query.ORDER_BY: optional. The order in which the results are arranged. The attribute to sort on must have a numerical interpretation—for example,date. For more information, seeOrder web search results.FILTER: optional but recommended. A text field for filtering your search using a filter expression. The default value is an empty string. For more information about using thefilterfield, seeFilter generic search for structured or unstructured data andFilter website search.BOOST_SPEC: optional. A specification to boost or bury documents. Values:BOOST: a floating point number in the range [-1,1]. When the value isnegative, results are demoted (they appear lower down in theresults). When the value is positive, results are promoted(they appear higher up in the results).CONDITION: atext filter expressionto select the documents to which boost is applied. The filter must evaluateto a boolean value.To learn about boost for structured search, seeBoost search results.
You should receive a JSON response similar to the following truncated response.The response contains itemized search results listed in the order that'sdetermined by the fields set in the search request.
Response
{"results": [ { "id": "DOCUMENT_ID", "document": { "name": "projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/branches/0/documents/DOCUMENT_ID", "id": "DOCUMENT_ID", "structData": {}, "derivedStructData": { "displayLink": "LINK_TO_BE_DISPLAYED", "link": "DOCUMENT_URL", … } } }, { "id": "DOCUMENT_ID", "document": { "name": "projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/branches/0/documents/DOCUMENT_ID", "id": "DOCUMENT_ID", "structData": {}, "derivedStructData": { "displayLink": "LINK_TO_BE_DISPLAYED", "link": "DOCUMENT_URL", … } } } …]}
Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2026-02-19 UTC.