<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Eric Dixon's Search Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/ericdixon/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/ericdixon/feed.xml</link>
    <description>My blog covers search related topics for the SharePoint Online, SharePoint 2016, SharePoint 2013, FASTSearch for SharePoint 2010, and FAST ESP search engines.</description>
    <lastBuildDate>Tue, 16 Apr 2019 05:07:04 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Intelligent Search: Adding AI to SharePoint Search</title>
      <link>https://docs.microsoft.com/archive/blogs/ericdixon/adding-ai-to-sharepoint-search</link>
      <pubDate>Thu, 19 Apr 2018 16:55:39 GMT</pubDate>
      <dc:creator><![CDATA[Eric Dixon - MSFT - Search PFE]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ericdixon/?p=125</guid>
      <description><![CDATA[With the wide availability of AI, a great way to enrich and improve your search experience is to...]]></description>
      <content:encoded><![CDATA[With the wide availability of AI, a great way to enrich and improve your search experience is to integrate AI tools with search.  Not too long ago Microsoft published a suite of <a href="https://azure.microsoft.com/en-us/services/cognitive-services/">Cognitive Services,</a> and many of these can help search on both the content and query side of SharePoint search.

My team and I have been working on an AI Query Pipeline.  There are many benefits to adding AI to the query.  I'm going to show examples of four of them.

They are:
<ul>
 	<li>Contextual and phonetic spellchecking</li>
 	<li>Translation</li>
 	<li>Query intent</li>
 	<li>NLP parsing</li>
</ul>
&nbsp;

In this example, the query is "markting slid".  The first term is misspelled, which is a very easy correction.  Where AI kicks in is on the second term.  Technically, it is a term which is spelled correctly, but contextually it is wrong.

<a href="https://msdnshared.blob.core.windows.net/media/2018/04/markting-slid.png"><img width="300" height="66" class="alignnone size-medium wp-image-145" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/04/markting-slid-300x66.png" /></a>

Phonetic spell correction.

<a href="https://msdnshared.blob.core.windows.net/media/2018/04/sphenopalatine-ganglioneuralgia.png"><img width="300" height="67" class="alignnone size-medium wp-image-215" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/04/sphenopalatine-ganglioneuralgia-300x67.png" /></a>

Here is an example of translating Chinese to English and getting results for both.

<a href="https://msdnshared.blob.core.windows.net/media/2018/04/network-access.png"><img width="300" height="68" class="alignnone size-medium wp-image-195" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/04/network-access-300x68.png" /></a>

NLP processing of queries.  What's not seen is that on the query, since the personal pronoun 'my' was included, filters were added to the query to search 'my' stuff like 'me' as the author or 'my' OneDrive.

<a href="https://msdnshared.blob.core.windows.net/media/2018/04/search-my-files-for-skype-guides.png"><img width="300" height="63" class="alignnone size-medium wp-image-205" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/04/search-my-files-for-skype-guides-300x63.png" /></a>

Combining translation and NLP

<a href="https://msdnshared.blob.core.windows.net/media/2018/04/dove-sono-i-miei-documenti-di-accesso-alla-rete.png"><img width="300" height="63" class="alignnone size-medium wp-image-155" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/04/dove-sono-i-miei-documenti-di-accesso-alla-rete-300x63.png" /></a>

Deriving intent from similar queries

<a href="https://msdnshared.blob.core.windows.net/media/2018/04/How-do-i-get-OneSearch-privileges.png"><img width="300" height="63" class="alignnone size-medium wp-image-175" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/04/How-do-i-get-OneSearch-privileges-300x63.png" /></a> <a href="https://msdnshared.blob.core.windows.net/media/2018/04/how-do-i-access-onesearch.png"><img width="300" height="64" class="alignnone size-medium wp-image-165" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/04/how-do-i-access-onesearch-300x64.png" /></a>

&nbsp;]]></content:encoded>
    </item>
    <item>
      <title>SharePoint Search: – “Why are my results so bad?” Part 2 - PDFs vs. Office Documents</title>
      <link>https://docs.microsoft.com/archive/blogs/ericdixon/sharepoint-search-why-are-my-results-so-bad-part-2-pdfs-vs-office-documents</link>
      <pubDate>Fri, 21 Apr 2017 19:43:13 GMT</pubDate>
      <dc:creator><![CDATA[Eric Dixon - MSFT - Search PFE]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ericdixon/?p=96</guid>
      <description><![CDATA[In a previous post, I discussed why search results can seem so bad.  Honestly, labeling results as...]]></description>
      <content:encoded><![CDATA[In a <a href="https://blogs.msdn.microsoft.com/ericdixon/2015/06/03/sharepoint-2013-search-people-search-why-are-my-results-so-bad-understanding-relevancy-the-rank-model-full-text-index-fuzzy-matching-and-social-distance/">previous post</a>, I discussed why search results can seem so bad.  Honestly, labeling results as "bad" is misleading because the Search Engine is ranking results by only the metadata and rank model that the Search Admin told the Search Engine to use.  In reality, there are no bad search results, only bad Search Admins. ;)

I recently ran across a case of "perceived bad results" that I thought was really interesting because the ranking behavior from the default SP2013 rank model had completely flipped when compared to the ranking behavior in SPO.  In SP2013, customers often questioned why, when given an Office Document (e.g. PowerPoint or Word) and a PDF which were equivalent in content, the Office Document always ranked higher.

The reason is that the SP2013 default rank model heavily weighs PowerPoint and Word file types while PDFs are not weighted.  In fact, in the SP2013 default rank model, Office Documents are the most heavily weighted of all document types.  Since a PDF is not weighted in the default rank model, it receives a default weighting that is lower than Office Documents' weightings.

In SPO, this behavior has "flipped," not because PDFs are weighted higher, but because Office Documents are weighted lower than the default File Type, and since PDFs have no defined weighting, they will get the default or higher weighting.

Adding to the foregoing confusion is this question: "What defines the default weight for a File Type?"  During indexing, all files are assigned an "Internal File Type."  For example, a Word document is InternalFileType=1, a PowerPoint is InternalFileType=2, and a PDF is InternalFileType=15.  While the default rank model in SPO and SP2013 define weights for Types 1 and 2, they do not define a weight for 15.  During rank score calculation, a PDF's File Type is transformed from 15 to 0.  This transformation is clearly seen in the rank log output (see the <a href="https://sp2013searchtool.codeplex.com/">Search Query Tool</a> for more on how to get a rank log).  The default rank log does define a weighting for Type 0, but the rank models label this type as HTML.  So, in reality, any undefined File Type will receive the same weighting as an HTML file and in SPO it will be higher than Office Documents, while in SP2013 it will be lower. 8-O

Below is a excerpt from a rank log using the default SPO rank model of a PowerPoint document showing a the InternalFileType=2 (PPT) getting a boost of -0.078.
<blockquote>&lt;bucketed_static_feature name='InternalFileType' property_name='InternalFileType' used_default='0'
<strong>raw_value_in='2'</strong> raw_value='2' raw_value_transformed='2'
hidden_nodes_adds='<strong>-0.0780378</strong>'/&gt;</blockquote>
Compare to the following excerpt from a rank log using the default SPO rank model of a PDF document showing an initial InternalFileType=15 (PDF), then transforming the value to 0 (HTML/default), and applying a boost of 0.391.
<blockquote>&lt;bucketed_static_feature name='InternalFileType' property_name='InternalFileType' used_default='1'
<strong>raw_value_in='15'</strong> raw_value='15' <strong>raw_value_transformed='0'</strong>
hidden_nodes_adds='<strong>0.39136</strong>'/&gt;</blockquote>
To address this issue in SP2013 or SPO, you should to define an appropriate weight for PDFs in a custom rank model or use the XRANK operator to apply an appropriate boost for PDFs.]]></content:encoded>
    </item>
    <item>
      <title>SharePoint 2013/2016 Search: When standard architecture won't work for you</title>
      <link>https://docs.microsoft.com/archive/blogs/ericdixon/sharepoint-20132016-search-when-standard-architecture-wont-work-for-you</link>
      <pubDate>Mon, 27 Feb 2017 20:14:51 GMT</pubDate>
      <dc:creator><![CDATA[Eric Dixon - MSFT - Search PFE]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ericdixon/?p=95</guid>
      <description><![CDATA[Customers often ask, "Will this search architecture work for me?"  What then follows is a screen...]]></description>
      <content:encoded><![CDATA[Customers often ask, "Will this search architecture work for me?"  What then follows is a screen grab from a <a href="https://technet.microsoft.com/en-us/library/dn342836(v=office.16).aspx">TechNet search architecture article</a> that provides examples of architectures for small, medium, large, and extra-large search farms.  The answer to their question is always, "It depends."  What it depends on is whether you have "standard" or "non-standard" requirements.

The example architectures provided in TechNet will work for most people, but some requirements or conditions may demand modifications to the examples TechNet provides.  The following question invariably arises: "What are non-standard search architecture requirements?"

These are examples of non-standard requirements:
<ul>
 	<li>Above-average DPS</li>
 	<li>Above-average QPS</li>
 	<li>Above-average number of start addresses or having HNSC enabled</li>
 	<li>Bare-minimum hardware or over-subscribed hosts</li>
 	<li>Above-average indexed item size</li>
 	<li>Large Search Schema (Site Columns)</li>
</ul>
&nbsp;

<strong>Above-average DPS</strong>

If you have requirements for an above-average Documents Per Second (DPS) or content-processing rate, you may need to add resources or dedicate servers to Content Processing Components (CPS).  CPCs need a lot of memory and CPU to push items through their processing pipelines.

<strong>Above-average QPS</strong>

If you have requirements for an above-average Queries Per Second (QPS) rate, you may need to add resources or dedicate servers to Query Processing and Index Components (QPC/IC).  QPCs and ICs both need physical cores to maintain QPS.  If other search components (or system processes) are competing for those cores, resource scarcity may cause QPS to be lower or latency to be higher.

<strong>Above-average number of start addresses or having HNSC enabled</strong>

If you have a high number of start addresses or have Host-Name Site Collections (HNSC) enabled, the crawler will spawn more threads to crawl each unique host name it encounters.  Crawler threads run at a higher priority than other search components' threads.  When lots of unique host names are being crawled, the number of threads the crawler uses may cause other search components to become resource starved.  Please refer to <a href="https://blogs.msdn.microsoft.com/sharepoint_strategery/">Brian Pendergrass's SharePoint Strategery blogs</a> for all things crawl (and many other wonderful search nuggets).

<strong>Bare-minimum hardware or over-subscribed hosts</strong>

CPCs, QPCs and ICs all rely heavily on CPUs and their cores.  If you are running multiple components on servers with the minimum number of CPUs/cores, in heavy-load scenarios (high DPS or QPS), your search components will be competing with each other for resources and may suffer performance degradation.  ICs require server-grade hard drives that can support the IC's IOP requirements.  Host server hardware must adequately support VM demands.  In general, you should treat search components, especially indexers, like SQL servers.  <a href="https://technet.microsoft.com/en-us/library/ff607811(v=office.16).aspx">Here is an overview of virtualization for SharePoint</a>.

<strong>Above-average indexed item size</strong>

Standard guidance for an IC hard drive is 500 GB.  For SP 2013, guidance is based on an average indexed item size of 20KB (Not the original document size--the size of the indexed item on disk after processing).   For 2013, as you approach the max items per index partition (10 M), if your average is above 20KB, you risk running out of disk space when the indexer attempts to perform a master merge.  For 2016, running out of disk space is much less of a concern because the indexers have greatly reduced their disk footprint and master merge efficiency.

<strong>Large Search Schema (Site Columns)</strong>

<a href="https://technet.microsoft.com/en-us/library/jj613136.aspx">A Site Column will auto-generate Managed Properties</a> (MP) in the Search Schema.  Whether auto-generated or through customization, additional MPs impact the size of the Search Schema, which in turn impact an IC's index footprint on disk and memory.  How much will depend on which properties are selected on the MP (e.g. Searchable, Queryable, Refinable, Sortable).  With each MP, the number of mappings that occur during content processing and the size of the index will increase, thus increasing the computational load on CPCs.  If you require (or will generate) large schemas, you may need to dedicate additional resources to CPCs and ICs.

&nbsp;

If you ever have questions on architecture requirements that may push your search system into the "non-standard" category, please contact your TAM and reach out to us at <a href="mailto:SearchEngineers@microsoft.com">SearchEngineers@microsoft.com</a>.

&nbsp;]]></content:encoded>
    </item>
    <item>
      <title>Relevant Relevancy Changes in SharePoint 2013 Sept and Oct 2016 CUs</title>
      <link>https://docs.microsoft.com/archive/blogs/ericdixon/relevant-relevancy-changes-in-sharepoint-2013-sept-and-oct-2016-cus</link>
      <pubDate>Wed, 04 Jan 2017 17:37:00 GMT</pubDate>
      <dc:creator><![CDATA[Eric Dixon - MSFT - Search PFE]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ericdixon/?p=85</guid>
      <description><![CDATA[Two recent features were added to the Search Service Application that can have an impact on...]]></description>
      <content:encoded><![CDATA[Two recent features were added to the Search Service Application that can have an impact on relevancy.  The features are enabled by the following flags: <b><span style="font-size: small">ResetSynonymWeightToOne</span></b><span style="font-size: small"> </span>and <b><span style="font-size: small">RecallContentOnlyInDefault</span></b>. According to the CU notes, the flags enable functionality defined as follows:

Sept. 2016 CU

<span style="font-size: small">This update provides a </span><strong><span style="font-size: small">ResetSynonymWeightToOne</span></strong><span style="font-size: small"> boolean flag in the Search Service Application, which can be set to $true to change the synonym weight to 100% of the original term.</span>

Oct. 2016 CU

<span style="font-size: small">This update provides a new </span><strong><span style="font-size: small">RecallContentOnlyInDefault</span></strong><span style="font-size: small"> boolean property in the search service application which can be set to $true to disable recall from all non-default update groups.</span>

Here is how these settings can impact you and scenarios under which you may want to enable them.

<strong>ResetSynonymWeightToOne</strong>

By default, the rank score contribution weight of a synonym is 20%.  For example, if you search using the query term "computer" and have a synonym for "computer" that is "laptop", the query is expanded.  The expanded query will match documents that contain "computer" or "laptop".  During ranking score calculation, the Term Frequency scores of "computer" and "laptop" will be calculated.  Since "laptop" is a synonym, its score will be reduced to 20% of its actual total, or in other words, multiplied by 0.2.

This default behavior is often unexpected or undesired to customers who use synonyms and feel that synonyms should be considered equally when calculating ranking scores.  Setting the ResetSynonymWeightToOne to $true will change the weighting of synonyms to 100% or, in other words, the term frequency score is not discounted.

Note: terms which expand queries through stemming or lemmatized forms are also weighted at 20%, but there currently is no supported way of changing this value.

<strong>RecallContentOnlyInDefault</strong>

This oddly named flag removes certain Managed Properties from consideration when recalling (or matching) documents for a query.  The Managed Properties not considered are those that are Searchable, but not in the default UpdateGroup.  To see a full list of all the properties that are affected you can run the following PowerShell:

$ssa | Get-SPEnterpriseSearchMetadataManagedProperty | ? {$_.UpdateGroup -ne $null -and $_.Searchable}

The most common scenario where you may want to consider using this flag is when the QLogClickedText Managed Property is populated.  The QLogClickedText property, which does not belong to the default UpdateGroup and is Searchable, is populated with the submitted query terms when a user clicks on a result.  For example, if a user submits the query "hardware" and clicks on search result #8 titled "A Computer Book", the QLogClickedText property for the document titled "A Computer Book" will be updated with the value "hardware".

The intention is to tie query terms to documents users interact with to provide better relevancy.  Since, by default, the QLogClickedText property is used for recall (document matching) and relevancy (document sorting), it is possible to get query terms associated with documents which Search Admins and users not feel represent the document well or are considered irrelevant to the document.  In this case, setting the RecallContentOnlyInDefault to $true will not consider Managed Properties not in the default Update Group (e.g. QLogClickedText) when matching or recalling documents for a query.  The values in these properties continue to be used for relevancy ranking scores.

&nbsp;]]></content:encoded>
    </item>
    <item>
      <title>SharePoint 2013 Search: Even Better Best Bets with Exact Matching</title>
      <link>https://docs.microsoft.com/archive/blogs/ericdixon/sharepoint-2013-search-even-better-best-bets-with-exact-matching</link>
      <pubDate>Fri, 23 Oct 2015 12:57:00 GMT</pubDate>
      <dc:creator><![CDATA[Eric Dixon - MSFT - Search PFE]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ericdixon/2015/10/23/sharepoint-2013-search-even-better-best-bets-with-exact-matching/</guid>
      <description><![CDATA[First, full credit goes to Mikael Svenson and Petter Skodvin-Hvammen for the original solution....]]></description>
      <content:encoded><![CDATA[<p>First, full credit goes to Mikael Svenson and Petter Skodvin-Hvammen for the original solution. &nbsp;This blog details a small modification to Mikael's "Better Best Bets" blog found here:&nbsp;https://blogs.msdn.com/b/mvpawardprogram/archive/2014/07/21/better-best-bets-with-lists-in-sharepoint-2013.aspx.</p>
<div>
<p>Today's blog is a bare-bones, step-by-step process modifying the Better Best Bets solution to do exact matches on keywords.&nbsp; The "Better Best Bets" solution can only do "contains" matches on keywords since the keyword column type is a taxonomy and has taxIds in the indexed content preventing exact matches.&nbsp;&nbsp;&nbsp;</p>
<p>From the "Better Best Bets" blog:</p>
<p style="padding-left: 30px;">If you have multi-word trigger terms, make sure all words are pretty good/unique to avoid unwanted partial matches.&nbsp;Or stick with the out of the box query rule matching with a promoted result instead.</p>
<p style="padding-left: 30px;">&nbsp;From &lt;<a href="https://blogs.msdn.com/b/mvpawardprogram/archive/2014/07/21/better-best-bets-with-lists-in-sharepoint-2013.aspx">https://blogs.msdn.com/b/mvpawardprogram/archive/2014/07/21/better-best-bets-with-lists-in-sharepoint-2013.aspx</a>&gt;</p>
<p>For example, if you have the Best Bet Keywords "United",&nbsp;"United States" and "Manchester United", the contains operator and the keyword "United" will match all three.&nbsp; This may be undesired behavior.&nbsp; Having the ability to use the exact match operator, the Keyword "United" will only match the "United" Best Bet Keyword.</p>
<p>The steps below detail how to use SharePoint lists to manage best bets which will do exact matches on multi-value keywords.&nbsp; For simplicity, the example below doesn't included the Date properties like the "Better Best Bets" solution, but they can be added and used just like they were previously.</p>
<p>This solutions uses two SharePoint lists.&nbsp; The first list contains all the keywords.&nbsp; The second list has a lookup column using the keywords in the first list.&nbsp; This is required so multi-valued data will be preserved during content processing and the exact match operator will match the multi-valued keywords correctly.</p>
<p>From a non-search site create a List that will be a source for the individual keywords.</p>
<ol type="1">
<li value="1"><span>Create Site Column for Keyword Source List</span></li>
<ol type="a">
<li value="1"><span>Site Settings &gt; Site Columns &gt; Create</span></li>
<ol type="i">
<li value="1"><span>Name: ebbbKeywordSource</span></li>
<li><span>Type: Single line of text</span></li>
<li><span>Put this site column into:</span></li>
<ol type="1">
<li value="1"><span>New Group: Even Better Best Bets</span></li>
</ol>
<li><span>Require that this column&hellip;: Yes</span></li>
<li><span>Enforce unique values: Yes</span></li>
<li><span>OK</span></li>
</ol></ol>
<li><span>Create Content Type for Keyword Source List</span></li>
<ol type="a">
<li value="1"><span>Site Settings &gt; Site content types &gt; Create</span></li>
<ol type="i">
<li value="1"><span>Name: EBBBKeywordSource</span></li>
<li><span>Select parent content type&hellip;: List Content Types</span></li>
<li><span>Parent Content Type: Item</span></li>
<li><span>New Group: Even Better Best Bets</span></li>
<li><span>OK</span></li>
</ol>
<li><span>Site Content Types &gt; Site Content Type (Even Better Best Bets Keyword Source)</span></li>
<ol type="i">
<li value="1"><span>Select Title column</span></li>
<ol type="1">
<li value="1"><span>Select Hidden</span></li>
<li><span>OK</span></li>
</ol>
<li><span>Add from existing site columns</span></li>
<ol type="1">
<li value="1"><span>Select ebbbKeywordSource</span></li>
<li><span>Click Add</span></li>
<li><span>OK</span></li>
</ol></ol></ol>
<li><span>Create a Custom Keyword Source List </span></li>
<ol type="a">
<li value="1"><span>List name: Even Better Best Bets Keyword Source List</span></li>
<li><span>Select List (Even Better Best Bets Keyword Source List) </span></li>
<ol type="i">
<li value="1"><span>List tab &gt; List Settings</span></li>
<li><span>Advanced Settings</span></li>
<ol type="1">
<li value="1"><span>Allow management of content types: Yes</span></li>
<li><span>Allow items from this list to appear in search results: No</span></li>
<li><span>OK</span></li>
</ol>
<li><span>Add from existing site content types</span></li>
<ol type="1">
<li value="1"><span>Select EBBBKeywordSource</span></li>
<li><span>Click Add</span></li>
<li><span>OK</span></li>
</ol></ol>
<li><span>Click Change new button order and default content type</span></li>
<ol type="1">
<li value="1"><span>Content Type: Item</span></li>
<ol type="a">
<li value="1"><span>Uncheck Visible</span></li>
</ol>
<li><span>Content Type: EvenBetterBestBets</span></li>
<ol type="a">
<li value="1"><span>Position from Top: 1</span></li>
</ol>
<li><span>OK</span></li>
</ol>
<li><span>Views &gt; All Items</span></li>
<ol type="1">
<li value="1"><span>Title</span></li>
<ol type="a">
<li value="1"><span>Uncheck Display</span></li>
</ol>
<li><span>ebbbKeywordSource</span></li>
<ol type="a">
<li value="1"><span>Check Display</span></li>
</ol>
<li><span>OK</span></li>
</ol>
<li><span>Enter Keyword values in ebbbKeywordSource column</span></li>
<ol type="i">
<li value="1"><span>Click "new item"</span></li>
<ol type="a">
<li value="1"><span>Enter a unique word or phrase </span></li>
<li><span>Save</span></li>
</ol>
<li><span>Repeat</span></li>
</ol></ol></ol>
<p>&nbsp;</p>
<p>From a non-search site create a List that will reference the Keywords Source List and hold the data used to create the Best Bets.</p>
<ol type="1">
<li value="1"><span>Create Site Columns</span></li>
<ol type="a">
<li value="1"><span>Site Settings &gt; Site Columns &gt; Create</span></li>
<ol type="i">
<li value="1"><span>Name: ebbbTitle</span></li>
<li><span>Type: Single line of text</span></li>
<li><span>Put this site column into:</span></li>
<ol type="1">
<li value="1"><span>Existing Group: Even Better Best Bets</span></li>
</ol>
<li><span>Require that this column&hellip;: Yes</span></li>
<li><span>Enforce unique values: Yes</span></li>
<li><span>OK</span></li>
</ol>
<li><span>Site Settings &gt; Site Columns &gt; Create</span></li>
<ol type="i">
<li value="1"><span>Name: ebbbURL</span></li>
<li><span>Type: Single line of text</span></li>
<li><span>Put this site column into:</span></li>
<ol type="1">
<li value="1"><span>Existing Group: Even Better Best Bets</span></li>
</ol>
<li><span>Require that this column&hellip;: Yes</span></li>
<li><span>OK</span></li>
</ol>
<li><span>Site Settings &gt; Site Columns &gt; Create</span></li>
<ol type="i">
<li value="1"><span>Name: ebbbKeywordsMatch</span></li>
<li><span>Type: Lookup</span></li>
<li><span>Put this site column into:</span></li>
<ol type="1">
<li value="1"><span>Existing Group: Even Better Best Bets</span></li>
</ol>
<li><span>"Require that this column&hellip;": Yes</span></li>
<li><span>Get information from: Even Better Best Bets Keyword Source List</span></li>
<li><span>In this column: ebbbKeywordSource</span></li>
<ol type="1">
<li value="1"><span>Allow multiple values: Yes</span></li>
</ol></ol></ol>
<li><span>Create Content Type</span></li>
<ol type="a">
<li value="1"><span>Site Settings &gt; Site content types &gt; Create</span></li>
<ol type="i">
<li value="1"><span>Name: EBBBList</span></li>
<li><span>Select parent content type&hellip;: List Content Types</span></li>
<li><span>Parent Content Type: Item</span></li>
<li><span>New Group: Even Better Best Bets</span></li>
<li><span>OK</span></li>
</ol>
<li><span>Site Content Types &gt; Site Content Type (EBBBList)</span></li>
<ol type="i">
<li value="1"><span>Click Title column</span></li>
<ol type="1">
<li value="1"><span>Select Hidden</span></li>
<li><span>OK</span></li>
</ol>
<li><span>Add from existing site columns</span></li>
<ol type="1">
<li value="1"><span>Select ebbbKeywordsMatch, ebbbTitle, ebbbURL</span></li>
<li><span>Click Add</span></li>
<li><span>OK</span></li>
</ol></ol></ol>
<li><span>Create Best Bets List</span></li>
<ol type="a">
<li value="1"><span>List name: Even Better Best Bets List</span></li>
<li><span>Create</span></li>
<li><span>Select List (Even Better Best Bets List)</span></li>
<ol type="i">
<li value="1"><span>List tab &gt; List Settings</span></li>
<li><span>Advanced settings &gt; Allow management of content types: Yes</span></li>
<li><span>OK</span></li>
<li><span>Add from existing site content types</span></li>
<ol type="1">
<li value="1"><span>Select EBBBList</span></li>
<li><span>Click Add</span></li>
<li><span>OK</span></li>
</ol>
<li><span>Click Change new button order and default content type</span></li>
<ol type="1">
<li value="1"><span>Content Type: Item</span></li>
<ol type="a">
<li value="1"><span>Uncheck Visible</span></li>
</ol>
<li><span>Content Type: EBBBList</span></li>
<ol type="a">
<li value="1"><span>Position from Top: 1</span></li>
</ol></ol>
<li><span>Views &gt; All Items</span></li>
<ol type="1">
<li value="1"><span>Title</span></li>
<ol type="a">
<li value="1"><span>Uncheck Display</span></li>
</ol>
<li><span>ebbbKeywordsMatch, ebbbTitle, ebbbURL</span></li>
<ol type="a">
<li value="1"><span>Check Display</span></li>
</ol>
<li><span>OK</span></li>
</ol></ol></ol>
<li><span>Enter data for Even Better Best Bets List</span></li>
<ol type="a">
<li value="1"><span>Click "new item"</span></li>
<li><span>Add data for ebbbKeywordsMatch, ebbbTitle and ebbbURL </span></li>
<li><span>Save</span></li>
<li><span>Repeat</span></li>
</ol>
<li><span>SSA Admin &gt; Content Sources &gt; Local SharePoint sites &gt; Full Crawl&nbsp; (or Content Source pointing to your site)</span></li>
<ol type="a">
<li value="1"><span>Once crawl has completed, the query </span><span>spcontenttype:ebbbList </span><span>will return all items in Even Better Best Bets List</span></li>
</ol>
<li><span>SSA Admin &gt; Search Schema &gt; Crawled Properties (or at the desired Tenant level)</span></li>
<ol type="a">
<li value="1"><span>Search for ebbb</span></li>
<li><span>For each ows_ebbb* field</span></li>
<ol type="i">
<li value="1"><span>Uncheck "Include in full-text index"</span></li>
</ol></ol>
<li><span>SSA Admin &gt; Search Schema &gt; Managed Properties (or at the desired Tenant level)</span></li>
<ol type="a">
<li value="1"><span>Verify fields ebb*OWSTEXT exists for Title and URL with Query and Retrieve properties (not Search) with a mapping.</span></li>
<li><span>New Managed Property</span></li>
<ol type="i">
<li value="1"><span>Name: ebbbKeywords</span></li>
<li><span>Type: Text</span></li>
<li><span>Check Queryable</span></li>
<li><span>Check Retrievable (optional, good for debugging)</span></li>
<li><span>Check Allow multiple values</span></li>
<li><span>Add a Mapping</span></li>
<ol type="1">
<li value="1"><span>Select ows_ebbbKeywordsMatch</span></li>
<li><span>OK</span></li>
</ol>
<li><span>OK</span></li>
</ol></ol>
<li><span>SSA Admin &gt; Content Sources &gt; Local SharePoint sites &gt; Full Crawl&nbsp; (or Content Source pointing to your site)</span></li>
<ol type="a">
<li value="1"><span>Once crawl has completed, the query </span><span>ebbbKeywords="&lt;keywords&gt;"</span><span>spcontenttype:ebbbList </span><span>will return all items in Even Better Best Bets List that match &lt;keywords&gt;.&nbsp; Supports exact match on multivalues.</span></li>
</ol></ol>
<p>&nbsp;</p>
<p>From the Search Center Site</p>
<ol type="1">
<li value="1"><span>Create Display Template</span></li>
<ol type="a">
<li value="1"><span>Search Center &gt; Site Settings &gt; Master pages and page layouts &gt; Display Templates &gt; Search &gt; Item_BestBets.html &gt; Download a Copy &gt; Save as Item_EvenBetterBestBets.html.</span></li>
<li><span>Edit Item_EvenBetterBestBets.html</span></li>
<ol type="i">
<li value="1"><span>&lt;title&gt;Even Better Best Bets&lt;/title&gt;</span></li>
<li><span>&lt;mso:ManagedPropertyMapping msdt:dt="string"&gt;'bbTitleOWSTEXT':'bbTitleOWSTEXT','bbURLOWSTEXT':'bbURLOWSTEXT'&lt;/mso:ManagedPropertyMapping&gt;</span></li>
<li><span>Save</span></li>
</ol>
<li><span>Display Templates &gt; File Tab &gt; Upload Document</span></li>
<ol type="i">
<li value="1"><span>Select file</span></li>
<li><span>OK</span></li>
<li><span>Save</span></li>
</ol></ol>
<li><span>Create Result Type</span></li>
<ol type="a">
<li value="1"><span>Search Center &gt; Site Settings &gt; Site Collection Administration &gt; Search Result Types &gt; New Result Type</span></li>
<ol type="i">
<li value="1"><span>Name: Even Better Best Bets</span></li>
<li><span>Show more conditions</span></li>
<ol type="1">
<li value="1"><span>Which custom properties should match: Content Type</span></li>
<li><span>(Value): EBBBList</span></li>
</ol>
<li><span>What should these results look like: Even Better Best Bet Item</span></li>
<li><span>Check Optimize for frequent use</span></li>
<li><span>Save</span></li>
</ol></ol>
<li><span>Create Result Source</span></li>
<ol type="a">
<li value="1"><span>Search Center &gt; Site Settings &gt; Site Collection Administration &gt; Search Result Sources &gt; New Result Source</span></li>
<ol type="i">
<li value="1"><span>Name: Even Better Best Bets</span></li>
<li><span>Query Transform: ebbbKeywords="{searchTerms}" spcontenttype=ebbblist</span></li>
<li><span>Save</span></li>
</ol></ol>
<li><span>Create Query Rule</span></li>
<ol type="a">
<li value="1"><span>Search Center &gt; Site Settings &gt; Site Collection Administration &gt; Search Query Rules </span></li>
<ol type="i">
<li value="1"><span>Select "Local SharePoint Results" &gt; New Query Rule</span></li>
<ol type="1">
<li value="1"><span>Rule Name: Even Better Best Bets</span></li>
<li><span>Remove Condition</span></li>
<li><span>Add Result Block</span></li>
<ol type="a">
<li value="1"><span>Title: Best Bets for "{subject Terms}"</span></li>
<li><span>Search this Source: Even Better Best Bets</span></li>
<li><span>Items: 5</span></li>
<li><span>Click Settings</span></li>
<ol type="i">
<li value="1"><span>Select This block is always shown above core results</span></li>
</ol>
<li><span>OK</span></li>
</ol>
<li><span>Change ranked results by changing the query (hide best bets content and list AllItems.aspx from "default" search results).</span></li>
<ol type="a">
<li value="1"><span>Query Text: {searchTerms} -spcontenttype:ebbblist -ListURL:"Even Better Best Bets List"</span></li>
<li><span>OK</span></li>
</ol>
<li><span>Save</span></li>
</ol></ol></ol>
<li><span>Test Best Bets from Search Box</span></li>
</ol>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><br /> &nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>]]></content:encoded>
    </item>
    <item>
      <title>SharePoint 2013 Search: How clicks change relevancy and rank scoring</title>
      <link>https://docs.microsoft.com/archive/blogs/ericdixon/sharepoint-2013-search-how-clicks-change-relevancy-and-rank-scoring</link>
      <pubDate>Thu, 03 Sep 2015 11:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Eric Dixon - MSFT - Search PFE]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ericdixon/2015/09/03/sharepoint-2013-search-how-clicks-change-relevancy-and-rank-scoring/</guid>
      <description><![CDATA[If you've ever looked at rank log or the ExplainRank.aspx page, you may have noticed that term...]]></description>
      <content:encoded><![CDATA[<div>If you've ever looked at rank log or the ExplainRank.aspx page, you may have noticed that term frequency scoring is only a portion of the total rank score.&nbsp; There are many other relevancy features which contribute to rank scoring.&nbsp; Among them are "click events".&nbsp; Click events measure the interaction, or lack of interaction, between a user and the search results.&nbsp; The information is then used to boost or de-boost documents accordingly.&nbsp; There are four "click events" which contribute to relevancy.&nbsp; They are, as named in the ExplainRank.aspx page: QueryLogClicks, QueryLogSkips, LastClicks and EventRate.&nbsp; The rank log, respectively, names them QLogClicks, QLogSkips, QLogLastClicks and EventRate.&nbsp; There is another event named ClickDistance, but technically it has nothing to do with click events.&nbsp; ClickDistance is a boost based on the distance or number of links (could be thought of as clicks) between a document and an authoritative source.</div>
<div>Here are definitions for the four click event relevancy features.</div>
<div>
<ul>
<li><strong>QueryLogClicks</strong> -&nbsp;A&nbsp;boost based on how often a document is clicked on in search results per query.</li>
<li><strong>QueryLogSkips</strong> - A de-boost based on how often another document of a <em>lower rank</em> is clicked on, <em>instead of</em> this document, in search results per query.</li>
<li><strong>LastClicks </strong>-&nbsp;A freshness like boost based on the last time this document was clicked on in a search result.</li>
<li><strong>EventRate</strong> - A boost based on how often a SharePoint document is clicked or viewed (not in search results).&nbsp;</li>
</ul>
</div>
<div>Note: EventRate is only tracked automatically for SharePoint documents.&nbsp; If desired, you can manually track events on external content through the .NET or JavaScript SearchExecutor class.&nbsp; Here are some links if you are interested in more details.</div>
<div><span><a href="https://msdn.microsoft.com/en-us/library/office/microsoft.office.server.search.query.searchexecutor.recordpageclick.aspx"><span style="color: #0000ff;">https://msdn.microsoft.com/en-us/library/office/microsoft.office.server.search.query.searchexecutor.recordpageclick.aspx</span></a> </span></div>
<div>
<p><span><a href="https://social.msdn.microsoft.com/Forums/en-US/530e9baf-a678-4245-a693-0e67b5bf0a9d/call-recordpageclick-from-custom-js-html?forum=sharepointsearch"><span style="color: #0000ff;">https://social.msdn.microsoft.com/Forums/en-US/530e9baf-a678-4245-a693-0e67b5bf0a9d/call-recordpageclick-from-custom-js-html?forum=sharepointsearch</span></a> </span></p>
</div>]]></content:encoded>
    </item>
    <item>
      <title>SharePoint 2013 Search: Full-Text Index and Context Weight Groups - What is wrong with my rank model?</title>
      <link>https://docs.microsoft.com/archive/blogs/ericdixon/sharepoint-2013-search-full-text-index-and-context-weight-groups-what-is-wrong-with-my-rank-model</link>
      <pubDate>Mon, 10 Aug 2015 16:08:00 GMT</pubDate>
      <dc:creator><![CDATA[Eric Dixon - MSFT - Search PFE]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ericdixon/2015/08/10/sharepoint-2013-search-full-text-index-and-context-weight-groups-what-is-wrong-with-my-rank-model/</guid>
      <description><![CDATA[Note (4/25/16): I've updated the recommended context listed at the bottom of this blog based on new...]]></description>
      <content:encoded><![CDATA[Note (4/25/16): I've updated the recommended context listed at the bottom of this blog based on new information and documentation from the Product Group.

In a previous <a href="https://blogs.msdn.com/b/ericdixon/archive/2015/06/03/sharepoint-2013-search-people-search-why-are-my-results-so-bad-understanding-relevancy-the-rank-model-full-text-index-and-fuzzy-matching.aspx">blog</a>, I talked about the important relationship between relevancy, rank models, managed properties, the full-text index (FTI) and context weight groups.  If you are going to doing any relevancy tuning, you must understand how managed properties map to context weight groups in the full-text index and how, through the rank model, you can assign weights to context weight groups by referencing a managed property belonging to a group.

Here is a <a href="https://technet.microsoft.com/library/7c8ddec1-c8ff-4a90-afae-387b27a653f1.aspx#Ranking_Schema">TechNet article</a> which gives a simple overview of that relationship.

What the article leaves out is that in the Default FTI, for some contexts, in addition to Context 0, it is possible to encounter scenarios where contexts will not contribute to Term Frequency scoring. For example, if a Query has hits ONLY in Context 3, the Term Score will not be calculated.  If you added managed properties to Context 3, hits on terms in those managed properties will only contribute to recall.  In the screenshot from the ExplainRank.aspx page below, you see that despite the query term 'update' being present in Context 3 (TF=1) the Weighted TF and Term Score is 0.

<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/69/87/6518.Context3.PNG"><img alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/69/87/6518.Context3.PNG" border="0" /></a>
<table style="border: 0px solid #000000;background-color: #fff2cc" border="0">
<tbody>
<tr>
<td><strong>When adding a Managed Property to a Context Weight Group in a Full-Text Index, if you want a term score calculated, be aware when using the following Contexts: 0, 3, 6, 11 and 14.  If the Query matches ONLY one of the previously listed Contexts, the Term Score will NOT be calculated and the term hits in the group will only contribute to recall.  It's probably best to not use these Contexts all together when adding custom Managed Properties to a Context.</strong></td>
</tr>
</tbody>
</table>
When adding a managed property that should contribute to a term score, first choose from contexts that have data similar in importance and <strong>length </strong>(check out the 'b' value in the rank model).  If you want the managed property to always contribute to the term score, stick to Context 1 (Title), Context 2 (Filename), Context 5 (Author), Context 7 (Body) or use an "unassigned" context like 9, 10, 12, 13 (I had originally listed Context 4 (Keywords) as a recommend context, but TechNet documentation does not call it out specifically like the others).  I've tested these contexts and relevancy works correctly.  You might have success with other contexts, but you need to thoroughly test it to ensure the term score is calculated as expected.]]></content:encoded>
    </item>
    <item>
      <title>SharePoint 2013 Search: People Search – “Why are my results so bad?”  Understanding Relevancy, the Rank Model, Full-Text Index, Fuzzy Matching, and Social Distance</title>
      <link>https://docs.microsoft.com/archive/blogs/ericdixon/sharepoint-2013-search-people-search-why-are-my-results-so-bad-understanding-relevancy-the-rank-model-full-text-index-fuzzy-matching-and-social-distance</link>
      <pubDate>Wed, 03 Jun 2015 11:16:00 GMT</pubDate>
      <dc:creator><![CDATA[Eric Dixon - MSFT - Search PFE]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ericdixon/2015/06/03/sharepoint-2013-search-people-search-why-are-my-results-so-bad-understanding-relevancy-the-rank-model-full-text-index-fuzzy-matching-and-social-distance/</guid>
      <description><![CDATA[I’ve heard this question come up enough now that I think it warrants deeper examination.  Several...]]></description>
      <content:encoded><![CDATA[I’ve heard this question come up enough now that I think it warrants deeper examination.  Several customers have complained about “bad results” in people search.  They search for Katherine Doe, but the number-one result is for Cathy Smith and it’s ranked higher than the Katherine Doe result.  While this seems like bad relevancy, if we step back and understand why the relevancy and ranked results are technically correct, we can make some informed choices that will bring us closer to the desired results.

The first step is understanding the difference between Recall and Precision.  The second is understanding how the default People Search Rank Model and the People Full-Text Index, called PeopleIdx, contribute to Recall and Precision.

<strong>Recall and Precision</strong>

In the context of information retrieval, or search, Recall and Precision measure the completeness and accuracy of a query’s results.  For our purposes, Recall defines the set of all possible documents that match a query, and Precision is the sort of the recalled set by a relevancy score.  In SharePoint 2013, we can equate Recall to the Full-Text Index and Precision to the Ranking Model.

<strong>Full-Text Index</strong>

In SharePoint 2013, when users create a Managed Property and set the Searchable property to “true”, they have the opportunity to assign the property to a Full-Text Index in the Advanced Searchable Settings.  SharePoint 2013 has several Full-Text Indexes, but only two are used by default:
<ol>
 	<li><em>Default</em>—the Full-Text Index for the "Local SharePoint Results" result source or the “Everything” vertical</li>
 	<li><em>PeopleIdx</em>— the Full-Text Index for the “Local People Results” result source or the “People” vertical.  All the people relevant managed properties are assigned to the PeopleIdx Full-Text Index</li>
</ol>
Some simple PowerShell reveals all Managed Properties assigned to PeopleIdx:
<p style="padding-left: 30px"><span style="font-size: x-small"><em>&gt; Get-SPEnterpriseSearchMetadataManagedProperty -SearchApplication $ssa | ? {$_.FullTextIndex -eq "PeopleIdx"} | ft Name, FullTextIndex, Context</em></span></p>
<p style="padding-left: 30px"><span style="font-size: x-small"><em>Name                                    FullTextIndex                                                           Context</em></span></p>
<p style="padding-left: 30px"><span style="font-size: x-small"><em>----                                    -------------                                                           -------</em></span></p>
<p style="padding-left: 30px"><span style="font-size: x-small"><em>AccountName                             PeopleIdx                                                                     9</em></span></p>
<p style="padding-left: 30px"><span style="font-size: x-small"><em>MyFirstName                           PeopleIdx                                                                    15</em></span></p>
<p style="padding-left: 30px"><span style="font-size: x-small"><em>MyLastName                            PeopleIdx                                                                    15</em></span></p>
<p style="padding-left: 30px"><span style="font-size: x-small"><em>CombinedName                            PeopleIdx                                                                    14</em></span></p>
<p style="padding-left: 30px"><span style="font-size: x-small"><em>ContentsHidden                          PeopleIdx                                                                     5</em></span></p>
<p style="padding-left: 30px"><span style="font-size: x-small"><em>JobTitle                                PeopleIdx                                                                     2</em></span></p>
<p style="padding-left: 30px"><span style="font-size: x-small"><em>Memberships                             PeopleIdx                                                                     6</em></span></p>
<p style="padding-left: 30px"><span style="font-size: x-small"><em>NgramPhoneNumbers                       PeopleIdx                                                                     0</em></span></p>
<p style="padding-left: 30px"><span style="font-size: x-small"><em>PreferredName                           PeopleIdx                                                                     1</em></span></p>
<p style="padding-left: 30px"><span style="font-size: x-small"><em>Pronunciations                          PeopleIdx                                                                     8</em></span></p>
<p style="padding-left: 30px"><span style="font-size: x-small"><em>RankingWeightHigh                       PeopleIdx                                                                     7</em></span></p>
<p style="padding-left: 30px"><span style="font-size: x-small"><em>RankingWeightLow                        PeopleIdx                                                                     4</em></span></p>
<p style="padding-left: 30px"><span style="font-size: x-small"><em>RankingWeightName                       PeopleIdx                                                                    13</em></span></p>
<p style="padding-left: 30px"><span style="font-size: x-small"><em>Responsibilities                        PeopleIdx                                                                     3</em></span></p>
<p style="padding-left: 30px"><span style="font-size: x-small"><em>SipAddress                              PeopleIdx                                                                    12</em></span></p>
<p style="padding-left: 30px"><span style="font-size: x-small"><em>UserName                                PeopleIdx                                                                    10</em></span></p>
<p style="padding-left: 30px"><span style="font-size: x-small"><em>WorkEmail                               PeopleIdx                                                                    11</em></span></p>
&nbsp;

These are all the Managed Properties that will be used for Recall when doing a people search.  There is a loose coupling between a Full-Text Index and a Rank Model.  Note that a Rank Model may not show all of the Managed Properties assigned to a Full-Text Index, so don’t forget that, despite their absence, all Managed Properties in the Full-Text Index contribute to recall, but with no weighting.  Also, any Managed Property that shares the same context as a property weighted in a Rank Model will receive the same weighting during rank score calculation.  So, if you add a Managed Property named Interests and assign it to context 3, and the Rank Model weights Responsibilities (e.g., w=”1.0”), Interests will receive the same weighting, despite not being specifically named in the Rank Model.

<strong>People Search Rank Models</strong>

The default People Search Rank Model is named “People Search application ranking model” (<a href="https://technet.microsoft.com/library/7c8ddec1-c8ff-4a90-afae-387b27a653f1.aspx#Ranking_Models">https://technet.microsoft.com/library/7c8ddec1-c8ff-4a90-afae-387b27a653f1.aspx#Ranking_Models</a>).  Rank Models provide Precision or Relevancy Ranking for a recalled search result set.  Note that of the 16 OOB rank models, six are specific to People Search.  One of these rank models may serve your needs better than the default.  To choose which model is best for you, you’ll need to understanding the rank model beyond its description and understand the configuration of the rank model.<strong></strong>

PowerShell provides some nifty Cmdlets that export the rank model configuration XML (<a href="https://msdn.microsoft.com/en-us/library/office/dn169052(v=office.15).aspx#sp15_using_custom_ranking_model">https://msdn.microsoft.com/en-us/library/office/dn169052(v=office.15).aspx#sp15_using_custom_ranking_model</a> ).  If you look at the XML config for the default People Search ranking model, you should notice a couple things.  First, the model has two stages (&lt;RankingModel2NN&gt;).  The first stage is a lighter calculation used to sort all the results that were matched or recalled from the search index.  The second stage is used to resort the top 1000 results.  It uses a more complex sorting algorithm, adding proximity weights to the calculation.  Not all ranking models have two stages; some models (e.g. People Search name ranking model) only have one stage.  Second, the ranking model names all the fields that will be weighted with their weight values and a bias value.

Here is an excerpt of the properties definition and weightings from the default people search rank model.
<p class="Style1CxSpFirst">    <span style="font-size: x-small">   &lt;Properties&gt;</span></p>
<p class="Style1CxSpMiddle"><span style="font-size: x-small">          &lt;Property name="RankingWeightName" w="0.5" b="0.5" propertyName="RankingWeightName" /&gt;</span></p>
<p class="Style1CxSpMiddle"><span style="font-size: x-small">          &lt;Property name="PreferredName" w="1.0" b="0.5" extractOccurrence="1" propertyName="PreferredName" /&gt;</span></p>
<p class="Style1CxSpMiddle"><span style="font-size: x-small">          &lt;Property name="JobTitle" w="2.0" b="0.5" extractOccurrence="1" propertyName="JobTitle" /&gt;</span></p>
<p class="Style1CxSpMiddle"><span style="font-size: x-small">          &lt;Property name="Responsibilities" w="1.0" b="0.85714285719" extractOccurrence="1" propertyName="Responsibilities" /&gt;</span></p>
<p class="Style1CxSpMiddle"><span style="font-size: x-small">          &lt;Property name="RankingWeightLow" w="0.2" b="0.85714285719" extractOccurrence="1" propertyName="RankingWeightLow" /&gt;</span></p>
<p class="Style1CxSpMiddle"><span style="font-size: x-small">          &lt;Property name="ContentsHidden" w="0.1" b="0.85714285719" extractOccurrence="1" propertyName="ContentsHidden" /&gt;</span></p>
<p class="Style1CxSpMiddle"><span style="font-size: x-small">          &lt;Property name="Memberships" w="0.25" b="0.85714285719" extractOccurrence="1" propertyName="Memberships" /&gt;</span></p>
<p class="Style1CxSpMiddle"><span style="font-size: x-small">          &lt;Property name="RankingWeightHigh" w="2.0" b="0.5" extractOccurrence="1" propertyName="RankingWeightHigh" /&gt;</span></p>
<p class="Style1CxSpMiddle"><span style="font-size: x-small">          &lt;Property name="Pronunciations" w="0.05" b="0.5" propertyName="Pronunciations" /&gt;</span></p>
<p class="Style1CxSpLast"><span style="font-size: x-small">        &lt;/Properties&gt;</span></p>
<p class="Style1CxSpLast"> <strong>Social Distance</strong></p>
<span>An important note needs to be made here about Social Distance Ranking.  As you explore the default people ranking model, you will notice dynamic ranking features such as FirstLevelColleagues, SecondLevelColleagues and LevelsToTop.  These are part of the Social Distance ranking feature, and their intention is to add a relevancy boost to colleagues and management close to you, with respect to your company's organizational chart.  The issue is that, out of the box, it doesn't work correctly.**  <strong>I've heard conflicting reports that recent patches have fixed this issue for both SPO and On-prem SharePoint environments.  I have not been able to verify.  Please test thoroughly. </strong> </span>

<span>If it is not working, an examination of the ULS log for a "default" People search query will reveal the following entry:</span>
<p style="padding-left: 30px"><span class="ms-rtefontsize-1" style="font-size: x-small">07/17/2014 01:13:34.85  NodeRunnerQuery1-963b71f2-33dc- (0x1280)    0x1584  Search  Query Processing             aiziq                Monitorable                Microsoft.Office.Server.Search.Query.Pipeline.Processing.PersonalizationDataInjectionEvaluator : Field: PersonalizationData 'null'. <strong>Personalized Search queries will not work </strong>      0be6b1d5-3bd8-4aac-a1f1-08d7c75867cc</span></p>
<span>The web part is not setting the "PersonalizationData" parameter.  The consequence is the null parameter prevents Social Distance Ranking from being calculated.  Fortunately, there are three workarounds, but the last is the most simple to implement.<span class="apple-converted-space"> For all workarounds, </span><span class="yj-message">verify the Web Application hosting the Enterprise Search center is associated with a UPSA proxy (This association should work OOB with a 2013 proxy, but not 2010). (1) Use the Query REST API and add the "PersonalizationData" parameter with the search user's User Profile GUID as the value.  (2) Create a custom search web part and add the User Profile GUID.  SCOM uses the parameter name "QueryPersonalizationData".  (3) Edit the People Search results page, edit the People Search Core Results web part, and click Change Query:</span></span>
<p style="padding-left: 30px"><span style="font-size: x-small"><span class="yj-message">Old:</span></span></p>
<span class="yj-message">{searchboxquery}</span>

<span class="yj-message">New:</span>

<span class="yj-message">{?(({searchboxquery} XRANK(cb=2) firstlevelcolleagues:{User.userprofile_guid}) XRANK(cb=1) secondlevelcolleagues:{User.userprofile_guid}) XRANK(cb=7.5) userprofile_guid:{User.userprofile_guid}}</span>

<span class="yj-message">Or if you want to get real fancy:</span>
<p style="padding-left: 30px"><span class="yj-message" style="font-size: x-small"> {?((((((({searchboxquery} XRANK(cb=2) firstlevelcolleagues:{User.userprofile_guid}) XRANK(cb=1) secondlevelcolleagues:{User.userprofile_guid}) XRANK(cb=7.5) userprofile_guid:{User.userprofile_guid}) XRANK(cb=1) levelstotop:1) XRANK(cb=0.8) levelstotop:2) XRANK(cb=0.6) levelstotop:3) XRANK(cb=0.4) levelstotop:4) XRANK(cb=0.2) levelstotop:5}</span></p>
<span>Note that the XRANK operator can have an impact on query latency, so test this (or any solution) before putting it into production.  Also, note that latency is directly tied to index size, so what performs well in a small test environment may perform poorly in a very large production environment.</span>

<span>**A big thanks to Mikkel Conradi for doing all the leg work on this issue.</span>

<strong>“Why are my results so bad?” </strong>

Back to the Katherine Doe/Cathy Smith scenario where searching for Katherine Doe produces results with Cathy Smith at the top.

In reality, the results aren’t bad.  They are exactly what they should be.  Understanding the metadata and how it’s used in the rank model and Full-Text Index will explain why.  First, some background for our scenario.  Katherine Doe is an Executive and Cathy Smith is her Assistant.  In Cathy Smith’s User Profile under Responsibilities it lists “Executive Assistant for Katherine Doe”, while under Memberships, it shows Cathy is a member of “Katherine Doe Direct Reports” group.

If we refer to the default People Rank Model, we see that it includes, along with PreferredName, Memberships and Responsibilities.  So a search for Katherine Doe produces hits in Cathy Smith’s Memberships and Responsibilities Managed Properties, while no hits are in the corresponding Managed Properties for Katherine Doe (Katherine’s name does not appear in these fields.  She is not a member of her direct reports group and she is not her own Executive Assistant).  The hits in the non-name fields are often forgotten or not noticed because they are not displayed in the default Item_Person.html display template and are only partially displayed in the Item_Person_HoverPanel.html display template.  Katherine does get a hit, for both first and last name, in the PreferredName field, but so does Cathy, at least on the first name.  Cathy is a nickname for Katherine, so Fuzzy Matching, which is enabled by default on People Searches, will add “Cathy” as a nickname synonym, for the Katherine term to the query.

<strong>Fuzzy Matching</strong>

To be honest, the documentation on the Fuzzy Matching feature in SharePoint 2013 is quite… fuzzy.  Often phonetic matching is mentioned when talking about SP 2013 Fuzzy Matching components, but to be clear, there is no intrinsic phonetic matching in SP 2013.  It did exist in SharePoint 2010, but it is not in SP 2013.

SharePoint 2013 Fuzzy Matching is comprised of three services: (1) Core Fuzzy Name Search, (2) Name Suggestions, and (3) Name Intent Search.  The latter, Name Intent Search, is only used as part of a Query Rule condition used to identify People Queries from a “non-People” vertical.  Core Fuzzy Name Search is a spelling or distance algorithm that measures similarity of terms.  Results from this service can look a lot like a phonetic match, but they’re not.  For example, the query 'katherine' will return results for what appears to be its phonetic match 'catherine'.  Examination of verbose ULS logs reveals the real story.  The term 'catherine' is added to the query because of its spelling similarity or distance from 'katherine', not for its phonetic equivalency. Additionally, not only is 'catherine' considered, but so are 'gathering', 'katharine'.
<p style="padding-left: 30px"><span style="color: #000000;font-size: x-small">06<em>/04/2015 12:14:49.21 NodeRunnerQuery1-aaaaedc2-86d0- (0x0F24) 0x129C Search Fuzzy Name Search ajyg0 VerboseEx FuzzyNameSearcher : CoreCCAFuzzySearcher mined [Candidate:<strong>catherine</strong> GeometricSimilarity: 0.999740619082072 NormalizedConfidence:0.999740619082072] for Query:<strong>katherine</strong> IsComparable:true  531f0d9d-9c5c-c0a8-27b6-5ef65f3bbadb</em></span></p>
<p style="padding-left: 30px"><span style="color: #000000;font-size: x-small"><em>06/04/2015 12:14:50.58 NodeRunnerQuery1-aaaaedc2-86d0- (0x0F24) 0x12B4 Search Query Processing aizf6 High Microsoft.Office.Server.Search.Query.Pipeline.Executors.LinguisticQueryProcessingExecutor : QSC: All Annotations: &lt;Annotation ID="1" Name="token" Range="[0,9)" Attributes={normalizedForm="katherine"} NumericalAttributes={}/&gt;,&lt;Annotation ID="2" Name="querysegment" Range="[0,9)" Attributes={} NumericalAttributes={}/&gt;,&lt;Annotation ID="2001" Name="spellcheck" Range="[0,9)" Attributes={Fuzzy="<strong>catherine</strong>",Score="0.888888888888889",dynamic="",value="5"} NumericalAttributes={}/&gt;,&lt;Annotation ID="2002" Name="spellcheck" Range="[0,9)" Attributes={Fuzzy="<strong>gathering</strong>",Score="0.777777777777778",dynamic="",value="5"} NumericalAttributes={}/&gt;,&lt;Annotation ID="2003" Name="spellcheck" Range="[0,9)" Attributes={Fuzzy="<strong>katharine</strong>",Score="0.888888888888889",dynamic="",value="6"} NumericalAttributes={}/&gt;,&lt;Annotation ID="2004" Name="spellcheck" Range="[0,9)" Attributes={Fuzzy="<strong>katherine</strong>",Score="1",dynamic="",value="5"} NumericalAttributes={}/&gt;,&lt;Annotation ID="4001" Name="qsc_known_word" Range="[0,9)" Attributes={value="9"} NumericalAttributes={}/&gt; 531f0d9d-6cb7-c0a8-27b6-5022c0ff2a0d</em></span></p>
Most of the confusion comes from the now poorly named “EnablePhonetics” parameter, found in a Search web part’s DataProviderJSON configuration or in the Query Object Model.  The vestigial “EnablePhonetics” parameter enables Core Fuzzy Name Searching, which unfortunately has no phonetic matching features.  Name Suggestions is the nickname synonym service.  Names found in the nickname dictionary will have their nickname mappings added to the query.

Use the following PowerShell to see what nicknames are handled by the service:
<p class="Style1">&gt; Get-SPEnterpriseSearchLanguageResourcePhrase -type NickName -Language en-US -SearchApplication $ssa -Owner $owner | ft Phrase, Mapping</p>
<strong> </strong>

<strong>Conclusion</strong>

So what to do about the Cathrine Doe &gt; Kathy Smith scenario?  First, decide on the purpose of your “People” search vertical.  Is it a people name directory look up?  An expertise search?  Should the sorting be influenced by social distance or your organizational chart?  Then pick your Ranking Model.  You might find that the “People Name search ranking model” better suits your needs than the default “People Search application ranking model.”  Take time to look at which Managed Properties each ranking model weighs most heavily.  You might even notice that the “People Search expertise ranking model” is very poorly named.]]></content:encoded>
    </item>
    <item>
      <title>SharePoint 2013 Search: Ranked Result Blocks – The Definitive Answer</title>
      <link>https://docs.microsoft.com/archive/blogs/ericdixon/sharepoint-2013-search-ranked-result-blocks-the-definitive-answer</link>
      <pubDate>Thu, 02 Apr 2015 10:03:00 GMT</pubDate>
      <dc:creator><![CDATA[Eric Dixon - MSFT - Search PFE]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ericdixon/2015/04/02/sharepoint-2013-search-ranked-result-blocks-the-definitive-answer/</guid>
      <description><![CDATA[I&rsquo;ve been stumped for a long time on how Ranked Result Blocks really work.&nbsp; When creating...]]></description>
      <content:encoded><![CDATA[<p>I&rsquo;ve been stumped for a long time on how Ranked Result Blocks really work.&nbsp; When creating a Result Block, two options are presented: (1) This block is always shown above core results. (2) This block is ranked within core results (may not show).&nbsp; The first option is self-explanatory.&nbsp; The block will always show above the results, though it may display under another result block.&nbsp; The second options says the block will be ranked with the other search results, but how is it ranked?</p>
<p>The statement &ldquo;This block is <strong>ranked </strong>within core results&rdquo; is misleading and has caused many SharePoint Search Admins to incorrectly believe that somehow the block has received a relevancy-ranking score and is blended in with the search result items returned by the original query.&nbsp;</p>
<p>In my own personal experimentation, I noticed that if I created two result blocks, the last block created appeared in the first position and first block I created was in the fourth position.&nbsp; How could something be &ldquo;ranked within core results&rdquo; if the positioning was absolute?</p>
<p>I searched online for some sort of documentation, but I found no answer.&nbsp; I asked many of my search peers how result blocks were ranked; no one knew for sure; however, one lone opinion is that ranking is related to clicks.&nbsp;I finally found a lone reference in a Search Community forum supporting the assertion that the ranking is determined by clicks, so I tested the theory.&nbsp; I created two result blocks and clicked like mad on the &ldquo;lower ranked&rdquo; block, but I couldn&rsquo;t make it move and was unable to validate the theory.</p>
<p>The question arose again recently with one of my customers.&nbsp; He had the same question: &ldquo;Why do my Ranked Result Blocks always appear in the same positions?&rdquo; I finally reached out to the Jedi Knight of all things search, Dan Pandre, and said, &ldquo;Help! I&rsquo;m <em>trying </em>to understand Ranked Result Blocks.&rdquo;&nbsp; Dan said, &ldquo;Try not. Do, or do not. There is no try.&nbsp;There is only source code.&rdquo;</p>
<h1>The Definitive Answer</h1>
<p>After digging through the code, with some guidance from Dan, I finally arrived at what I believe is the definitive answer.&nbsp; Here are the facts:</p>
<ul>
<li>Ranked Result Blocks are ranked according to a "predicted click %" score.&nbsp;</li>
<li>A newly created Ranked Result Block has a &ldquo;predicted click %&rdquo; of 0.811.&nbsp; This score will change over time according to the predictive click algorithm and the number of clicks within a Result Block (i.e., clicks on results in the block are registered with the block id).</li>
<li>Clicks within the Result Block are recorded and then compiled on a 15-minute interval by the Query Logging timer job.</li>
<li>When Result Blocks are triggered by a query and gathered for results, they are first sorted by greatest &ldquo;predicted click %&rdquo; score to smallest and then assigned to slots. A Ranked Result Block may appear in one of three slots (i.e., slots 0, 2 and 4) that are interleaved with the search results.&nbsp; Only one Result Block per slot is allowed.&nbsp;</li>
<li>Search results may appear in slots 1, 3 and 5.&nbsp; Default settings place two search results, if available, in slots 1 and 3 and &ldquo;the rest&rdquo; in slot 5.&nbsp; The effect is two results between each Result Block.&nbsp;</li>
<li>Each slot has a minimum threshold that the Ranked Result Block &ldquo;predictive click %&rdquo; score&nbsp;must exceed.</li>
<li>To appear in Slot 0 (the top), a result block must have a &ldquo;predictive click %&rdquo; score greater than 0.5 (this is why a newly created block is almost always on top). &nbsp;&nbsp;In order to appear in Slot 2, a Result block must have a &ldquo;predictive click %&rdquo; score&nbsp;greater than 0.18.&nbsp; In order to appear in Slot 4, a Result Block must have a &ldquo;predictive click %&rdquo; score greater than 0.0.&nbsp; Again, only one Result Block is allowed per slot. &nbsp;&nbsp;&nbsp;</li>
</ul>
<p>In summary, a Ranked Result Block is ranked by its &ldquo;predictive click %&rdquo; score&nbsp;relative to other Ranked Result Blocks scores.&nbsp; It will appear in one of three predetermined slots if the &ldquo;predictive click %&rdquo; score exceeds the Slot threshold.</p>
<p>Below is an example of a search results page with Ranked Result Blocks in slots 0, 2 and 4 and search results in slots 1, 3 and 5.</p>
<p><br /> <a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/69/87/7587.results.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-69-87/7587.results.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/69/87/7587.results.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-69-87/7587.results.png" alt="" width="444" height="1158" border="0" /></a><br /> <br />&nbsp; <br />&nbsp; <br />&nbsp; <br />&nbsp; <br />&nbsp; <br />&nbsp; <br />&nbsp; <br />&nbsp; <br />&nbsp; <br />&nbsp; <br />&nbsp; <br />&nbsp; <br /> <br /> <br /> <br /><br /></p>]]></content:encoded>
    </item>
    <item>
      <title>SharePoint 2013 Search: Managing Query Rules with PowerShell</title>
      <link>https://docs.microsoft.com/archive/blogs/ericdixon/sharepoint-2013-search-managing-query-rules-with-powershell</link>
      <pubDate>Thu, 19 Mar 2015 16:21:00 GMT</pubDate>
      <dc:creator><![CDATA[Eric Dixon - MSFT - Search PFE]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ericdixon/2015/03/19/sharepoint-2013-search-managing-query-rules-with-powershell/</guid>
      <description><![CDATA[One thing I've noticed about Query Rules, Search Admins are really good at creating...]]></description>
      <content:encoded><![CDATA[<p>One thing I've noticed about Query Rules, Search Admins are really good at creating Query&nbsp;Rules... not so good at deleting them.&nbsp;&nbsp;Query Rules become&nbsp;difficult to manage when the number&nbsp;of rules in the&nbsp;environment grows to several dozen, hundreds or even thousands.</p>
<p>As content and&nbsp;relevancy change with time, Query Rules may become invalid or unnecessary.&nbsp; For example, a Promoted Result Query Rule (Best Bet) may now point to a resource that no longer exists or the document a Promoted Result points to which was&nbsp;previously&nbsp;buried deep in the search results is now the #1 result.</p>
<p>To this end I created a script that will help the Search Admin identify and delete "invalid"&nbsp;Query Rules.&nbsp; The intention of the script is to identify three basic use cases, log and, if desired, delete the&nbsp;logged Query Rules.&nbsp; The use cases are:</p>
<ol>
<li>The URL in a&nbsp;Promoted Result action of the Query Rule is no longer valid.</li>
<li>The Promoted Result appears in the top search results.</li>
<li>The Query Rule no longer has Actions.</li>
</ol>
<p>The script may be downloaded from the TechNet Script Gallery.&nbsp; Click on over to <a href="https://gallery.technet.microsoft.com/PowerShell-script-tests-b20b780d">https://gallery.technet.microsoft.com/PowerShell-script-tests-b20b780d</a> to learn more.&nbsp;</p>]]></content:encoded>
    </item>
  </channel>
</rss>