{"id":231904,"date":"2021-03-02T10:30:30","date_gmt":"2021-03-02T18:30:30","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/visualstudio\/?p=231904"},"modified":"2021-02-26T22:32:21","modified_gmt":"2021-02-27T06:32:21","slug":"intelligent-visual-studio-search-service","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/visualstudio\/intelligent-visual-studio-search-service\/","title":{"rendered":"Intelligent Visual Studio Search Service"},"content":{"rendered":"<p><span data-contrast=\"auto\">In\u00a0<\/span><span data-contrast=\"auto\">Visual Studio\u00a0<\/span><span data-contrast=\"auto\">(VS)<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">2019<\/span><span data-contrast=\"auto\">\u00a0v16.<\/span><span data-contrast=\"auto\">0 rele<\/span><span data-contrast=\"auto\">a<\/span><span data-contrast=\"auto\">se,\u00a0<\/span><span data-contrast=\"auto\">t<\/span><span data-contrast=\"auto\">he<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">Visual Studio\u00a0<\/span><span data-contrast=\"auto\">Search\u00a0<\/span><span data-contrast=\"auto\">shortcut<\/span><span data-contrast=\"auto\">\u00a0<\/span><b><span data-contrast=\"auto\">Ctrl+Q,<\/span><\/b> as shown in the screenshot below, <span data-contrast=\"auto\">was\u00a0<\/span><span data-contrast=\"auto\">in<\/span><span data-contrast=\"auto\">troduced as a Quick Launch <\/span><span data-contrast=\"auto\">for <\/span><span data-contrast=\"auto\">VS\u00a0<\/span><span data-contrast=\"auto\">feature\u00a0<\/span><span data-contrast=\"auto\">search<\/span><span data-contrast=\"auto\">es<\/span><span data-contrast=\"auto\">\u00a0and\u00a0<\/span><span data-contrast=\"auto\">expanded<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">in v16.3\u00a0<\/span><span data-contrast=\"auto\">to\u00a0<\/span><span data-contrast=\"auto\">support\u00a0<\/span><span data-contrast=\"auto\">code<\/span><span data-contrast=\"auto\">\u00a0searches<\/span><span data-contrast=\"auto\">.\u00a0 With millions of developers using <\/span><span data-contrast=\"auto\">the\u00a0<\/span><span data-contrast=\"auto\">VS IDE,\u00a0<\/span><span data-contrast=\"auto\">more and more developers are using this hotkey to\u00a0<\/span><span data-contrast=\"auto\">boost<\/span><span data-contrast=\"auto\">\u00a0their\u00a0<\/span><span data-contrast=\"auto\">productivity<\/span><span data-contrast=\"auto\">;<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">we hear\u00a0<\/span><span data-contrast=\"auto\">customer\u00a0<\/span><span data-contrast=\"auto\">feedback<\/span><span data-contrast=\"auto\">\u00a0at developer conferences<\/span><span data-contrast=\"auto\">, customer interviews<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0and<\/span><span data-contrast=\"auto\">\u00a0user\u00a0<\/span><span data-contrast=\"auto\">surveys\u00a0<\/span><span data-contrast=\"auto\">regarding<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">improving search relevancy and\u00a0<\/span><span data-contrast=\"auto\">increasing feature discoverability.\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\"><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2021\/03\/searchbox.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-231934\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2021\/03\/searchbox.png\" alt=\"Image searchbox\" width=\"344\" height=\"75\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2021\/03\/searchbox.png 344w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2021\/03\/searchbox-300x65.png 300w\" sizes=\"(max-width: 344px) 100vw, 344px\" \/><\/a>\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Looking into\u00a0<\/span><span data-contrast=\"auto\">the\u00a0<\/span><span data-contrast=\"auto\">existing in-box<\/span><span data-contrast=\"auto\">\u00a0<\/span><b><span data-contrast=\"auto\">Ctrl+Q<\/span><\/b><span data-contrast=\"auto\">\u00a0search<\/span><span data-contrast=\"auto\">\u00a0experience<\/span><span data-contrast=\"auto\">, there are a few limitations:\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<ul>\n<li><span data-contrast=\"auto\">The search\u00a0<\/span><span data-contrast=\"auto\">results\u00a0<\/span><span data-contrast=\"auto\">relevancy\u00a0<\/span><span data-contrast=\"auto\">was b<\/span><span data-contrast=\"auto\">uilt-in to VS releases<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">and hard to\u00a0<\/span><span data-contrast=\"auto\">improve over time<\/span><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Rel<\/span><span data-contrast=\"auto\">ies<\/span><span data-contrast=\"auto\">\u00a0on keywords manually added\u00a0<\/span><span data-contrast=\"auto\">to<\/span><span data-contrast=\"auto\">\u00a0each feature for<\/span><span data-contrast=\"auto\">\u00a0keyword matching<\/span><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Employ<\/span><span data-contrast=\"auto\">ed<\/span><span data-contrast=\"auto\">\u00a0heuristics<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">that were\u00a0<\/span><span data-contrast=\"auto\">based on<\/span><span data-contrast=\"auto\">\u00a0point-in-time data<\/span><span data-contrast=\"auto\">\u00a0for ranking algo<\/span><span data-contrast=\"auto\">rithm<\/span><span data-contrast=\"auto\">\u00a0tuning<\/span><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">To address these limitations, last year\u00a0<\/span><span data-contrast=\"auto\">we started to\u00a0<\/span><span data-contrast=\"auto\">explore\u00a0<\/span><span data-contrast=\"auto\">a\u00a0<\/span><span data-contrast=\"auto\">solution\u00a0<\/span><span data-contrast=\"auto\">built upon<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">AI\/ML based\u00a0<\/span><span data-contrast=\"auto\">Azure\u00a0<\/span><span data-contrast=\"auto\">services<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">and<\/span><span data-contrast=\"auto\">\u00a0shipped the\u00a0<\/span><span data-contrast=\"auto\">feature<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">in v16.9 release<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">\u2013 an\u00a0<\/span><span data-contrast=\"auto\">intelligent Visual Studio feature search\u00a0<\/span><span data-contrast=\"auto\">service<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">powered by Azure services<\/span><span data-contrast=\"auto\">, currently focusing on VS feature\u00a0<\/span><span data-contrast=\"auto\">searches,<\/span><span data-contrast=\"auto\">\u00a0and integrated with\u00a0<\/span><span data-contrast=\"auto\">the\u00a0<\/span><b><span data-contrast=\"auto\">Ctrl+Q<\/span><\/b><span data-contrast=\"auto\">\u00a0box<\/span><span data-contrast=\"auto\">.\u00a0<\/span><span data-contrast=\"auto\">\u00a0In this blog,\u00a0<\/span><span data-contrast=\"auto\">we\u00a0<\/span><span data-contrast=\"auto\">want to share our experience<\/span><span data-contrast=\"auto\">\u00a0and learnings<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">in building the feature search service.\u00a0<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<h3><span class=\"TextRun SCXW109971166 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW109971166 BCX8\" data-ccp-parastyle=\"heading 1\">Service Architecture<\/span><\/span><span class=\"EOP SCXW109971166 BCX8\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:0,&quot;335559740&quot;:259}\">\u00a0<\/span><\/h3>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2021\/03\/SearchServiceArchNew.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-231943\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2021\/03\/SearchServiceArchNew.png\" alt=\"Image SearchServiceArchNew\" width=\"1238\" height=\"686\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2021\/03\/SearchServiceArchNew.png 1238w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2021\/03\/SearchServiceArchNew-300x166.png 300w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2021\/03\/SearchServiceArchNew-1024x567.png 1024w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2021\/03\/SearchServiceArchNew-768x426.png 768w\" sizes=\"(max-width: 1238px) 100vw, 1238px\" \/><\/a><\/p>\n<p><span data-contrast=\"auto\">The system extract<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">\u00a0Visual Studio metadata for\u00a0<\/span><span data-contrast=\"auto\">all 14 local<\/span><span data-contrast=\"auto\">e<\/span><span data-contrast=\"auto\">s of\u00a0<\/span><span data-contrast=\"auto\">each release\u00a0<\/span><span data-contrast=\"auto\">(<\/span><span data-contrast=\"auto\">e.<\/span><span data-contrast=\"auto\">g.<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0v16.9 release)<\/span><span data-contrast=\"auto\">, upload<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">the metadata\u00a0<\/span><span data-contrast=\"auto\">to a secure store for further validating and processing<\/span><span data-contrast=\"auto\">;<\/span><span data-contrast=\"auto\">\u00a0the processed\u00a0<\/span><span data-contrast=\"auto\">data\u00a0<\/span><span data-contrast=\"auto\">is\u00a0<\/span><span data-contrast=\"auto\">fed<\/span><span data-contrast=\"auto\">\u00a0into the index\u00a0<\/span><span data-contrast=\"auto\">processing pipeline,\u00a0<\/span><span data-contrast=\"auto\">which\u00a0<\/span><span data-contrast=\"auto\">leverag<\/span><span data-contrast=\"auto\">es<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">MS language analyzers\u00a0<\/span><span data-contrast=\"auto\">for<\/span><span data-contrast=\"auto\">\u00a0different locales\u00a0<\/span><span data-contrast=\"auto\">and\u00a0<\/span><span data-contrast=\"auto\">MS\u00a0<\/span><span data-contrast=\"auto\">text analytics\u00a0<\/span><span data-contrast=\"auto\">to extract keywords for\u00a0<\/span><span data-contrast=\"auto\">VS features.\u00a0 When a user\u00a0<\/span><span data-contrast=\"auto\">performs a search in the\u00a0<\/span><b><span data-contrast=\"auto\">Ctrl+Q<\/span><\/b><span data-contrast=\"auto\">\u00a0box in\u00a0<\/span><span data-contrast=\"auto\">the\u00a0<\/span><span data-contrast=\"auto\">VS IDE, the request\u00a0<\/span><span data-contrast=\"auto\">is sent through the\u00a0<\/span><span data-contrast=\"auto\">load balance<\/span><span data-contrast=\"auto\">r to <\/span><span data-contrast=\"auto\">one of the nearest geo-redundant <\/span><span data-contrast=\"auto\">REST API endpoint<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">, which\u00a0<\/span><span data-contrast=\"auto\">processes the request based on user\u2019s search context,\u00a0<\/span><span data-contrast=\"auto\">and return<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">\u00a0the top matched search re<\/span><span data-contrast=\"auto\">sults<\/span><span data-contrast=\"auto\">\u00a0to the user.\u00a0\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">There are two primary data flow<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">\u00a0in this\u00a0<\/span><span data-contrast=\"auto\">system<\/span><span data-contrast=\"auto\">, each consist<\/span><span data-contrast=\"auto\">ing<\/span><span data-contrast=\"auto\">\u00a0of\u00a0<\/span><span data-contrast=\"auto\">various\u00a0<\/span><span data-contrast=\"auto\">components an<\/span><span data-contrast=\"auto\">d<\/span><span data-contrast=\"auto\">\u00a0Azure services.\u00a0\u00a0<\/span><span data-contrast=\"auto\">Currently the\u00a0<\/span><span data-contrast=\"auto\">system<\/span><span data-contrast=\"auto\">\u00a0supports all 14\u00a0<\/span><span data-contrast=\"auto\">Visual Studio locales<\/span><span data-contrast=\"auto\">\u00a0and\u00a0<\/span><span data-contrast=\"auto\">v16.9+ releases.\u00a0\u00a0<\/span><span data-contrast=\"auto\">\u00a0\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<h5><b><span data-contrast=\"auto\">From top left:<\/span><\/b><span data-contrast=\"auto\">\u00a0<\/span><b><span data-contrast=\"auto\">feature\u00a0<\/span><\/b><b><span data-contrast=\"auto\">metadata<\/span><\/b><b><span data-contrast=\"auto\">\u00a0generation and index creation<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/h5>\n<ul>\n<li><span data-contrast=\"auto\">An\u00a0<\/span><span data-contrast=\"auto\">auto<\/span><span data-contrast=\"auto\">mated pipeline extracts\u00a0<\/span><span data-contrast=\"auto\">Visual Studio features metadata\u00a0<\/span><span data-contrast=\"auto\">for\u00a0<\/span><span data-contrast=\"auto\">all locales of\u00a0<\/span><span data-contrast=\"auto\">each release\u00a0<\/span><span data-contrast=\"auto\">and upload<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">the<\/span><span data-contrast=\"auto\">m<\/span><span data-contrast=\"auto\">\u00a0into a secured\u00a0<\/span><span data-contrast=\"auto\">endpoint.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">An\u00a0<\/span><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/azure-functions\/\"><span data-contrast=\"none\">Azure Functions<\/span><\/a><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"auto\">app<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">triggers, <\/span><span data-contrast=\"auto\">validate<\/span><span data-contrast=\"auto\">s, and transforms<\/span><span data-contrast=\"auto\">\u00a0the latest drop of the new or updated VS feature metadata, as well as<\/span><span data-contrast=\"auto\">\u00a0a<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">Synonyms<\/span><span data-contrast=\"auto\">\u00a0mapping<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">list<\/span><span data-contrast=\"auto\">, then store<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">\u00a0the processed data into\u00a0<\/span><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/storage\/\"><span data-contrast=\"none\">Azure Storage<\/span><\/a><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"auto\">service\u2019s\u00a0<\/span><span data-contrast=\"auto\">T<\/span><span data-contrast=\"auto\">able storage<\/span><span data-contrast=\"auto\">. \u00a0<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">The indexers of the\u00a0<\/span><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/search\/\"><span data-contrast=\"none\">Azure Search<\/span><\/a><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"auto\">service pick up\u00a0<\/span><span data-contrast=\"auto\">the\u00a0<\/span><span data-contrast=\"auto\">updates\u00a0<\/span><span data-contrast=\"auto\">in storage\u00a0<\/span><span data-contrast=\"auto\">to index all\u00a0<\/span><span data-contrast=\"auto\">documents<\/span><span data-contrast=\"auto\">, while leveraging\u00a0<\/span><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/cognitive-services\/\"><span data-contrast=\"none\">Azure Cognitiv<\/span><span data-contrast=\"none\">e Services<\/span><\/a><span data-contrast=\"none\">\u2019<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"auto\">NLP text analytics for keywords extractions with language detection during indexing process and query result retrieval.\u00a0 For any updated metadata, we do incremental caching with the Azure Storage to only process those features with changes.\u00a0 <\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<\/ul>\n<h5><b><span data-contrast=\"auto\">From the right:<\/span><\/b><b><span data-contrast=\"auto\">\u00a0feature search and data retrieval<\/span><\/b><span data-contrast=\"auto\">\u00a0\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/h5>\n<ul>\n<li><span data-contrast=\"auto\">When a Visual Studio user types in a search query in\u00a0<\/span><b><span data-contrast=\"auto\">Ctrl+Q<\/span><\/b><span data-contrast=\"auto\"> box, the VS client sends the anonymized request to the feature search service, going through the <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/frontdoor\/\">Azure Front Door<\/a><\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"auto\">that routes the call <span class=\"TextRun SCXW231215109 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW231215109 BCX8\">into\u00a0<\/span><\/span><span class=\"TextRun SCXW231215109 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW231215109 BCX8\">the\u00a0<\/span><\/span><span class=\"TextRun SCXW231215109 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW231215109 BCX8\">nearest region\u00a0<\/span><\/span><span class=\"TextRun SCXW231215109 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW231215109 BCX8\">for\u00a0<\/span><\/span><span class=\"TextRun SCXW231215109 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW231215109 BCX8\">the REST API endpoints<\/span><\/span><\/span><span data-contrast=\"auto\">.\u00a0\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">T<\/span><span data-contrast=\"auto\">he\u00a0<\/span><a href=\"https:\/\/docs.microsoft.com\/en-us\/rest\/api\/appservice\/\"><span data-contrast=\"none\">REST API<\/span><\/a><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"auto\">app\u00a0<\/span><span data-contrast=\"auto\">receives<\/span><span data-contrast=\"auto\">\u00a0the search request, checks to see if the search\u00a0<\/span><span data-contrast=\"auto\">results were<\/span><span data-contrast=\"auto\">\u00a0in local cache or\u00a0<\/span><span data-contrast=\"auto\">in\u00a0<\/span><span data-contrast=\"auto\">the<\/span><span data-contrast=\"auto\">\u00a0<\/span><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/azure-cache-for-redis\/\"><span data-contrast=\"none\">Redis Cache<\/span><\/a><span data-contrast=\"auto\">,\u00a0<\/span><span data-contrast=\"auto\">and\u00a0<\/span><span data-contrast=\"auto\">quickly returns it<\/span><span data-contrast=\"auto\">.\u00a0<\/span><span data-contrast=\"auto\">If not yet cached,\u00a0<\/span><span data-contrast=\"auto\">it\u00a0<\/span><span data-contrast=\"auto\">retrieves<\/span><span data-contrast=\"auto\">\u00a0new results from\u00a0<\/span><span data-contrast=\"auto\">one of the indexes in the\u00a0<\/span><span data-contrast=\"auto\">Azure Search<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"auto\">service<\/span><span data-contrast=\"auto\">, which\u00a0<\/span><span data-contrast=\"auto\">in turn will be cached for future\u00a0<\/span><span data-contrast=\"auto\">fast retrieval<\/span><span data-contrast=\"auto\">.\u00a0\u00a0<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Based on the user\u2019s search context<\/span><span data-contrast=\"auto\">,\u00a0<\/span><span data-contrast=\"auto\">such as whether any project was opened or\u00a0<\/span><span data-contrast=\"auto\">while<\/span><span data-contrast=\"auto\"> Visual Studio is in <\/span><span data-contrast=\"auto\">debugging mode<\/span><span data-contrast=\"auto\">,\u00a0<\/span><span data-contrast=\"auto\">the\u00a0<\/span><span data-contrast=\"auto\">top\u00a0<\/span><span data-contrast=\"auto\">results are\u00a0<\/span><span data-contrast=\"auto\">then\u00a0<\/span><span data-contrast=\"auto\">compared\u00a0<\/span><span data-contrast=\"auto\">to<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">the contextual ranking data\u00a0<\/span><span data-contrast=\"auto\">with same feature identifiers\u00a0<\/span><span data-contrast=\"auto\">in the\u00a0<\/span><i><span data-contrast=\"auto\">Re-ranking model<\/span><\/i><span data-contrast=\"auto\">.<\/span><span data-contrast=\"auto\">\u00a0 The contextual ranking data was pre-processed and cached\u00a0<\/span><span data-contrast=\"auto\">to speed up the\u00a0<\/span><span data-contrast=\"auto\">process<\/span><span data-contrast=\"auto\">.\u00a0\u00a0<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">The<\/span><span data-contrast=\"auto\">\u00a0top\u00a0<\/span><span data-contrast=\"auto\">re-ranked results then return to the\u00a0<\/span><span data-contrast=\"auto\">Visual Studio u<\/span><span data-contrast=\"auto\">ser.\u00a0\u00a0<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">The<\/span><span data-contrast=\"auto\">\u00a0anonymized\u00a0<\/span><span data-contrast=\"auto\">user\u2019s feature searc<\/span><span data-contrast=\"auto\">h\u00a0<\/span><span data-contrast=\"auto\">click-through\u00a0<\/span><span data-contrast=\"auto\">and context<\/span><span data-contrast=\"auto\">ual usage<\/span><span data-contrast=\"auto\">\u00a0data<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">are<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">fed into the\u00a0<\/span><i><span data-contrast=\"auto\">C<\/span><\/i><i><span data-contrast=\"auto\">ontext<\/span><\/i><i><span data-contrast=\"auto\">ual<\/span><\/i><i><span data-contrast=\"auto\">\u00a0<\/span><\/i><i><span data-contrast=\"auto\">U<\/span><\/i><i><span data-contrast=\"auto\">sage<\/span><\/i><b><i><span data-contrast=\"auto\">\u00a0<\/span><\/i><\/b><span data-contrast=\"auto\">store for\u00a0<\/span><span data-contrast=\"auto\">continued<\/span><span data-contrast=\"auto\">\u00a0contextual ranking update<\/span><span data-contrast=\"auto\">s\u00a0<\/span><span data-contrast=\"auto\">in the re-ranking model<\/span><span data-contrast=\"auto\">.\u00a0\u00a0<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<\/ul>\n<h3 aria-level=\"1\"><b><span data-contrast=\"none\">Search Scoring and Ranking<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:0,&quot;335559740&quot;:259}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">To reach the parity of the existing in-box\u00a0<\/span><span data-contrast=\"auto\">search experience\u00a0<\/span><span data-contrast=\"auto\">and improve upon the\u00a0<\/span><span data-contrast=\"auto\">search relevancy, we<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">took a few\u00a0<\/span><span data-contrast=\"auto\">calculated\u00a0<\/span><span data-contrast=\"auto\">choices<\/span><span data-contrast=\"auto\">\u00a0in\u00a0<\/span><span data-contrast=\"auto\">the<\/span><span data-contrast=\"auto\">\u00a0index design<\/span><span data-contrast=\"auto\">,\u00a0<\/span><span data-contrast=\"auto\">ranking algorithm<\/span><span data-contrast=\"auto\">, and\u00a0<\/span><span data-contrast=\"auto\">scoring\u00a0<\/span><span data-contrast=\"auto\">tuning<\/span><span data-contrast=\"auto\">:\u00a0<\/span><span data-contrast=\"auto\">\u00a0\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<ul>\n<li><span data-contrast=\"auto\">C<\/span><span data-contrast=\"auto\">reated<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"auto\">a few composable\u00a0<\/span><i><span data-contrast=\"auto\">cognitive skills<\/span><\/i><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"auto\">to extract the key phrases from each V<\/span><span data-contrast=\"auto\">S feature with detected\u00a0<\/span><span data-contrast=\"auto\">language<\/span><span data-contrast=\"auto\">\u00a0for where\u00a0<\/span><span data-contrast=\"auto\">feature<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">keywords\u00a0<\/span><span data-contrast=\"auto\">were\u00a0<\/span><span data-contrast=\"auto\">left\u00a0<\/span><span data-contrast=\"auto\">off.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">A<\/span><span data-contrast=\"auto\">dded<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">the<\/span><span data-contrast=\"auto\">\u00a0<\/span><i><span data-contrast=\"auto\">Synonyms<\/span><\/i><i><span data-contrast=\"auto\">\u00a0<\/span><\/i><i><span data-contrast=\"auto\">map<\/span><\/i><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"auto\">based on\u00a0<\/span><span data-contrast=\"auto\">historical search usage<\/span><span data-contrast=\"auto\">, which is supported in\u00a0<\/span><span data-contrast=\"auto\">the\u00a0<\/span><span data-contrast=\"auto\">English locale index in this <\/span><span data-contrast=\"auto\">release.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">D<\/span><span data-contrast=\"auto\">esigned<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">the\u00a0<\/span><i><span data-contrast=\"auto\">scoring profile\u00a0<\/span><\/i><span data-contrast=\"auto\">with\u00a0<\/span><span data-contrast=\"auto\">selected\u00a0<\/span><span data-contrast=\"auto\">field<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">\u00a0and tag<\/span><span data-contrast=\"auto\">\u00a0boosting based on\u00a0<\/span><span data-contrast=\"auto\">whether<\/span><span data-contrast=\"auto\">\u00a0the features were\u00a0<\/span><span data-contrast=\"auto\">menus<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0commands, options,\u00a0<\/span><span data-contrast=\"auto\">project and item templates,\u00a0<\/span><span data-contrast=\"auto\">preview features, or setup\u00a0<\/span><span data-contrast=\"auto\">items.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">A<\/span><span data-contrast=\"auto\">dapted<\/span><span data-contrast=\"auto\">\u00a0<\/span><i><span data-contrast=\"auto\">MS Language Analyzers<\/span><\/i><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"auto\">in our index<\/span><span data-contrast=\"auto\">es<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">for<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">lemmatization and word decompounding\u00a0<\/span><span data-contrast=\"auto\">that are\u00a0<\/span><span data-contrast=\"auto\">more\u00a0<\/span><span data-contrast=\"auto\">suitable for\u00a0<\/span><span data-contrast=\"auto\">different VS locales<\/span><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">L<\/span><span data-contrast=\"auto\">everaged <\/span><span data-contrast=\"auto\">Azure Search service\u2019s<\/span><span data-contrast=\"auto\">\u00a0<\/span><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/search\/index-similarity-and-scoring#scoring-statistics-and-sticky-sessions\"><span data-contrast=\"none\">feature<\/span><\/a><span data-contrast=\"auto\">\u00a0to compute\u00a0<\/span><span data-contrast=\"auto\">ranking scores\u00a0<\/span><span data-contrast=\"auto\">of documents\u00a0<\/span><span data-contrast=\"auto\">across all 12 shards in the Azure Search service<\/span><span data-contrast=\"auto\">\u00a0for consistent search results of those features\u00a0<\/span><span data-contrast=\"auto\">that\u00a0<\/span><span data-contrast=\"auto\">are closely related but\u00a0<\/span><span data-contrast=\"auto\">scattered in different shard<\/span><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">U<\/span><span data-contrast=\"auto\">sed<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">the<\/span><span data-contrast=\"auto\">\u00a0<\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Okapi_BM25\"><span data-contrast=\"none\">BM25<\/span><\/a><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">Similarity<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"auto\">ranking function<\/span><span data-contrast=\"auto\">\u00a0with\u00a0<\/span><span data-contrast=\"auto\">term frequency\u00a0<\/span><span data-contrast=\"auto\">hyperparameter<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">\u00a0customization<\/span><span data-contrast=\"auto\">, instead of the default<\/span><span data-contrast=\"auto\">\u00a0<\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Tf%E2%80%93idf\"><span data-contrast=\"none\">TF-IDF<\/span><\/a><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"auto\">similarity<\/span><span data-contrast=\"auto\">. T<\/span><span data-contrast=\"auto\">he<\/span><span data-contrast=\"auto\">\u00a0latter is\u00a0<\/span><span data-contrast=\"auto\">not desirable for us beca<\/span><span data-contrast=\"auto\">use\u00a0<\/span><span data-contrast=\"auto\">certain categories of VS features<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">that\u00a0<\/span><span data-contrast=\"auto\">are infrequently used,\u00a0<\/span><span data-contrast=\"auto\">such as\u00a0<\/span><i><span data-contrast=\"auto\">Installer components<\/span><\/i><span data-contrast=\"auto\">, are\u00a0<\/span><span data-contrast=\"auto\">biased towards<\/span><span data-contrast=\"auto\">\u00a0due to their greater lengths.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">B<\/span><span data-contrast=\"auto\">uilt<\/span><span data-contrast=\"auto\"> a <\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Apache_Lucene\"><span data-contrast=\"none\">Lucene Query<\/span><span data-contrast=\"none\">\u00a0<\/span><\/a><span data-contrast=\"auto\">function\u00a0<\/span><span data-contrast=\"auto\">to support\u00a0<\/span><span data-contrast=\"auto\">fuzzy<\/span><span data-contrast=\"auto\">, proximity, wildcard searches<\/span><span data-contrast=\"auto\">\u00a0for greater\u00a0<\/span><span data-contrast=\"auto\">search\u00a0<\/span><span data-contrast=\"auto\">flexibility<\/span><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<\/ul>\n<h3 aria-level=\"1\"><b><span data-contrast=\"none\">Service in\u00a0<\/span><\/b><b><span data-contrast=\"none\">Production<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:0,&quot;335559740&quot;:259,&quot;469777462&quot;:[3620],&quot;469777927&quot;:[0],&quot;469777928&quot;:[1]}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">To\u00a0<\/span><span data-contrast=\"auto\">achieve production level performance, scalability,\u00a0<\/span><span data-contrast=\"auto\">geo-redundancy,\u00a0<\/span><span data-contrast=\"auto\">and\u00a0<\/span><span data-contrast=\"auto\">reliability,\u00a0<\/span><span data-contrast=\"auto\">manage potential service\u00a0<\/span><span data-contrast=\"auto\">throttling<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0and monitor service health, the\u00a0<\/span><span data-contrast=\"auto\">system<\/span><span data-contrast=\"auto\">\u00a0is\u00a0<\/span><span data-contrast=\"auto\">plugged into\u00a0<\/span><span data-contrast=\"auto\">our\u00a0<\/span><span data-contrast=\"auto\">well-tested\u00a0<\/span><span data-contrast=\"auto\">A<\/span><span data-contrast=\"auto\">I<\/span><span data-contrast=\"auto\">\u00a0service<\/span><span data-contrast=\"auto\">\u00a0infrastru<\/span><span data-contrast=\"auto\">cture<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0which support<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">\u00a0our service<\/span><span data-contrast=\"auto\">\u2019s development, staging and deployment<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">\u00a0with\u00a0<\/span><a href=\"https:\/\/azure.microsoft.com\/en-us\/services\/devops\/\"><span data-contrast=\"none\">Azure DevOps<\/span><\/a><span data-contrast=\"auto\">\u00a0and\u00a0<\/span><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/azure-resource-manager\/templates\/overview\"><span data-contrast=\"none\">Az<\/span><span data-contrast=\"none\">ure Resource Manager<\/span><\/a><span data-contrast=\"auto\"> templates with consistency<\/span><span data-contrast=\"auto\">.\u00a0<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"1\"><b><span data-contrast=\"none\">Results<\/span><\/b><b><span data-contrast=\"none\">\u00a0and Benefits<\/span><\/b> <span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:0,&quot;335559740&quot;:259,&quot;469777462&quot;:[3620],&quot;469777927&quot;:[0],&quot;469777928&quot;:[1]}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">So how did the s<\/span><span data-contrast=\"auto\">earch relevancy from the search service perform compared to\u00a0<\/span><span data-contrast=\"auto\">that of\u00a0<\/span><span data-contrast=\"auto\">the inbox search\u00a0<\/span><span data-contrast=\"auto\">experience?\u00a0 We conducted\u00a0<\/span><span data-contrast=\"auto\">a few\u00a0<\/span><span data-contrast=\"auto\">staged A\/B experiments<\/span><span data-contrast=\"auto\">\u00a0in v16.8\u00a0<\/span><span data-contrast=\"auto\">release and<\/span><span data-contrast=\"auto\">\u00a0measured\u00a0<\/span><span data-contrast=\"auto\">with<\/span><span data-contrast=\"auto\">\u00a0<\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Mean_reciprocal_rank\"><span data-contrast=\"none\">MRR<\/span><\/a><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">the\u00a0<\/span><span data-contrast=\"auto\">scores\u00a0<\/span><span data-contrast=\"auto\">of<\/span><span data-contrast=\"auto\">\u00a0the\u00a0<\/span><b><span data-contrast=\"auto\">C<\/span><\/b><b><span data-contrast=\"auto\">ontrol\u00a0<\/span><\/b><span data-contrast=\"auto\">group and the\u00a0<\/span><b><span data-contrast=\"auto\">T<\/span><\/b><b><span data-contrast=\"auto\">reatment\u00a0<\/span><\/b><span data-contrast=\"auto\">group,<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">and\u00a0<\/span><span data-contrast=\"auto\">statistically significant improvement<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">\u00a0in the\u00a0<\/span><span data-contrast=\"auto\">T<\/span><span data-contrast=\"auto\">reatment group\u00a0<\/span><span data-contrast=\"auto\">were\u00a0<\/span><span data-contrast=\"auto\">consistently\u00a0<\/span><span data-contrast=\"auto\">observed\u00a0<\/span><span data-contrast=\"auto\">at\u00a0<\/span><span data-contrast=\"auto\">different stages.\u00a0\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Below\u00a0<\/span><span data-contrast=\"auto\">are a few examples of the top searched VS features, their relevant results without and with the<\/span><span data-contrast=\"auto\">\u00a0search service. \u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">When searching for \u201csolution\u201d, the\u00a0<\/span><span data-contrast=\"auto\">topmost<\/span><span data-contrast=\"auto\">\u00a0selected result is \u201cSolution Explorer\u201d. \u00a0The left screenshot below without the\u00a0<\/span><span data-contrast=\"auto\">service\u00a0<\/span><span data-contrast=\"auto\">has the result at #5 i<\/span><span data-contrast=\"auto\">n the result list, while<\/span><span data-contrast=\"auto\">\u00a0it<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">is at<\/span><span data-contrast=\"auto\">\u00a0the top 1 with the service shown in the right screenshot below.<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2021\/03\/solutionLocal.png\"><img decoding=\"async\" class=\"alignnone wp-image-231937\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2021\/03\/solutionLocal.png\" alt=\"Image solutionLocal\" width=\"239\" height=\"335\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2021\/03\/solutionLocal.png 257w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2021\/03\/solutionLocal-214x300.png 214w\" sizes=\"(max-width: 239px) 100vw, 239px\" \/>\u00a0 <\/a><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2021\/03\/solutionCloud.png\"><img decoding=\"async\" class=\"alignnone wp-image-231936\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2021\/03\/solutionCloud.png\" alt=\"Image solutionCloud\" width=\"259\" height=\"335\" \/><\/a><\/p>\n<p><span class=\"TextRun SCXW212715480 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW212715480 BCX8\">When searching for \u201ckeyboard\u201d, we got frequent user feedback about wanting \u201ckeyboard\u201d mapped to \u201cChange keyboard settings\u201d, with the service, the feature result is show<\/span><\/span><span class=\"TextRun SCXW212715480 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW212715480 BCX8\">ing at the top<\/span><\/span><span class=\"TextRun SCXW212715480 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW212715480 BCX8\">\u00a01<\/span><\/span><span class=\"TextRun SCXW212715480 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW212715480 BCX8\">\u00a0in the right screenshot.<\/span><\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2021\/03\/keyboardCloud.png\"><img decoding=\"async\" class=\"alignnone wp-image-231938\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2021\/03\/keyboardCloud.png\" alt=\"Image keyboardCloud\" width=\"263\" height=\"230\" \/><\/a> <a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2021\/03\/keyboardLocal.png\">\u00a0<img decoding=\"async\" class=\"alignnone wp-image-231939\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2021\/03\/keyboardLocal.png\" alt=\"Image keyboardLocal\" width=\"257\" height=\"231\" \/><\/a><\/p>\n<p><span data-contrast=\"auto\">With the release of the VS feature search service powered by Azure services,\u00a0<\/span><span data-contrast=\"auto\">the\u00a0<\/span><span data-contrast=\"auto\">system<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">enables<\/span><span data-contrast=\"auto\">:<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"28\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Preliminary c<\/span><span data-contrast=\"auto\">ontext aware search experience<\/span><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"28\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Iterative, data-driven improvements to\u00a0<\/span><span data-contrast=\"auto\">feature<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">search\u00a0<\/span><span data-contrast=\"auto\">rankings<\/span><span data-contrast=\"auto\">.<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span class=\"TextRun SCXW116039710 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW116039710 BCX8\">And\u00a0<\/span><\/span><span class=\"TextRun SCXW116039710 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW116039710 BCX8\">we\u00a0<\/span><\/span><span class=\"TextRun SCXW116039710 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW116039710 BCX8\">can<\/span><\/span><span class=\"TextRun SCXW116039710 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW116039710 BCX8\">\u00a0help you with more and more\u00a0<\/span><\/span><span class=\"TextRun SCXW116039710 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW116039710 BCX8\">accurately<\/span><\/span><span class=\"TextRun SCXW116039710 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW116039710 BCX8\">\u00a0what you are looking for<\/span><\/span><span class=\"TextRun SCXW116039710 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW116039710 BCX8\"> with faster <\/span><\/span><span class=\"TextRun SCXW116039710 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW116039710 BCX8\">iterations in improvements.\u00a0<\/span><\/span><\/p>\n<h3 aria-level=\"1\"><b><span data-contrast=\"none\">What\u2019s Next<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:0,&quot;335559740&quot;:259}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">There are several wa<\/span><span data-contrast=\"auto\">ys that we can continue to improve the system.\u00a0\u00a0<\/span><span data-contrast=\"auto\">For example, the system\u00a0<\/span><span data-contrast=\"auto\">can\u00a0<\/span><span data-contrast=\"auto\">consider<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">the current coding file\u2019s language,\u00a0<\/span><span data-contrast=\"auto\">the current\u00a0<\/span><span data-contrast=\"auto\">project<\/span><span data-contrast=\"auto\">\u2019s<\/span><span data-contrast=\"auto\">\u00a0type<\/span><span data-contrast=\"auto\">, what workloads are currently installed in the\u00a0<\/span><span data-contrast=\"auto\">VS IDE,\u00a0<\/span><span data-contrast=\"auto\">to setup automatic feedback\u00a0<\/span><span data-contrast=\"auto\">loop based on user behavior, and p<\/span><span data-contrast=\"auto\">rovide more\u00a0<\/span><span data-contrast=\"auto\">focused<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">search results.\u00a0\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Taking\u00a0<\/span><span data-contrast=\"auto\">search<\/span><span data-contrast=\"auto\">\u00a0a little further, t<\/span><span data-contrast=\"auto\">he system<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">can<\/span><span data-contrast=\"auto\">\u00a0be<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">scale<\/span><span data-contrast=\"auto\">d<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">to\u00a0<\/span><span data-contrast=\"auto\">provide<\/span><span data-contrast=\"auto\">\u00a0results from\u00a0<\/span><span data-contrast=\"auto\">additional\u00a0<\/span><span data-contrast=\"auto\">data sources<\/span><span data-contrast=\"auto\">, such as VS\u00a0<\/span><span data-contrast=\"auto\">online\u00a0<\/span><span data-contrast=\"auto\">docs and\u00a0<\/span><span data-contrast=\"auto\">tech\u00a0<\/span><span data-contrast=\"auto\">blogs, Bing search<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">etc.<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0for improved\u00a0<\/span><span data-contrast=\"auto\">VS\u00a0<\/span><span data-contrast=\"auto\">feature discoverability,<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">to unify<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"auto\">with AI-<\/span><span data-contrast=\"auto\">power<\/span><span data-contrast=\"auto\">ed code search services, and to eventually offer personalized search experience in VS. <\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"1\"><b><span data-contrast=\"none\">Help Us Improve with Your Feedback<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:0,&quot;335559740&quot;:259}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">User feedback is the best way for us to improve the results<\/span><span data-contrast=\"auto\">.\u00a0\u00a0<\/span><span data-contrast=\"auto\">We<\/span><span data-contrast=\"auto\">\u00a0encourage you to<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">install the latest v16.9 release to\u00a0<\/span><span data-contrast=\"auto\">try<\/span><span data-contrast=\"auto\">\u00a0<\/span><b><span data-contrast=\"auto\">Ctrl+Q<\/span><\/b><span data-contrast=\"auto\">\u00a0with our search service<\/span><span data-contrast=\"auto\">,\u00a0<\/span><span data-contrast=\"auto\">as shown in the screenshots in the <strong>Results<\/strong> section above, the <\/span><span data-contrast=\"auto\">little cloud icon\u00a0<\/span><span data-contrast=\"auto\">at the end of each\u00a0<\/span><span data-contrast=\"auto\">result\u00a0<\/span><span data-contrast=\"auto\">indicates\u00a0<\/span><span data-contrast=\"auto\">that the result<\/span><span data-contrast=\"auto\">\u00a0was<\/span><span data-contrast=\"auto\"> from the search service<\/span><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">We invite you to share\u00a0<\/span><span data-contrast=\"auto\">your feedback or\u00a0<\/span><span data-contrast=\"auto\">ideas<\/span><span data-contrast=\"auto\">\u00a0for improvement<\/span><span data-contrast=\"auto\">s at\u00a0<\/span><a href=\"https:\/\/aka.ms\/vs-suggest\"><span data-contrast=\"none\">Suggest a Feature for Visual Studio<\/span><\/a><span data-contrast=\"auto\">.\u00a0\u00a0<\/span><span data-contrast=\"auto\">On behalf of\u00a0<\/span><span data-contrast=\"auto\">our team working on enabling this feature, thank you!\u00a0 <\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Happy coding!\u00a0\u00a0<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In v16.9 Visual Studio release, we introduce the AI-powered Visual Studio Search service, which is integrated into the shortcut Ctrl+Q for intelligent Visual Studio feature searches.  This blog post introduces the system architecture in high level details, including the core Azure services that we built and leveraged.  <\/p>\n","protected":false},"author":53531,"featured_media":255385,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[155],"tags":[242,380,6799,6798,1396,1380,6800,6790,6789,6797,6801,3331,6784,4469,1054,526,1404,12,475],"class_list":["post-231904","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-visual-studio","tag-azure","tag-azure-app-services","tag-azure-cache-for-redis","tag-azure-cognitive-services","tag-azure-devops","tag-azure-functions","tag-azure-key-vault","tag-azure-machine-learning","tag-azure-ml","tag-azure-search-service","tag-azure-storage","tag-cloud-development","tag-data-science","tag-developer","tag-ml","tag-productivity","tag-search","tag-visual-studio","tag-visual-studio-2019"],"acf":[],"blog_post_summary":"<p>In v16.9 Visual Studio release, we introduce the AI-powered Visual Studio Search service, which is integrated into the shortcut Ctrl+Q for intelligent Visual Studio feature searches.  This blog post introduces the system architecture in high level details, including the core Azure services that we built and leveraged.  <\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/posts\/231904","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/users\/53531"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/comments?post=231904"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/posts\/231904\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/media\/255385"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/media?parent=231904"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/categories?post=231904"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/tags?post=231904"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}