Set SPEnterpriseSearchMetadataCrawledProperty

This topic contains 0 replies, has 1 voice, and was last updated by  Forums Archives 5 years, 7 months ago.

  • Author
    Posts
  • #6407

    by utwolfpack at 2012-12-27 15:17:05

    Does anyone know how to Set a SPEnterpriseSearchMetadataCrawledProperty to be included in index using powershell? I have approx 1000 to set on a project that I am building so as you can imagine I would really not like to set them using the Metadata Properties UI.

    I was thinking something along the lines of:

    Set-SPEnterpriseSearchMetadataCrawledProperty -SearchApplication "Search Service Application" -Identity $NameofCrawledProperty –Retrievable $true

    Any help would be appreciated, thanks in advance.

    – Sean O.

    by AlexBrassington at 2013-02-11 05:19:34

    The first step is to create a crawled property, from there if you want to use it that needs to be mapped to a mapped property.

    I had something similar recently and produced this:
    Function Create-AndMapProperty()
    {
    param([string] $propName, [string] $managedPropName)

    Write-Host "Processing $propName"

    #Get the crawled property if it already exists.
    $crawledproperty = $searchapp | Get-SPEnterpriseSearchMetadataCrawledProperty -Name $propName

    #If it doesn't, create it
    if ($crawledproperty -eq $null)
    {
    Write-Host -ForegroundColor Yellow "Not found: $propName"
    New-SPEnterpriseSearchMetadataCrawledProperty -SearchApplication $searchapp -Category $category -VariantType 31 -PropSet "00130329-0000-0130-c000-000000131346" -Name $propName -IsNameEnum $false | Out-Null
    $crawledproperty = $searchapp | Get-SPEnterpriseSearchMetadataCrawledProperty -Name $propName
    Write-Host -ForegroundColor Blue "$propName Created"
    }
    else
    {
    Write-Host -ForegroundColor Blue "$propName Found"
    }

    #Get the managed property if it already exists
    $managedproperty = $searchapp | Get-SPEnterpriseSearchMetadataManagedProperty $managedPropName -ea SilentlyContinue

    #If it doesn't, create it
    if ($managedproperty -eq $null)
    {
    Write-Host -ForegroundColor Blue "Not found: $managedPropName"
    New-SPEnterpriseSearchMetadataManagedProperty -SearchApplication $searchapp -Name $managedPropName -Type 1 | Out-Null
    $managedproperty = $searchapp | Get-SPEnterpriseSearchMetadataManagedProperty $managedPropName
    Write-Host -ForegroundColor Blue "$managedPropName Created"
    }
    else
    {
    #Not a major issue. Some properties may already have mappings.
    Write-Host -ForegroundColor Yellow "$managedPropName Found"
    }
    Write-Host "Creating mapping"
    New-SPEnterpriseSearchMetadataMapping -SearchApplication $searchapp -ManagedProperty $managedproperty -CrawledProperty $crawledproperty -ea SilentlyContinue

    }

    #Setup pre-requisites. No point in including in loop or function.
    $searchapp = Get-SPEnterpriseSearchServiceApplication
    $category = Get-SPEnterpriseSearchMetadataCategory –Identity SharePoint -SearchApplication $searchapp

    #Loop through all of the fields and process.
    #Note: I've removed the declaration but it's a simple list.
    foreach ($property in $siteColumns)
    {
    Write-Host $property

    $propName = "ows_" + $property.Replace(' ','')
    $managedPropName = $property.Replace(' ','')

    Create-AndMapProperty $propName $managedPropName
    }

    You might not want the entirety of it but it's easier to trim a script down. The lines relating to existing mappings are 'appendix' code, i was building it to abort if there already was a mapping but I don't think i ever progressed it that far/made use of it.

    Edited for additional explanation and better formatting.

You must be logged in to reply to this topic.