<?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>Blog On Search</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/nicolasu/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/nicolasu/feed.xml</link>
    <description>This blog is mainly about my personal experience around Search Technologies in general. It&amp;#039;s all about Giving back to the community.  All sample scripts are provided AS IS without warranty of any kind.</description>
    <lastBuildDate>Tue, 16 Apr 2019 05:50:04 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>SharePoint Search (SPO/SP2013/SP2016) - Refiner Dropdown popup</title>
      <link>https://docs.microsoft.com/archive/blogs/nicolasu/sharepoint-search-sposp2013sp2016-refiner-dropdown-popup</link>
      <pubDate>Sun, 11 Feb 2018 11:28:34 GMT</pubDate>
      <dc:creator><![CDATA[NicolasU1 - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/nicolasu/?p=635</guid>
      <description><![CDATA[Hi Search Folks

As you might have seen in my previous post , it is easy to bring more innovative...]]></description>
      <content:encoded><![CDATA[Hi Search Folks

As you might have seen in my previous <a href="https://blogs.msdn.microsoft.com/nicolasu/2018/02/11/sharepoint-search-sposp2013sp2016-create-an-horizontal-search-refinement-panel/">post </a>, it is easy to bring more innovative solutions to show refiners in a Search Center. Another thing I wanted to achieve is the ability to have Refiner with a drop down menu.

<a href="https://msdnshared.blob.core.windows.net/media/2018/02/2018-02-11_1214.png"><img src="https://msdnshared.blob.core.windows.net/media/2018/02/2018-02-11_1214.png" alt="" width="847" height="448" class="alignnone size-full wp-image-645" /></a>

The menu I'm proposing here is single-valued, and without further due you can download

<a href="https://msdnshared.blob.core.windows.net/media/2018/02/Filter_Dropdown_Popup.zip">Filter_Dropdown_Popup</a>

Needless to say that you have to put the HTML and CSS into the Display Templates/Filters directory of your masterpage.

<strong>The code is provided as is, mainly based on the default Filter_Default.html template. </strong>

Keep on innovating !]]></content:encoded>
    </item>
    <item>
      <title>SharePoint Search (SPO/SP2013/SP2016) - Create an Horizontal Search Refinement Panel</title>
      <link>https://docs.microsoft.com/archive/blogs/nicolasu/sharepoint-search-sposp2013sp2016-create-an-horizontal-search-refinement-panel</link>
      <pubDate>Sun, 11 Feb 2018 10:52:16 GMT</pubDate>
      <dc:creator><![CDATA[NicolasU1 - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/nicolasu/?p=575</guid>
      <description><![CDATA[Hi Search Folks

A simple blog post to give a tip to create new Search User Experience. The...]]></description>
      <content:encoded><![CDATA[Hi Search Folks

A simple blog post to give a tip to create new Search User Experience. The default Enterprise Search Center conditions you with a vertical refinement panel and main results. While this is a "SP standard" I encourage everyone to challenge that standardization. E-Commerce sites are always a good example of Search refinement and facets creativity.

So to demonstrate a new Refiner way, I went on to create an Horizontal Refinement panel. To further value, I included the Refiner Sort drop down which I wanted to act as a refiner.

The Group control code can be found below.

<a href="https://msdnshared.blob.core.windows.net/media/2018/02/Control_Refinement_Horizontal.zip">Control_Refinement_Horizontal</a>
<h2>Refiner Sort drop down specifics</h2>
In order to leverage the Sort drop down "refiner", your Search Results WP requires the option "Show sort dropdown" enabled. In the backend, this enables the necessary JS function for sorting and ranking. Without this enabled, the Sort refiner won't work.

Once this is enabled the last thing to do is to hide the default drop down to clean your UI. Add the below CSS snippet in your Result page wherever place you feel relevant to add CSS customizations.
<pre><span>.ms-srch-result #ResultHeader</span>
{
display: none !important;
}

</pre>
<h2>Horizontal Search Refinement Panel</h2>
Now that we have this Sort Refiner customization in place we can add the Here are the steps
<ul>
 	<li>Upload the Group template "<span>Control_Refinement_Horizontal.html" </span>in the Display Templates / Filters directory</li>
 	<li>Edit your Search Center result page</li>
 	<li>Add a Refinement Web Part in the main search results zone (below the Search Box or Search Navigation)</li>
</ul>
<a href="https://msdnshared.blob.core.windows.net/media/2018/02/2018-02-11_1003.png"><img src="https://msdnshared.blob.core.windows.net/media/2018/02/2018-02-11_1003.png" alt="" width="321" height="658" class="alignnone size-full wp-image-595" /></a>
<ul>
 	<li>Choose the Refiners you want to include. I recommend to carefully select Refiners with a limited number of values or with a visual like Created or Modified date time.</li>
</ul>
<a href="https://msdnshared.blob.core.windows.net/media/2018/02/2018-02-11_1003_001.png"><img src="https://msdnshared.blob.core.windows.net/media/2018/02/2018-02-11_1003_001.png" alt="" width="879" height="337" class="alignnone size-full wp-image-605" /></a>
<ul>
 	<li>Save the page</li>
</ul>
&nbsp;

<strong>In my Search Results page, the final result looks like this</strong>

<a href="https://msdnshared.blob.core.windows.net/media/2018/02/2018-02-11_1144.png"><img src="https://msdnshared.blob.core.windows.net/media/2018/02/2018-02-11_1144.png" alt="" width="1040" height="839" class="alignnone size-full wp-image-615" /></a>

&nbsp;

Keep in Search.]]></content:encoded>
    </item>
    <item>
      <title>O365 - Questions/Answers</title>
      <link>https://docs.microsoft.com/archive/blogs/nicolasu/o365-questionsanswers</link>
      <pubDate>Fri, 05 May 2017 06:29:07 GMT</pubDate>
      <dc:creator><![CDATA[NicolasU1 - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/nicolasu/?p=556</guid>
      <description><![CDATA[Hi

A quick post on some common questions with regards to O365 and SharePoint...]]></description>
      <content:encoded><![CDATA[Hi

A quick post on some common questions with regards to O365 and SharePoint Online.

<strong>Workplace</strong>

<a href="https://products.office.com/en-us/office-system-requirements">https://products.office.com/en-us/office-system-requirements</a>

<strong>Device Support</strong>

<a href="https://support.office.com/en-us/article/Compare-how-different-mobile-devices-work-with-Office-365-bdd06229-776a-4824-947c-82425d72597b">https://support.office.com/en-us/article/Compare-how-different-mobile-devices-work-with-Office-365-bdd06229-776a-4824-947c-82425d72597b</a>

<strong>Office Online browser support</strong>

<a href="https://support.office.com/en-us/article/Office-Online-browser-support-AD1303E0-A318-47AA-B409-D3A5EB44E452">https://support.office.com/en-us/article/Office-Online-browser-support-AD1303E0-A318-47AA-B409-D3A5EB44E452</a>

<strong>Office 365 supports both IPv6 and IPv4;</strong> however, not all Office 365 features are fully enabled with IPv6. This means that you must use both IPv4 and IPv6 to connect to Office 365

<a href="https://support.office.com/en-us/article/IPv6-support-in-Office-365-services-c08786fb-298e-437c-8222-dab7625fc815">https://support.office.com/en-us/article/IPv6-support-in-Office-365-services-c08786fb-298e-437c-8222-dab7625fc815</a>

<strong>Network planning and performance tuning for Office 365</strong>

<a href="https://support.office.com/en-us/article/Network-planning-and-performance-tuning-for-Office-365-e5f1228c-da3c-4654-bf16-d163daee8848">https://support.office.com/en-us/article/Network-planning-and-performance-tuning-for-Office-365-e5f1228c-da3c-4654-bf16-d163daee8848</a>

<strong>Network and migration planning for Office 365</strong>

<a href="https://support.office.com/en-us/article/Network-and-migration-planning-for-Office-365-f5ee6c33-bcd7-4b0b-b0f8-dc1d9fb8d132?ui=en-US&amp;rs=en-US&amp;ad=US">https://support.office.com/en-us/article/Network-and-migration-planning-for-Office-365-f5ee6c33-bcd7-4b0b-b0f8-dc1d9fb8d132?ui=en-US&amp;rs=en-US&amp;ad=US</a>

<strong>SharePoint Online software boundaries and limits</strong>

<a href="https://support.office.com/en-us/article/SharePoint-Online-software-boundaries-and-limits-8f34ff47-b749-408b-abc0-b605e1f6d498">https://support.office.com/en-us/article/SharePoint-Online-software-boundaries-and-limits-8f34ff47-b749-408b-abc0-b605e1f6d498</a>

<strong>Plan customizations, solutions, and apps for SharePoint Online</strong>

<a href="https://support.office.com/en-us/article/Plan-customizations-solutions-and-apps-for-SharePoint-Online-b7898ebf-69b7-4196-81e3-b04e1a4e7d67">https://support.office.com/en-us/article/Plan-customizations-solutions-and-apps-for-SharePoint-Online-b7898ebf-69b7-4196-81e3-b04e1a4e7d67</a>
<p class="title"><strong>SharePoint Add-ins</strong></p>
<a href="https://msdn.microsoft.com/EN-US/library/office/fp179930.aspx">https://msdn.microsoft.com/EN-US/library/office/fp179930.aspx</a>

<strong>O365 API Catalog</strong>

<a href="https://msdn.microsoft.com/en-us/office/office365/api/api-catalog">https://msdn.microsoft.com/en-us/office/office365/api/api-catalog</a>

<strong>Microsoft Graph</strong>

<a href="https://developer.microsoft.com/en-us/graph/">https://developer.microsoft.com/en-us/graph/</a>

<strong>O365 uses encryption to protect and secure data and communications</strong>

<a href="https://technet.microsoft.com/en-us/library/dn569286.aspx">https://technet.microsoft.com/en-us/library/dn569286.aspx</a>

<strong>O365 Your data</strong>

<a href="https://www.microsoft.com/en-us/trustcenter/privacy/you-own-your-data">https://www.microsoft.com/en-us/trustcenter/privacy/you-own-your-data</a>

<strong>O365 Compliance </strong>

All compliance reports are accessible in the Service Assurance in the O365 Security &amp; Compliance Center <a href="https://support.office.com/en-us/article/Service-assurance-in-the-Office-365-Security-Compliance-Center-47e8b964-4b09-44f7-a2d7-b8a06e8e389c?ui=en-US&amp;rs=en-US&amp;ad=US">https://support.office.com/en-us/article/Service-assurance-in-the-Office-365-Security-Compliance-Center-47e8b964-4b09-44f7-a2d7-b8a06e8e389c?ui=en-US&amp;rs=en-US&amp;ad=US</a>

<strong>O365 Data location</strong>

Microsoft provides O365 from different datacenters located world-wide. The exact location for DSM would depend upon of the tenants chosen-location (i.e. West Europe).

<a href="https://o365datacentermap.azurewebsites.net/">https://o365datacentermap.azurewebsites.net/</a>

<strong>O365 Data encryption</strong>

O365 data are encrypted at rest, in transit and in some scenarios at file level.

<a href="https://www.microsoft.com/en-us/trustcenter/security/encryption#Office-365">https://www.microsoft.com/en-us/trustcenter/security/encryption#Office-365</a>

<strong>O365 Engaging with our Support </strong>

Office 365 Customer Lockbox feature which will help a customer to control how a Microsoft support engineer is going to access customer data during a scenario where customers have raised a support request to investigate some service issues related to customers Office 365 tenant.

<a href="https://blogs.office.com/2015/04/21/announcing-customer-lockbox-for-office-365/">https://blogs.office.com/2015/04/21/announcing-customer-lockbox-for-office-365/</a>

<strong>O365 IT management and privileged access to the services </strong>

Office 365 comes with a set of admin roles that you can <a href="https://support.office.com/en-us/article/assign-eac4d046-1afd-4f1a-85fc-8219c79e1504">assign</a> to users in your organization. Each admin role maps to common business functions, and gives people in your organization permissions to do specific tasks in the Office 365 admin center.

<a href="https://support.office.com/en-us/article/About-Office-365-admin-roles-da585eea-f576-4f55-a1e0-87090b6aaa9d">https://support.office.com/en-us/article/About-Office-365-admin-roles-da585eea-f576-4f55-a1e0-87090b6aaa9d</a>

Stay Online !]]></content:encoded>
    </item>
    <item>
      <title>SP2013/SP2016 - Switching tenant on a Cloud SSA : Onboarding</title>
      <link>https://docs.microsoft.com/archive/blogs/nicolasu/sp20132016-switching-tenant-on-a-cloud-ssa-onboarding</link>
      <pubDate>Wed, 08 Mar 2017 20:25:55 GMT</pubDate>
      <dc:creator><![CDATA[NicolasU1 - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/nicolasu/?p=516</guid>
      <description><![CDATA[Hi Folks

Starting a series of quick posts on the Cloud SSA so you could take full advantage of...]]></description>
      <content:encoded><![CDATA[Hi Folks

Starting a series of quick posts on the Cloud SSA so you could take full advantage of its capabilities and enrich your SPO Search experience.
<h3>Today's Problematic</h3>
I came across the necessity to re-onboard a Cloud SSA on my SP2013 environment against a different tenant. There are few considerations when doing so. In this post, I'll focus on the Onboarding problematic.

Having tried the Onboarding script as-is, it wasn't straight forward as I already had an Azure Access Control Service (ACS), SPO App Management Proxy and ACS Token Issuer configured. The script isn't removing any of those only requiring you to do it manually.

Those 3 entities are bound to your tenant one way or another therefore deletion is mandatory to onboard our Cloud SSA on a different tenant.

If you dump those 3 objects you will see those bounds to your tenant. My tenant id is <strong><span style="color: #000000">e46a619f-8a46-4b91-a8c5-60904e04e135</span> </strong>and uri <strong>https://msxxxxxx.sharepoint.com</strong>.
<h3>Azure Access Control Service (ACS)</h3>
<pre>SecurityTokenServiceHostNameSuffix : 
TypeName                           : Azure Access Control Service Application Proxy
DiscoveryConfiguration             : Microsoft.SharePoint.Administration.SPAzureAccessControlServiceDiscoveryConfiguration
<span style="color: #ff0000"><strong>MetadataEndpointUri               </strong> </span>: https://accounts.accesscontrol.windows.net/<span style="color: #ff0000">e46a619f-8a46-4b91-a8c5-60904e04e135</span>/metadata/json/1
ManageLink                         : 
PropertiesLink                     : 
CanUpgrade                         : True
IsBackwardsCompatible              : True
NeedsUpgradeIncludeChildren        : False
NeedsUpgrade                       : False
UpgradeContext                     : Microsoft.SharePoint.Upgrade.SPUpgradeContext
Name                               : ACS
DisplayName                        : ACS
Id                                 : 31089571-eb78-4d69-a7ff-ae8bc3345ed3
Status                             : Online
Parent                             : SPAzureAccessControlServiceProxy
Version                            : 4034005
Properties                         : {}
Farm                               : SPFarm Name=SP_Config
UpgradedPersistedProperties        : {}
CanSelectForBackup                 : True
DiskSizeRequired                   : 0
CanSelectForRestore                : True
CanRenameOnRestore                 : True</pre>
&nbsp;
<h3>ACS STS - TrustedSecurityTokenIssuer</h3>
<pre>IsSelfIssuer                  : False
NameId                        : 
RegisteredIssuerName          : 00000001-0000-0000-c000-000000000000@e46a619f-8a46-4b91-a8c5-60904e04e135
IdentityClaimTypeInformation  : Microsoft.SharePoint.Administration.Claims.SPTrustedClaimTypeInformation
Description                   : 
SigningCertificate            : [Subject]
...
AdditionalSigningCertificates : {[Subject]
...
<span style="color: #ff0000"><strong>MetadataEndPoint             </strong> </span>: https://accounts.accesscontrol.windows.net/<span style="color: #ff0000">e46a619f-8a46-4b91-a8c5-60904e04e135</span>/metadata/json/1
IsAutomaticallyUpdated        : True
Name                          : ACS-STS
TypeName                      : Microsoft.SharePoint.Administration.Claims.SPTrustedSecurityTokenService
DisplayName                   : ACS-STS
Id                            : 6626e9a3-8f2a-4797-90a7-52858cb10655
Status                        : Online
Parent                        : SPSecurityTokenServiceManager Name=SecurityTokenServiceManager
Version                       : 4034018
Properties                    : {}
Farm                          : SPFarm Name=SP_Config
UpgradedPersistedProperties   : {}</pre>
&nbsp;
<h3>SPO App Management Proxy</h3>
<pre>TypeName                    : SharePoint Online Application Principal Management Service Application Proxy
<span style="color: #ff0000">OnlineTenantUri             : https://msxxxxxx.sharepoint.com/</span>
ManageLink                  : 
PropertiesLink              : 
CanUpgrade                  : True
IsBackwardsCompatible       : True
NeedsUpgradeIncludeChildren : False
NeedsUpgrade                : False
UpgradeContext              : Microsoft.SharePoint.Upgrade.SPUpgradeContext
Name                        : SPO App Management Proxy
DisplayName                 : SPO App Management Proxy
Id                          : d8f3ff14-6182-4c6b-a544-1597ff00e20a
Status                      : Online
Parent                      : SPOnlineApplicationPrincipalManagementServiceProxy
Version                     : 4034024
Properties                  : {}
Farm                        : SPFarm Name=SP_Config
UpgradedPersistedProperties : {}</pre>
&nbsp;

<span style="text-decoration: underline">Conclusion</span> : you need to delete those 3 entities before re-onboarding any new tenant in your Cloud SSA.

&nbsp;
<h3>PowerShell Script to remove those tenant-bound entities</h3>
<span style="color: #00008b;font-family: Lucida Console;font-size: small">Param</span><span style="font-family: Lucida Console;font-size: small">(</span>

<span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">[</span><span style="color: #00bfff;font-family: Lucida Console;font-size: small">Parameter</span><span style="font-family: Lucida Console;font-size: small">(Mandatory</span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">=</span><span style="color: #ff4500;font-family: Lucida Console;font-size: small">$true</span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">,</span><span style="font-family: Lucida Console;font-size: small"> HelpMessage</span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">=</span><span style="color: #8b0000;font-family: Lucida Console;font-size: small">"SharePoint Online portal URL, for example 'https://contoso.sharepoint.com'."</span><span style="font-family: Lucida Console;font-size: small">)</span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">]</span>

<span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">[</span><span style="color: #00bfff;font-family: Lucida Console;font-size: small">ValidateNotNullOrEmpty</span><span style="font-family: Lucida Console;font-size: small">()</span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">]</span>

<span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">[</span><span style="color: #008080;font-family: Lucida Console;font-size: small">string</span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">]</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #ff4500;font-family: Lucida Console;font-size: small">$PortalUrl</span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">,</span>

<span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">[</span><span style="color: #008080;font-family: Lucida Console;font-size: small">switch</span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">]</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #ff4500;font-family: Lucida Console;font-size: small">$Remove</span>

)

<span style="color: #ff4500;font-family: Lucida Console;font-size: small">$ACS_APPPROXY_NAME</span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">=</span><span style="color: #8b0000;font-family: Lucida Console;font-size: small">'ACS'</span>

<span style="color: #ff4500;font-family: Lucida Console;font-size: small">$ACS_STS_NAME</span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">=</span><span style="color: #8b0000;font-family: Lucida Console;font-size: small">'ACS-STS'</span>
<pre># Remove ACS Proxy</pre>
<span style="color: #ff4500;font-family: Lucida Console;font-size: small">$acsProxy</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">=</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #0000ff;font-family: Lucida Console;font-size: small">Get-SPServiceApplicationProxy</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">|</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #0000ff;font-family: Lucida Console;font-size: small">?</span><span style="font-family: Lucida Console;font-size: small"> {</span><span style="color: #ff4500;font-family: Lucida Console;font-size: small">$_</span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">.</span><span style="font-family: Lucida Console;font-size: small">DisplayName </span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">-eq</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #ff4500;font-family: Lucida Console;font-size: small">$ACS_APPPROXY_NAME</span><span style="font-family: Lucida Console;font-size: small">}</span>

<span style="color: #ff4500;font-family: Lucida Console;font-size: small">$acsProxy</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">|</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #0000ff;font-family: Lucida Console;font-size: small">fl</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #8a2be2;font-family: Lucida Console;font-size: small">*</span>

<span style="color: #00008b;font-family: Lucida Console;font-size: small">if</span><span style="font-family: Lucida Console;font-size: small"> (</span><span style="color: #ff4500;font-family: Lucida Console;font-size: small">$Remove</span><span style="font-family: Lucida Console;font-size: small">) { </span><span style="color: #0000ff;font-family: Lucida Console;font-size: small">Remove-SPServiceApplicationProxy</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #000080;font-family: Lucida Console;font-size: small">-Identity</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #ff4500;font-family: Lucida Console;font-size: small">$acsProxy</span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">.</span><span style="font-family: Lucida Console;font-size: small">Id }</span>
<pre># Remove the ACS Token Issuer</pre>
<span style="color: #ff4500;font-family: Lucida Console;font-size: small">$acsTokenIssuer</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">=</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #0000ff;font-family: Lucida Console;font-size: small">Get-SPTrustedSecurityTokenIssuer</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">|</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #0000ff;font-family: Lucida Console;font-size: small">?</span><span style="font-family: Lucida Console;font-size: small"> {</span><span style="color: #ff4500;font-family: Lucida Console;font-size: small">$_</span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">.</span><span style="font-family: Lucida Console;font-size: small">DisplayName </span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">-eq</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #ff4500;font-family: Lucida Console;font-size: small">$ACS_STS_NAME</span><span style="font-family: Lucida Console;font-size: small">}</span>

<span style="color: #ff4500;font-family: Lucida Console;font-size: small">$acsTokenIssuer</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">|</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #0000ff;font-family: Lucida Console;font-size: small">fl</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #8a2be2;font-family: Lucida Console;font-size: small">*</span><span style="font-family: Lucida Console;font-size: small"> </span>

<span style="color: #00008b;font-family: Lucida Console;font-size: small">if</span><span style="font-family: Lucida Console;font-size: small"> (</span><span style="color: #ff4500;font-family: Lucida Console;font-size: small">$Remove</span><span style="font-family: Lucida Console;font-size: small">) { </span><span style="color: #0000ff;font-family: Lucida Console;font-size: small">Remove-SPTrustedSecurityTokenIssuer</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #000080;font-family: Lucida Console;font-size: small">-Identity</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #ff4500;font-family: Lucida Console;font-size: small">$acsTokenIssuer</span><span style="font-family: Lucida Console;font-size: small"> }</span>
<pre># Remove the SPO App Management</pre>
<span style="color: #ff4500;font-family: Lucida Console;font-size: small">$spoProxy</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">=</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #0000ff;font-family: Lucida Console;font-size: small">Get-SPServiceApplicationProxy</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">|</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #0000ff;font-family: Lucida Console;font-size: small">?</span><span style="font-family: Lucida Console;font-size: small"> {</span><span style="color: #ff4500;font-family: Lucida Console;font-size: small">$_</span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">.</span><span style="font-family: Lucida Console;font-size: small">TypeName </span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">-eq</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #8b0000;font-family: Lucida Console;font-size: small">"SharePoint Online Application Principal Management Service Application Proxy"</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">-and</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #ff4500;font-family: Lucida Console;font-size: small">$_</span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">.</span><span style="font-family: Lucida Console;font-size: small">OnlineTenantUri </span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">-eq</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">[</span><span style="color: #008080;font-family: Lucida Console;font-size: small">System.Uri</span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">]</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #ff4500;font-family: Lucida Console;font-size: small">$PortalUrl</span><span style="font-family: Lucida Console;font-size: small">}</span>

<span style="color: #ff4500;font-family: Lucida Console;font-size: small">$spoProxy</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">|</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #0000ff;font-family: Lucida Console;font-size: small">fl</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #8a2be2;font-family: Lucida Console;font-size: small">*</span>

<span style="color: #00008b;font-family: Lucida Console;font-size: small">if</span><span style="font-family: Lucida Console;font-size: small"> (</span><span style="color: #ff4500;font-family: Lucida Console;font-size: small">$Remove</span><span style="font-family: Lucida Console;font-size: small">) { </span><span style="color: #0000ff;font-family: Lucida Console;font-size: small">Remove-SPServiceApplicationProxy</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #000080;font-family: Lucida Console;font-size: small">-Identity</span><span style="font-family: Lucida Console;font-size: small"> </span><span style="color: #ff4500;font-family: Lucida Console;font-size: small">$spoProxy</span><span style="color: #a9a9a9;font-family: Lucida Console;font-size: small">.</span><span style="font-family: Lucida Console;font-size: small">Id } </span>

&nbsp;

Done. Note that by default the script will allow you to validate which entity we are referring to. You can double-check your tenant URI and GUID too. Then use the -Remove flag to proceed with the deletion.

I hope you help quicken your re-onboarding.

Keep in Search]]></content:encoded>
    </item>
    <item>
      <title>SharePoint - Working with IIS Logs</title>
      <link>https://docs.microsoft.com/archive/blogs/nicolasu/sharepoint-working-with-iis-logs</link>
      <pubDate>Tue, 24 Jan 2017 14:04:55 GMT</pubDate>
      <dc:creator><![CDATA[NicolasU1 - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/nicolasu/?p=456</guid>
      <description><![CDATA[Hi Search Folks

As with ULS Logs (see my previous entry...]]></description>
      <content:encoded><![CDATA[Hi Search Folks

As with ULS Logs (see my previous entry <a href="https://blogs.msdn.microsoft.com/nicolasu/2016/12/20/sharepoint-working-with-uls/">https://blogs.msdn.microsoft.com/nicolasu/2016/12/20/sharepoint-working-with-uls/</a>) , IIS is also a good source of data for troubleshooting SharePoint issues whether you need to analyze some user behavior or look at the response times of your pages or search queries.

Assuming you are now familiar with Log Parser Studio, you might have seen that the IIS log format aka <strong>IISW3CLOG</strong> is built-in which makes our life much easy.
<h3>So how do I proceed ?</h3>
<ul>
 	<li>Open LogParser Studio</li>
 	<li>Create a new query.</li>
 	<li>The below query is adding extract columns for analysis enrichment. It also excludes 401 requests by default.</li>
</ul>
<pre>select EXTRACT_FILENAME(LogFilename) as filename,LogRow,
date,time,s-ip,cs-method,cs-uri-stem,cs-uri-query,s-port,TO_UPPERCASE(cs-username) as cs-username,c-ip,cs(User-Agent) as UserAgent,cs(Referer) as Referer,sc-status,sc-substatus,sc-win32-status,time-taken,
to_int(to_string(to_timestamp(date,time),'yyyy')) as TYear,
to_int(to_string(to_timestamp(date,time),'MM')) as TMonth,
to_int(to_string(to_timestamp(date,time),'dd')) as TDay,
to_int(to_string(to_timestamp(date,time),'hh')) as THour,
to_int(to_string(to_timestamp(date,time),'mm')) as TMinutes,
to_int(to_string(to_timestamp(date,time),'ss')) as TSeconds,
to_lowercase(EXTRACT_FILENAME(cs-uri-stem)) as fname,
to_lowercase(EXTRACT_EXTENSION(cs-uri-stem)) as fext,
case div(time-taken, 1000) when 0 then '00-01' else case div(time-taken,3000) when 0 then '01-03' else case div(time-taken,5000) when 0 then '03-05' else case div(time-taken,10000) when 0 then '05-10' else case div(time-taken,20000) when 0 then '10-20' else case div(time-taken,30000) when 0 then '20-30' else '30+' end end end end end end as PerfBucket
FROM '[LOGFILEPATH]'
where sc-status&lt;&gt;401</pre>
<ul>
 	<li>Select the input type as IISW3CLOG</li>
</ul>
<a href="https://msdnshared.blob.core.windows.net/media/2017/01/2017-01-24_1050.png"><img src="https://msdnshared.blob.core.windows.net/media/2017/01/2017-01-24_1050.png" alt="2017-01-24_1050" class="size-full wp-image-475 aligncenter" width="594" height="342" /></a>
<ul>
 	<li>Now it is time to indicate to LogParser Studio where your IIS log files are located.</li>
</ul>
<p style="padding-left: 30px">One very good thing of LogParser is its ability to query against multiple files as input and merge them all into one single output.</p>

<ul>
 	<li>Click on the Log File Manager and add all IIS logs you want to process.</li>
</ul>
<a href="https://msdnshared.blob.core.windows.net/media/2017/01/2017-01-24_1056.png"><img src="https://msdnshared.blob.core.windows.net/media/2017/01/2017-01-24_1056.png" alt="2017-01-24_1056" class="wp-image-485 aligncenter" width="691" height="439" /></a>
<ul>
 	<li>You're all set to execute your first IIS query!</li>
 	<li>You would notice two extra columns : Filename and RowNumber. Those are LogParser specific, automatically generated upon processing. They will always appear when executing SELECT * queries. Filename can be used to maintain the origin of your IIS or differentiate IIS logs set.</li>
</ul>
<strong>Note</strong> that the query doesn't specify any output file hence the resulting data would only be shown in LogParser Studio pane, not very ideal for analysis.
<ul>
 	<li>To output in a CSV or TSV, add the INTO clause BEFORE THE FROM clause</li>
</ul>
<pre>INTO '[OUTFILEPATH]\Output.TSV' 
FROM '[LOGFILEPATH]'
where sc-status&lt;&gt;401</pre>
<ul>
 	<li>Output into a TSV or CSV will open Excel to visualize the output generated from your query.</li>
</ul>
<a href="https://msdnshared.blob.core.windows.net/media/2017/01/2017-01-24_1115.png"><img src="https://msdnshared.blob.core.windows.net/media/2017/01/2017-01-24_1115.png" alt="2017-01-24_1115" class="wp-image-495 aligncenter" width="752" height="439" /></a>

&nbsp;

Et voila !<strong> </strong>You are now all set to quickly process IIS logs. <strong>Don't forget to save your query ! </strong>

<strong>Resources
</strong>
<ol>
 	<li><a href="https://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;=tm&amp;id=4616" title="Analyze SharePoint Products and Technologies Usage">Analyze SharePoint Products and Technologies Usage</a></li>
 	<li>Other blogs related to LogParser and IIS.</li>
</ol>
&nbsp;

Stay in Search !]]></content:encoded>
    </item>
    <item>
      <title>SharePoint Crawl log and the mysterious SearchID !</title>
      <link>https://docs.microsoft.com/archive/blogs/nicolasu/sharepoint-crawl-log-and-the-mysterious-searchid</link>
      <pubDate>Sun, 22 Jan 2017 12:10:35 GMT</pubDate>
      <dc:creator><![CDATA[NicolasU1 - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/nicolasu/?p=465</guid>
      <description><![CDATA[Hi Search Folks,

A very quick post to clarify the mysterious SearchID GUID seen when...]]></description>
      <content:encoded><![CDATA[Hi Search Folks,

A very quick post to clarify the mysterious SearchID GUID seen when troubleshooting Crawl Errors.

Whenever an item crawl fails to crawl , the URL View page (CA / Search Service Application) will provide you with a error message but also with a SearchID GUID.

<a href="https://msdnshared.blob.core.windows.net/media/2017/01/2017-01-22_1237.png"><img src="https://msdnshared.blob.core.windows.net/media/2017/01/2017-01-22_1237.png" alt="2017-01-22_1237" class="wp-image-466 aligncenter" width="712" height="357" /></a>

Well, mystery solved...The <strong><span style="text-decoration: underline">SearchID GUID is the actual Correlation Id</span> </strong>you can extract to find out more details about the crawl error. You can then issue a simple PS command to extract the much needed ULS (note the lowercasing).
<pre>Merge-SPLogFile -Path "D:\temp\sitemastercrawlerror.log" -Correlation "3006F2D8-20F6-40F1-86A7-87FFC4C5238E".ToLowerInvariant()</pre>
As long as you have the ULS still available in your farm, you can start troubleshooting very quickly any crawl error.

One more thing...

For those you like to practice their PS abilities, you may consider automating the extraction of crawl errors out of the Crawl Log output. Remember that the Crawl Log object is available through SP Object Model (SP2013+) and allows you to retrieve all Crawl Log related data. You can then parse the ErrorDesc column to extract the SearchID and issue automatically Merge-SPLogFile.

<span style="text-decoration: underline">Example of dumping Crawl Logs errors onto a CSV file (Adapt the SSA name, the Content Source and output file path)</span>
<pre>$ssa = Get-SPEnterpriseSearchServiceApplication | Where-Object {$_.Name -eq "<span style="color: #ff0000">Search Service Application</span>"}
$id = Get-SPEnterpriseSearchCrawlContentSource -SearchApplication $ssa | ? { $_.Name -eq "<span style="color: #ff0000">Intranet</span>"}
$log = New-Object Microsoft.Office.Server.Search.Administration.CrawlLog $ssa
$dt = $log.GetCrawledUrls($false, 1000000, $null, $false, $id.Id, 2, -1, [System.DateTime]::MinValue, [System.DateTime]::MaxValue)
$dt | Export-CSV –Path “<span style="color: #ff0000">Crawllogs.csv</span>” -NoTypeInformation</pre>
&nbsp;

That's it. I hope this could helps you in your SharePoint Search journey.

Keep your Search up !]]></content:encoded>
    </item>
    <item>
      <title>SP2013/SP2016 - Quick Search Query Performance Data Extraction and Analysis with Excel</title>
      <link>https://docs.microsoft.com/archive/blogs/nicolasu/sp2013-quick-search-query-performance-data-extraction-and-analysis-with-excel</link>
      <pubDate>Mon, 26 Dec 2016 16:00:37 GMT</pubDate>
      <dc:creator><![CDATA[NicolasU1 - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/nicolasu/?p=315</guid>
      <description><![CDATA[Hi Search Folks,

I wanted to share a quick method to extract Search query performance and build...]]></description>
      <content:encoded><![CDATA[Hi Search Folks,

I wanted to share a quick method to extract Search query performance and build your own Analytics around it.

For a start you would need to familiarize yourself to LogParser Studio (LPS). I've published a post to get you started : <a href="https://blogs.msdn.microsoft.com/nicolasu/2016/12/20/sharepoint-working-with-uls/">https://blogs.msdn.microsoft.com/nicolasu/2016/12/20/sharepoint-working-with-uls/</a>
<h2>Search Performance</h2>
Before diving into the extraction and analysis, I need to point out which tag our Search Performance data will be based upon. The slide below explains at a high level the flow of a Search query.

The ULS entry dk91 is produced by the Web Front End Search Service Application Proxy upon receiving the query response.
<h3>High Level Query Flow</h3>
<a href="https://msdnshared.blob.core.windows.net/media/2016/12/DK91-2016-12-23_1736.png"><img src="https://msdnshared.blob.core.windows.net/media/2016/12/DK91-2016-12-23_1736.png" alt="dk91-2016-12-23_1736" class=" wp-image-385 aligncenter" width="980" height="549" /></a>
<h3><span style="text-decoration: underline">Structure of a DK91 Event Message</span></h3>
<span style="color: #993300"> SearchServiceApplicationProxy::Execute--Id: Elapsed Time: <strong>250</strong> IMSProxyTime <strong>229</strong> QP Time: <strong>214</strong> Client Type <strong>CSOM</strong> TenantId <strong>00000000-0000-0000-0000-000000000000
</strong></span>

All times in DK91 are expressed in <strong>ms</strong>.

Some counters explaining to do
<ul>
 	<li><span style="color: #000000"><strong>"Elapsed Time" : Round trip execution time at the Web Front End level (from the moment the query enters a WFE and returns). </strong></span></li>
 	<li><span style="color: #000000"><strong> "IMSProxyTime" : Round trip execution time at the SQSS level (internally named IMS). </strong></span></li>
 	<li><span style="color: #000000"><strong>"QP Time": Round trip execution time at the Query Component level. This includes the Index Components exec times. </strong> </span></li>
</ul>
<span style="color: #000000">For convenience of the Analysis, we are adding two new calculated metrics. The below two are useful to highlight resources struggling servers (CPU mostly). <strong> </strong></span>
<ul>
 	<li><span style="color: #000000"><strong>"WFEIMSLatency" : Latency between the Web Front End and SQSS. </strong></span></li>
 	<li><span style="color: #000000"><strong>"IMSQPLatency": Latency between the SQSS and the Query Component. </strong></span></li>
</ul>
<h2>Time for data extraction</h2>
Once you've gained sufficient LPS experience,
<ul>
 	<li>Collect ULS logs files of your SP Web Front Ends (WFE). We will only use those to extract Search Query Performance data.</li>
 	<li>Create a new Query in LPS</li>
</ul>
Use the below template. Adapt the output .tsv file name to your convenience.
<pre><span style="color: #993300">/* WFE dk91 Extraction */</span>
<span style="color: #993300">/* SearchServiceApplicationProxy::Execute--Id: Elapsed Time: 250 IMSProxyTime 229 QP Time: 214 Client Type CSOM TenantId 00000000-0000-0000-0000-000000000000    ab83b99d-f737-a0bf-1ff7-265cc0d362bc */</span>

<span style="color: #993300">SELECT </span>
<span style="color: #993300">extract_token(EXTRACT_FILENAME(Filename),0,'-') as server,</span>
<span style="color: #993300">TO_INT(extract_token(substr(message, ADD(INDEX_OF(message,'Elapsed Time: '),14)),0,' ')) as ElapsedTime,</span>
<span style="color: #993300">TO_INT(extract_token(substr(message, ADD(INDEX_OF(message,'IMSProxyTime '),13)),0,' ')) as IMSProxyTime,</span>
<span style="color: #993300">TO_INT(extract_token(substr(message, ADD(INDEX_OF(message,'QP Time: '),9)),0,' ')) as QPTime,</span>
<span style="color: #993300">extract_token(substr(message, ADD(INDEX_OF(message,'Client Type '),12)),0,' ') as ClientType,</span>
<span style="color: #993300">SUB(ElapsedTime,IMSProxyTime) as WFEIMSLatency,</span>
<span style="color: #993300">SUB(IMSProxyTime,QPTime) as IMSQPLatency,</span>
<span style="color: #993300">STRCAT(STRCAT(YearText,MonthText),DayText) as Date,</span>
<span style="color: #993300">TRIM(SUBSTR(Timestamp,6,4)) AS Year, </span>
<span style="color: #993300">TRIM(SUBSTR(Timestamp,0,2)) AS Month, </span>
<span style="color: #993300">TRIM(SUBSTR(Timestamp,3,2)) AS Day,</span>
<span style="color: #993300">TRIM(SUBSTR(Timestamp,11,8)) AS Time,</span>
<span style="color: #993300">TRIM(SUBSTR(Timestamp,11,2)) AS Hour,</span>
<span style="color: #993300">TRIM(SUBSTR(Timestamp,14,2)) AS Minute,</span>
<span style="color: #993300">TRIM(SUBSTR(Timestamp,17,2)) AS Second,</span>
<span style="color: #993300">Correlation </span>
<span style="color: #993300">USING </span>
<span style="color: #993300">STRCAT(SUBSTR(Timestamp,6,4), '-') as YearText,</span>
<span style="color: #993300">STRCAT(SUBSTR(Timestamp,0,2), '-') as MonthText, </span>
<span style="color: #993300">STRCAT(SUBSTR(Timestamp,3,2), ' ') As DayText</span>

<span style="color: #993300">INTO 'F:\Temp\mergedULS-DK91.tsv' </span>
<span style="color: #993300">FROM '[LOGFILEPATH]' </span>
<span style="color: #993300">where eventid like '%dk91%'</span></pre>
<ul>
 	<li>This query assumes the ULS file are named following SP standard</li>
</ul>
<pre>SERVERNAME-DATE-TIME.log</pre>
for instance SERVER1-20161121-0924.log

If you use a merged ULS log file you can simply modify the query to remove the server field but you will lose the ability to track a misbehaving WFE.
<ul>
 	<li>This query will produce one TSV as you see in the INTO clause.</li>
</ul>
<a href="https://msdnshared.blob.core.windows.net/media/2016/12/DK91-2016-12-23_1648.png"><img src="https://msdnshared.blob.core.windows.net/media/2016/12/DK91-2016-12-23_1648.png" alt="dk91-2016-12-23_1648" class="wp-image-375 aligncenter" width="454" height="416" /></a>

&nbsp;
<ul>
 	<li>Associate the file extension .tsv with Excel for a quick review. The association will result in opening Excel whenever the query is executed and produced the .tsv output file.</li>
</ul>
<h2>Time for Analysis</h2>
In this last section I will cover a very quick tip for starting analyzing the Search Performance data. Excel 2016 will be my Analysis tool of preference as it offers powerful yet versatile data visualization.

When the output file is small (&lt;1 Million entries), processing the TSV upon opening in Excel 2016 is enough. When you have over a million entries, you would need to use the Power Query feature within Excel 2016 (previously add on in Excel 2013) which I will cover in a future post.
<ul>
 	<li>First convert your raw data into an Excel Table.</li>
 	<li>Select the A1 cell and press CTRL+T command</li>
</ul>
<a href="https://msdnshared.blob.core.windows.net/media/2016/12/DK91-2016-12-26_1542.png"><img src="https://msdnshared.blob.core.windows.net/media/2016/12/DK91-2016-12-26_1542.png" alt="dk91-2016-12-26_1542" class="alignnone size-full wp-image-395" width="230" height="151" /></a>
<ul>
 	<li>Once converted to a table, you can create charts, Pivot Table to highlight your Query performance.</li>
</ul>
I will share below, two simple tips to quickly visualize your data.
<h3>Tip #1 : Visualize the response time better with Conditional Formatting.</h3>
Conditional Formatting has been in Excel for a while but is a very good starting to get a sense of your performance data.
<ul>
 	<li>Select the entire <strong>ElapsedTime</strong> column, Click on Conditional Formatting, Choose Data Bars and select the esthetic and color of your choice.</li>
 	<li>Repeat the same process for <strong>IMSProxyTime</strong> and <strong>QPTime</strong> with different colors.</li>
</ul>
<a href="https://msdnshared.blob.core.windows.net/media/2016/12/DK91-2016-12-26_1640.png"><img src="https://msdnshared.blob.core.windows.net/media/2016/12/DK91-2016-12-26_1640.png" alt="dk91-2016-12-26_1640" class="alignnone wp-image-425" width="183" height="301" /></a>

The bars proportions between the 3 columns would give you a feeling of what layers of the Query flow is maybe struggling from time to time.

To make it concrete, Sort the Column <strong>ElapsedTime</strong> from Largest to Smallest

Now validate that when the WFE time is slow all other components are also slow. If not, it will give you a hint that your WFE connectivity with the others layers of the Query flow can degrade. In my example below, the slowest query 6921 ms as reported by the WFE isn't slow on the Query Component (1922 ms) but response time has been lost in between. By sorting you can also spot if a particular server is more impacted by another (i.e. server1 vs server2).

<a href="https://msdnshared.blob.core.windows.net/media/2016/12/DK91-2016-12-26_1645.png"><img src="https://msdnshared.blob.core.windows.net/media/2016/12/DK91-2016-12-26_1645.png" alt="dk91-2016-12-26_1645" class="alignnone wp-image-435" width="300" height="301" /></a>

Use Data Bars on <strong>WFEIMSLatency</strong> and <strong>IMSQPLatency</strong> to validate the same.
<h3>Tip #2 : Create an histogram of Query Component response time distribution (QPTime)</h3>
An Histogram on the <strong>QPTime</strong> will show up the buckets (i.e bins) of Performance and associated frequency. For instance how many queries are taking less than 1000ms, how many between 1000ms-2000ms etc.
<ul>
 	<li>Select the <strong>QPTime</strong> column</li>
 	<li>Click on the Insert ribbon</li>
 	<li>Click on Recommended Charts</li>
 	<li>Select the Histogram</li>
</ul>
<a href="https://msdnshared.blob.core.windows.net/media/2016/12/DK91-2016-12-26_1556.png"><img src="https://msdnshared.blob.core.windows.net/media/2016/12/DK91-2016-12-26_1556.png" alt="dk91-2016-12-26_1556" class="alignnone wp-image-405" width="590" height="347" /></a>
<ul>
 	<li>Press Enter, you will the Histogram</li>
 	<li>Now we will modify the x-axis to create more meaningful performance buckets.</li>
 	<li>On the histogram chart, right click on the X-Axis,</li>
 	<li>In The Axis Options, set Bin width to 1000 (1 second bucket).</li>
</ul>
<a href="https://msdnshared.blob.core.windows.net/media/2016/12/DK91-2016-12-26_1605.png"><img src="https://msdnshared.blob.core.windows.net/media/2016/12/DK91-2016-12-26_1605.png" alt="dk91-2016-12-26_1605" class="alignnone wp-image-445" width="235" height="271" /></a>
<ul>
 	<li>Now set a Chart Title, change the design to your esthetic, set the Data Labels</li>
</ul>
<a href="https://msdnshared.blob.core.windows.net/media/2016/12/DK91-2016-12-26_1609.png"><img src="https://msdnshared.blob.core.windows.net/media/2016/12/DK91-2016-12-26_1609.png" alt="dk91-2016-12-26_1609" class="alignnone wp-image-415" width="424" height="266" /></a>

<strong>Et voila !</strong>

There are plenty of others possibilities of Analysis within Excel 2016, I'd encourage to explore your data once in Excel.

Quite a long post but necessary to provide an end-to-end solution.

Stay in Search]]></content:encoded>
    </item>
    <item>
      <title>SharePoint - Working with ULS Logs</title>
      <link>https://docs.microsoft.com/archive/blogs/nicolasu/sharepoint-working-with-uls</link>
      <pubDate>Tue, 20 Dec 2016 13:50:49 GMT</pubDate>
      <dc:creator><![CDATA[NicolasU1 - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/nicolasu/?p=325</guid>
      <description><![CDATA[Hi Search Folks

&nbsp;

When dealing with SharePoint, the ULS is usually the main source of...]]></description>
      <content:encoded><![CDATA[Hi Search Folks

&nbsp;

When dealing with SharePoint, the ULS is usually the main source of information you have to rely on. It is almost unavoidable to not dig in the ULS when troubleshooting SP issues.

<strong>LogParser Studio (aka LPS)</strong> and <strong>LogParser </strong> are a must have to mine data out of the ULS.

Hereby I will share how to set up LogParser Studio to handle ULS data.

&nbsp;
<ul>
 	<li>Download LogParser Studio</li>
</ul>
<a href="https://gallery.technet.microsoft.com/office/Log-Parser-Studio-cd458765">https://gallery.technet.microsoft.com/office/Log-Parser-Studio-cd458765</a>
<ul>
 	<li>Open LogParser Studio.
<ul>
 	<li>The tool comes with a fair list of predefined queries.</li>
 	<li>I would encourage you to review them (IIS especially)</li>
 	<li>All queries are organized in libraries.</li>
</ul>
</li>
</ul>
<ul>
 	<li>Create a new query</li>
</ul>
Now that we have a new query we need to set it up to handle ULS input type.

ULS is a Tab-Separated file format so please specify the Input Log Type as <strong>TSVLOG</strong>

<a href="https://msdnshared.blob.core.windows.net/media/2016/12/LPS-2016-12-20_1138.png"><img src="https://msdnshared.blob.core.windows.net/media/2016/12/LPS-2016-12-20_1138-300x247.png" alt="lps-2016-12-20_1138" class="size-medium wp-image-345 aligncenter" width="300" height="247" /></a>
<ul>
 	<li>Once selected, click on the Setting icon (next the TSVLOG type text).</li>
</ul>
<a href="https://msdnshared.blob.core.windows.net/media/2016/12/LPS-2016-12-20_1139.png"><img src="https://msdnshared.blob.core.windows.net/media/2016/12/LPS-2016-12-20_1139-300x204.png" alt="lps-2016-12-20_1139" class="wp-image-335 aligncenter" width="272" height="185" /></a>
<ul>
 	<li>Create a .tsv file to store the ULS Header. Use the below content (tab separated)
<pre>Timestamp    Process    TID    Area    Category    EventID    Level    Message    Correlation</pre>
</li>
 	<li>Save your file on disk.</li>
 	<li>In the Settings iHeaderFile key put the path of the ULS Headers. In my case  D:\ULS-Headers.tsv.</li>
 	<li>iHeaderFile is the only option we would modify at that point. All other settings should be maintained as is.</li>
 	<li>Click OK</li>
</ul>
<ul>
 	<li><strong>You are almost there...</strong></li>
</ul>
<ul>
 	<li>Now it is time to indicate to LogParser Studio where your ULS log files are located.</li>
</ul>
<p style="padding-left: 30px">One very good thing of LogParser is its ability to query against multiple files as input. In that sense, it could allow you to merge multiple ULS files into one.</p>

<ul>
 	<li>Click on the Log File Manager</li>
</ul>
<a href="https://msdnshared.blob.core.windows.net/media/2016/12/LPS-2016-12-20_1407.png"><img src="https://msdnshared.blob.core.windows.net/media/2016/12/LPS-2016-12-20_1407.png" alt="lps-2016-12-20_1407" class="wp-image-355 aligncenter" width="717" height="402" /></a>
<ul>
 	<li>Add Files or folders containing your ULS logs. In my example I added two ULS log files. Click OK.</li>
 	<li>After you're all set to execute our first ULS query in LPS !</li>
 	<li>The default query shows "SELECT TOP 10 * FROM '[LOGFILEPATH]'". You can execute the query by hitting F5 or click on the red ! button.</li>
</ul>
<a href="https://msdnshared.blob.core.windows.net/media/2016/12/LPS-2016-12-20_1412.png"><img src="https://msdnshared.blob.core.windows.net/media/2016/12/LPS-2016-12-20_1412.png" alt="lps-2016-12-20_1412" class="size-full wp-image-365 aligncenter" width="316" height="338" /></a>
<ul>
 	<li>The Query results of your query in the upper panel as follows</li>
</ul>
<a href="https://msdnshared.blob.core.windows.net/media/2016/12/LPS-2016-12-20_1415.png"><img src="https://msdnshared.blob.core.windows.net/media/2016/12/LPS-2016-12-20_1415.png" alt="lps-2016-12-20_1415" class=" wp-image-306 aligncenter" width="818" height="265" /></a>
<ul>
 	<li>You would notice two extra columns : Filename and RowNumber. Those are LogParser specific, automatically generated upon processing. They will always appear when executing SELECT * queries. Filename can be used to maintain the origin of your ULS or differentiate ULS logs set.</li>
</ul>
<ul>
 	<li><strong>Save your query ! </strong></li>
</ul>
&nbsp;

<span style="text-decoration: underline">Example of queries</span>
<pre>SELECT TOP 10 * 
FROM '[LOGFILEPATH]'
WHERE Message like '%Exception%'</pre>
<pre>SELECT * 
FROM '[LOGFILEPATH]'
WHERE EventID = 'b4ly'</pre>
One last thing. You can output the query results into a .tsv file
<pre>SELECT *
INTO 'F:\Temp\mergedULS-test.tsv' 
FROM '[LOGFILEPATH]'
WHERE EventID = 'b4ly' and TID = '0x1764'</pre>
Time for you to have fun, create your own queries and master your ULS data.

Stay in Search !]]></content:encoded>
    </item>
    <item>
      <title>SP2013 - Boost your FileShare incremental crawls</title>
      <link>https://docs.microsoft.com/archive/blogs/nicolasu/sp2013-boost-your-fileshare-incremental-crawls</link>
      <pubDate>Thu, 15 Dec 2016 20:18:45 GMT</pubDate>
      <dc:creator><![CDATA[NicolasU1 - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/nicolasu/?p=282</guid>
      <description><![CDATA[Hi Search Enthusiasts

I wanted to touch base on a particular hidden feature our SP2013 crawl is...]]></description>
      <content:encoded><![CDATA[Hi Search Enthusiasts

I wanted to touch base on a particular hidden feature our SP2013 crawl is leveraging to improve File Shares incremental crawl performance.

Before going into details, as a pre-requisite, you will need to confirm that a parent folder modified date changes if one document within that folder is modified.

Some old file systems weren't doing so thus our crawl was forced to go through all folders contents every time. The consequence of that behavior is that we were crawling folders, impacting incremental crawls and send unnecessary operations to the Search index.

SP2013 July CU 2014 introduced a new registry key to allow the crawl to not index non modified folders during incremental crawl. As such the performance of an incremental crawl is much improved.
<pre>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office Server\15.0\Search\Global\Gathering Manager

<code>UseLastModifiedForFolders        dword:00000000</code></pre>
Restart your OSearch15 service for the change to be picked up on all crawl servers.

This new registry key indicates whether or not the incremental crawl can be based on the modified date time of the folder.
<ul>
 	<li>By default (0), non modified folders are crawled during inc. crawl regardless of their modified datetime (legacy file shares mostly).</li>
 	<li>Setting this to 1 would only crawl folders with a modified datetime superior to the last inc. crawl date. This provides stronger inc. crawl performance.</li>
</ul>
Happy Crawls.

Keep in Search]]></content:encoded>
    </item>
    <item>
      <title>SP2013 - Reasons to do a full crawl</title>
      <link>https://docs.microsoft.com/archive/blogs/nicolasu/sp2013-reasons-to-do-a-full-crawl</link>
      <pubDate>Thu, 15 Dec 2016 19:37:58 GMT</pubDate>
      <dc:creator><![CDATA[NicolasU1 - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/nicolasu/?p=305</guid>
      <description><![CDATA[Hi Search Enthusiasts

A quickie to clarify one piece of documentation around Full Crawl.

I...]]></description>
      <content:encoded><![CDATA[Hi Search Enthusiasts

A quickie to clarify one piece of documentation around Full Crawl.

I came across a customer today claiming that after any software update or service pack install they were planning a full crawl against all their content sources. This is obviously very cumbersome as you would imagine.

Their claim was made by reading our documentation about "Reasons to do a full crawl" <a href="https://technet.microsoft.com/nl-nl/library/4356bad9-de1d-4e81-b049-17248b4a86c1#Plan_full_crawl">https://technet.microsoft.com/nl-nl/library/4356bad9-de1d-4e81-b049-17248b4a86c1#Plan_full_crawl</a>

One of the listed reason states the following
<blockquote><em>A software update or service pack was installed on servers in the farm. See the instructions for the software update or service pack for more information.</em></blockquote>
The statement attempt to say that upon installation of an update or service pack, you are required to read careful the corresponding instructions to verify if a Full Crawl is required or not.

So in a nutshell, after update installation, Full Crawl aren't required unless stated otherwise. I hope this clarifies a bit the matter.

&nbsp;

Keep in Search]]></content:encoded>
    </item>
  </channel>
</rss>