Forum Discussion
Nov 21, 2017
SharePoint Search
Today my customer reported an issue with search in SharePoint Online. They have a search box web part, a search result web part and a refinement panel:
RefinableString00 is mapped to a Client C...
- Nov 21, 2017
Just to complete this issue. I've created a PowerShell script that touches all the list items in my site collections, so that search will pick up these items. Problem resolved for me! Not sure how this customer got into this situation though.
The script can be found below:
$cred = Get-Credential -Message "Password" -UserName admin@mytenant.onmicrosoft.com Connect-PnPOnline -Url https://mytenant-admin.sharepoint.com -Credentials $cred $sites = Get-PnPTenantSite | where { $_.Url -like "https://mytenant.sharepoint.com/teams*"} foreach ( $site in $sites) { Connect-PnPOnline -Url $site.Url -Credentials $cred $web = Get-PnPWeb $list = Get-PnPList -Web $web | Where { $_.Title -eq "MyList" } $listItem = Get-PnPListItem -List $list $listItem.Update(); $web.Context.Load($listItem); $web.Context.ExecuteQuery(); $listItem }
Deleted
Nov 21, 2017It looks like something is not going ok with the search but what good question have you tried to search on the crawled property?
Nov 21, 2017
Hi Deleted,
I might have found the problem.
I just forced a recrawl of one of the lists ( list settings -> advanced settings -> reindex list ) and now data from that list is appearing.
So I'm guessing that the following has happened in this order:
1. The many lists containing the data were created.
2. The data was added.
3. The Managed Property RefinableString00 was mapped.
4. The only list that was showing data was created
5. The continuous crawl picked up the data form the new list.
I will now have a look at forcing the reindexing on the other lists as well.
I still don't understand however why specifically searching on RefinableString00 does work and General searching does not work
- Nov 21, 2017
Just to complete this issue. I've created a PowerShell script that touches all the list items in my site collections, so that search will pick up these items. Problem resolved for me! Not sure how this customer got into this situation though.
The script can be found below:
$cred = Get-Credential -Message "Password" -UserName admin@mytenant.onmicrosoft.com Connect-PnPOnline -Url https://mytenant-admin.sharepoint.com -Credentials $cred $sites = Get-PnPTenantSite | where { $_.Url -like "https://mytenant.sharepoint.com/teams*"} foreach ( $site in $sites) { Connect-PnPOnline -Url $site.Url -Credentials $cred $web = Get-PnPWeb $list = Get-PnPList -Web $web | Where { $_.Title -eq "MyList" } $listItem = Get-PnPListItem -List $list $listItem.Update(); $web.Context.Load($listItem); $web.Context.ExecuteQuery(); $listItem }
- DeletedNov 21, 2017
Why do you not use the script from Mikael Svenson. to reindex tenant to be sure.
param([Parameter(Mandatory=$true,ValueFromPipeline=$true)]$url, [Parameter(ValueFromPipeline=$true)][string]$username, [Parameter(ValueFromPipeline=$true)][string]$password, [ValidateSet('skip','on','off')][System.String]$enableAllManagedProperties="skip" ) # Re-index SPO tenant script, and enable ManagedProperties managed property # Author: Mikael Svenson - @mikaelsvenson # Blog: http://techmikael.blogspot.com # Modified by Eric Skaggs on 10/21/2014 - had trouble running this script as it was; functionality has not been changed function Reset-Webs( $siteUrl ) { $clientContext = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl) $clientContext.Credentials = $credentials if (!$clientContext.ServerObjectIsNull.Value) { Write-Host "Connected to SharePoint Online site: '$siteUrl'" -ForegroundColor Green } $rootWeb = $clientContext.Web processWeb($rootWeb) } function processWeb($web) { $subWebs = $web.Webs $clientContext.Load($web) $clientContext.Load($web.AllProperties) $clientContext.Load($subWebs) $clientContext.ExecuteQuery() Write-Host "Web URL:" $web.Url -ForegroundColor White if( $enableAllManagedProperties -ne "skip" ) { Set-AllManagedProperties -web $web -clientContext $clientContext -enableAllManagedProps $enableAllManagedProperties } [int]$version = 0 $allProperties = $web.AllProperties if( $allProperties.FieldValues.ContainsKey("vti_searchversion") -eq $true ) { $version = $allProperties["vti_searchversion"] } $version++ $allProperties["vti_searchversion"] = $version Write-Host "-- Updated search version: " $version -ForegroundColor Green $web.Update() $clientContext.ExecuteQuery() # No need to process subwebs if we only mark site collection for indexing if($enableAllManagedProperties -ne "skip") { foreach ($subWeb in $subWebs) { processWeb($subWeb) } } } function Set-AllManagedProperties( $web, $clientContext, $enableAllManagedProps ) { $lists = $web.Lists $clientContext.Load($lists) $clientContext.ExecuteQuery() foreach ($list in $lists) { Write-Host "--" $list.Title if( $list.NoCrawl ) { Write-Host "-- Skipping list due to not being crawled" -ForegroundColor Yellow continue } $skip = $false; $eventReceivers = $list.EventReceivers $clientContext.Load($eventReceivers) $clientContext.ExecuteQuery() foreach( $eventReceiver in $eventReceivers ) { if( $eventReceiver.ReceiverClass -eq "Microsoft.SharePoint.Publishing.CatalogEventReceiver" ) { $skip = $true Write-Host "-- Skipping list as it's published as a catalog" -ForegroundColor Yellow break } } if( $skip ) {continue} $folder = $list.RootFolder $props = $folder.Properties $clientContext.Load($folder) $clientContext.Load($props) $clientContext.ExecuteQuery() if( $enableAllManagedProps -eq "on" ) { Write-Host "-- Enabling all managed properties" -ForegroundColor Green $props["vti_indexedpropertykeys"] = "UAB1AGIAbABpAHMAaABpAG4AZwBDAGEAdABhAGwAbwBnAFMAZQB0AHQAaQBuAGcAcwA=|SQBzAFAAdQBiAGwAaQBzAGgAaQBuAGcAQwBhAHQAYQBsAG8AZwA=|" $props["IsPublishingCatalog"] = "True" } if( $enableAllManagedProps -eq "off" ) { Write-Host "-- Disabling all managed properties" -ForegroundColor Green $props["vti_indexedpropertykeys"] = $null $props["IsPublishingCatalog"] = $null } $folder.Update() $clientContext.ExecuteQuery() } } Import-Module Microsoft.Online.SharePoint.PowerShell # change to the path of your CSOM dlls and add their types $csomPath = "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI" Add-Type -Path "$csomPath\Microsoft.SharePoint.Client.dll" Add-Type -Path "$csomPath\Microsoft.SharePoint.Client.Runtime.dll" if([String]::IsNullOrWhiteSpace($username)) { $username = Read-host "What's your username?" } if([String]::IsNullOrWhiteSpace($password)) { $securePassword = Read-host "What's your password?" -AsSecureString } else { $securePassword = ConvertTo-SecureString $password -AsPlainText -Force } $credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $securePassword) $spoCredentials = New-Object System.Management.Automation.PSCredential($username, $securePassword) Connect-SPOService -Url $url -Credential $spoCredentials Get-SPOSite | foreach {Reset-Webs -siteUrl $_.Url }
- Mikael SvensonNov 21, 2017Steel Contributor
Remember to add -Limit ALL to the Get-SPOSite, as I committed yesterday to my repo https://github.com/wobba/SPO-Trigger-Reindex/blob/master/reindex-tenant.ps1 :)