The Microsoft Careers Portal processes 10 million job applications per year. For a tailored user experience, it uses Azure AI Search for features like hierarchical facets and dynamic filtering.
Faceted navigation and filtering are vital components in modern search applications, enhancing the ability to deliver precise, contextually relevant results. E-commerce websites often utilize filters to help users refine product searches, while more advanced applications, such as those powered by Azure AI Search, extend these capabilities to support features like geo-spatial filtering, hierarchical facets, and dynamic filtering for a tailored user experience.
This case study examines the use of Azure AI Search within the Microsoft Careers Portal, which processes roughly 10 million job applications annually. The study highlights the complexities of implementing multi-layered, interconnected filters and facets in an enterprise setting. By default, Azure AI Search provides counts for specified facets when a filter value is selected; however, additional customization ensures dynamic updates for filter and facet counts across unselected categories. This paper proposes an innovative approach for leveraging Azure AI Search’s existing capabilities to handle these complex requirements, offering a scalable solution applicable across diverse enterprise use cases.
1. Introduction
The Microsoft Careers Portal integrates several first-party Microsoft products to deliver a seamless and user-centric experience for both internal employees and external job seekers. The portal provides various filters, including Experience, Work-Site Preference, Profession, and Employment Type, which are tailored based on user profiles to streamline the search for relevant job opportunities.
Built on Azure AI Search, the portal offers advanced search capabilities such as Boolean search, exact- match, fuzzy search and semantic ranking. These features enhance the user experience by ensuring that job listings are accurate and relevant. However, when users select multiple filters across categories, the complexity increases in maintaining accurate facet counts in real-time. Despite these challenges, Azure AI Search supports a robust faceted navigation experience, dynamically adjusting filter counts to reflect ongoing user selections with custom solution shared in this study.
2. Azure AI Search: Key Features Capabilities
2.1 Basic Concepts and features
Azure AI Search provides a scalable, secure search platform capable of handling both traditional keyword and AI-augmented retrieval applications such as vector and hybrid search. The following are it’s key components:
- Comprehensive Retrieval System: Supports full-text, hybrid, and vector search within an index, with field-level faceting enabled by setting fields as ”facetable.”
- Advanced Query Syntax: Facilitates complex queries, including hybrid queries, fuzzy search, auto- complete, geo-search, and vector queries, enabling refined control over search functionality.
- Semantic Relevance Tuning: Offers semantic ranking, document boosting via scoring profiles, vector weighting, and other runtime parameters for optimizing query behavior.
- Language Analyzers: An analyzer is a component of full-text search engine responsible for processing strings during indexing and query execution.
- OData Filter Expressions: Provides granular control over filtering, with support for combining Boolean and full-text search expressions.
2.2 Filters and Faceted Navigation
Azure AI Search, filters and facets provide users with a refined search experience:
- Faceted Navigation: Enables users to interactively filter results, such as job type or location, through an intuitive UI.
- Filterable Fields: These fields allow filtering operations, where fields marked as ”filterable” increase the index size. It’s recommended to disable ”filterable” for fields not used in filters to optimize performance.
Example Request: Filtering for results where the BaseRate is less than 150 in a Rooms collection is illustrated in Listing 1 below:
Faceted navigation is used for self-directed drilldown filtering on query results in a search app, where your application offers form controls for scoping search to groups of documents (for example, categories or brands), to support the experience.
Text filters match string fields against literal strings that you provide in the filter. Unlike full-text search, there’s no lexical analysis or word-breaking for text filters, so comparisons are for exact matches only. For example: $filter=Category eq 'Resort and Spa', will only filter documents with text - 'Resort and Spa'.
Approaches for filtering on text:
- search.in: A function that matches a field against a delimited list of strings. It is used where many raw text values need to be matched with a string field.
- search.ismatch: A function that allows you to mix full-text search operations with strictly Boolean filter operations in the same filter expression. It is used where we want multiple search-filter combinations in one request.
- $filter=field operator string: A user-defined expression composed of fields, operators, and values. It is used to find exact matches between a string field and a string value.
3. Customized Implementation for Microsoft Careers Portal
3.1 Career’s site requirement with Filter & Faceted navigation
The Microsoft Careers Portal required an approach to dynamically update filter and facet counts as users interacted with the search filters. Specifically, when a user selects a filter value within one category, Azure AI Search should update facet counts across all other unselected categories. This requirement ensures that users receive accurate results reflecting the available job listings, even as filter selections evolve.
For example, when a user selects ”Software Engineering” under the Profession filter, counts in related facets (such as Discipline and Work Site) are adjusted based on the available jobs in that profession. This behavior is visually demonstrated in Figure 1 below.
3.2 Solution Approach
The solution involves four categories of filters (A, B, C, and D). When a user selects values from Categories A and B, the system updates the facet counts across other categories as follows:
- Primary Query Execution: The selected values within the same category are combined with OR, and across categories with AND, to generate an accurate search result set.
- Updating Filter Values in Unselected Categories: Additional queries are executed for categories without selected values to retrieve updated counts. This iterative query approach ensures that unselected facets reflect the correct result counts. This approach allows the Microsoft Careers Portal to deliver a dynamic, real-time faceted navigation experience, keeping filter counts accurate and improving user satisfaction.
3.3 Best Practices Learned While Implementation
- Custom analyzer on specific fields helps to enhance search for documents having matching keywords. For example, in job descriptions we have #hastags based keyword which are used with jobs posted during campaigns or some teams for boosting search. A custom-analyzer is invoked on a per-field basis and is recommended to use to cater dynamic search needs.
- Define scoring profiles cautiously:
- Prioritize Important Fields: Assign higher weights to fields that are more relevant to the search context. For example, the "Title" field has a higher weight compared to other fields, indicating its importance in search relevance.
- Use Freshness Boosts: Incorporate freshness boosts to prioritize recent content. This is particularly useful for time-sensitive data. Adjust the boost value and interpolation method based on the desired impact. For instance, a higher boost with linear interpolation is used for recency-sensitive profiles.
- Combine Multiple Scoring Functions: Use a combination of text weights and scoring functions to achieve a balanced relevance score. The functionAggregation method "sum" is used to aggregate the scores from different functions.
- Test and Iterate: Regularly test and refine scoring profiles based on search performance and user feedback. Adjust weights, boost values, and interpolation methods as needed to improve search relevance.
3.4 Performance Evaluation
A service-side performance test was conducted in a production-cloned environment at Azure Test Runner to validate the implementation under high-load conditions, with the portal supporting approximately 50,000-60,000 searches daily. Our search-service app service triggered requests directly to Azure AI Search deployed instance. Performance results are shown below:
Request Per Second |
Filters Count |
Average Latency(ms) |
20 RPS |
1 |
429 |
30 RPS |
1 |
635 |
30 RPS |
21 |
482 |
30 RPS |
70 |
712 |
Performance was optimized with a replica count of 1-7 and a consistent partition count of 1, with Web App SKU - S1 App Service Plan and scale-out configuration between 1-3 instances on below:
- (Average) CPU consumption > 70%
- (Average) Memory percentage > 80%
- (Average) HTTP Response time > 10s
3.5 Conclusion
This case study demonstrates how Azure AI Search can effectively address complex requirements for faceted navigation in high-traffic, enterprise-level applications like Microsoft Careers. By enabling real- time, multi-layered filter updates, Azure AI Search not only meets but exceeds industry standards for search performance and relevance, reinforcing its position as a state-of-the-art solution for sophisticated search and retrieval needs.
For developers and architects looking to implement similar capabilities, Azure AI Search provides a comprehensive platform capable of scaling to meet diverse business requirements.
Contributors: Prachi Nautiyal, Pradip Takate, Farzad Sunavala, Abhishek Mishra, Bipul Raman, Satya Vamsi Gadikoyila, Ashudeep Reshi