Home > Search, SharePoint, SharePoint2013Preview > How to create managed properties at site collection level in SharePoint2013

How to create managed properties at site collection level in SharePoint2013

In SharePoint2013, you can create managed properties at site collection. Today, I’d like to show you how to do so through PowerShell.

1. Define your managed properties and crawled properties and managed property Type in an external csv file. PowerShell script will read this file and create the managed and the mapping.

2. As you can see I also defined variant Type, this is because you need the variant type to create the crawled property. In order to have the crawled properties, you need to do a full crawl and also make sure you have data populated for your custom column. However, if you do not want to a full crawl to create those crawled properties, you can create them yourself by using the PowerShell; however you need to make sure the crawled properties you created have the same name if created by a full crawl.

Managed properties type:
Text = 1
Integer = 2
Decimal = 3
DateTime = 4
YesNo = 5
Binary = 6

Variant Type:
Text = 31
Integer = 20
Decimal = 5
DateTime = 64
YesNo = 11

3. You can use the following script to create your managed properties at site collection level, the differences for creating managed property at site collection level is to pass in the site collection id.

param(
	[string] $siteUrl="http://SP2013/",
	[string] $searchAppName = "Search Service Application",
    $ManagedPropertiesList=(IMPORT-CSV ".\ManagedProperties.csv")
)
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
$searchapp = $null

function AppendLog
{
	param ([string] $msg,
			[string] $msgColor)

	$currentDateTime = Get-Date
	$msg = $msg + " --- " + $currentDateTime

	if (!($logOnly -eq $True))
	{
		# write to console
		Write-Host -f $msgColor $msg
	}

	# write to log file
	Add-Content $logFilePath $msg
}

$scriptPath = Split-Path $myInvocation.MyCommand.Path
$logFilePath = $scriptPath + "\CreateManagedProperties_Log.txt"

function CreateRefiner
{param ([string] $crawledName, [string] $managedPropertyName, [Int32] $variantType, [Int32] $managedPropertyType,[System.GUID] $siteID)

	$cat = Get-SPEnterpriseSearchMetadataCategory –Identity SharePoint -SearchApplication $searchapp

	$crawledproperty = Get-SPEnterpriseSearchMetadataCrawledProperty -Name $crawledName -SearchApplication $searchapp -SiteCollection $siteID

	if($crawledproperty -eq $null)
	{
		Write-Host
		AppendLog "Creating Crawled Property for $managedPropertyName" Yellow
		$crawledproperty = New-SPEnterpriseSearchMetadataCrawledProperty -SearchApplication $searchapp -VariantType $variantType -SiteCollection $siteID -Category $cat -PropSet "00130329-0000-0130-c000-000000131346" -Name $crawledName -IsNameEnum $false
	}

	$managedproperty = Get-SPEnterpriseSearchMetadataManagedProperty -Identity $managedPropertyName -SearchApplication $searchapp -SiteCollection $siteID  -ErrorAction SilentlyContinue

	if($managedproperty -eq $null)
	{
		Write-Host
		AppendLog "Creating Managed Property for $managedPropertyName" Yellow
		$managedproperty = New-SPEnterpriseSearchMetadataManagedProperty -Name $managedPropertyName -Type $managedPropertyType -SiteCollection $siteID -SearchApplication $searchapp -Queryable:$true -Retrievable:$true -FullTextQueriable:$true -RemoveDuplicates:$false -RespectPriority:$true -IncludeInMd5:$true
	}

	$mappedProperty = $crawledproperty.GetMappedManagedProperties() | ?{$_.Name -eq $managedProperty.Name }

	if($mappedProperty -eq $null)
	{
		Write-Host
		AppendLog "Creating Crawled -> Managed Property mapping for $managedPropertyName" Yellow
		New-SPEnterpriseSearchMetadataMapping -CrawledProperty $crawledproperty -ManagedProperty $managedproperty -SearchApplication $searchapp -SiteCollection $siteID
	}

	$mappedProperty = $crawledproperty.GetMappedManagedProperties() | ?{$_.Name -eq $managedProperty.Name }  #Get-FASTSearchMetadataCrawledPropertyMapping -ManagedProperty $managedproperty
}

$searchapp = Get-SPEnterpriseSearchServiceApplication $searchAppName
$site= Get-SPSite $siteUrl
$siteId=$site.id

Write-Host "Start creating Managed properties"
$i = 1
FOREACH ($property in $ManagedPropertiesList) {
    $propertyName=$property.managedPropertyName
    $crawledName=$property.crawledName
    $managedPropertyType=$property.managedPropertyType
    $variantType=$property.variantType
    Write-Host $managedPropertyType
    Write-Host "Processing managed property $propertyName  $($i)..."
	$i++
    CreateRefiner $crawledName $propertyName $variantType $managedPropertyType $siteId
	Write-Host "Managed property created " $propertyName
}

Key Concepts

Crawled Properties: Crawled properties are discovered by the search index service component when crawling content.

Managed Properties: Properties that are part of the Search user experience, which means they are available for search results, advanced search, and so on, are managed properties.

Mapping Crawled Properties to Managed Properties: To make a crawled property available for the Search experience—to make it available for Search queries and display it in Advanced Search and search results—you must map it to a managed property.

References

Administer search in SharePoint 2013 Preview

Managing Metadata

New-SPEnterpriseSearchMetadataCrawledProperty

New-SPEnterpriseSearchMetadataManagedProperty

Remove-SPEnterpriseSearchMetadataManagedProperty

Overview of crawled and managed properties in SharePoint 2013 Preview

Remove-SPEnterpriseSearchMetadataManagedProperty

SharePoint 2013 – Search Service Application

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: