Question

I'm programatically trying to use the Search Apis to find some documents.

In order to customize the process, I'm selecting some basic properties :

var query = new KeywordQuery(site)
{
    QueryText = queryText,
    ResultTypes = ResultType.RelevantResults
};

query.SelectProperties.Add("Title");
query.SelectProperties.Add("Language");

...

var result = query.Execute();

This is working fine.

Now I want to select the internal values of a taxonomy field. Let's say I have a field named AccessLevel, bound to a term set containing some values.

After a crawl, SharePoint has detected two crawled properties : AccessLevel (property containing the label) and ows_taxId_AccessLevel (property containing the lookup value of the taxonomy field, #label|termguid). A mapped property has also been created owstaxIdAccessLevel automatically.

I set up the crawled properties to be included in the index, I even start the full crawl, but if I add this code :

query.SelectProperties.Add("owstaxIdAccessLevel");

I got the following exception :

Microsoft.Office.Server.Search.Query.InvalidPropertyException was unhandled by user code
  Message=Property doesn't exist or is used in a manner inconsistent with schema settings.
  Source=Microsoft.Office.Server.Search
  Property=The creator of this fault did not specify a Reason.
  StackTrace:
       at Microsoft.Office.Server.Search.Administration.SearchServiceApplicationProxy.ThrowBackwardCompatibleException(FaultException`1 ex)
       at Microsoft.Office.Server.Search.Administration.SearchServiceApplicationProxy.DoSpLoadBalancedUriWsOp[T](WebServiceBackedOperation`1 webServiceCall, Int32 timeoutInMilliseconds, Int32 wcfTimeoutInMilliseconds, String operationName)
       at Microsoft.Office.Server.Search.Administration.SearchServiceApplicationProxy.DoWebServiceBackedOperation[T](String operationName, Int32 timeoutInMilliseconds, Int32 wcfTimeoutInMilliseconds, WebServiceBackedOperation`1 webServiceCall)
       at Microsoft.Office.Server.Search.Administration.SearchServiceApplicationProxy.Execute(QueryProperties properties)
       at Microsoft.Office.Server.Search.Query.Query.Execute()
       atMyProject.MyModuleConnectorSearchWrapper.SearchDocuments(SPSite site, String queryText, IEnumerable`1 retrieveProperties, Boolean includeDefaultProperties, Int32 startRow, Int32 rowsPerPage, Int32& estimatedRowCount)
       atMyProject.WebService.MyModuleConnector.<>c__DisplayClass3.<Search>b__1()
       at Microsoft.SharePoint.SPSecurity.<>c__DisplayClass4.<RunWithElevatedPrivileges>b__2()
       at Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess(CodeToRunElevated secureCode)
  InnerException: System.ServiceModel.FaultException<Microsoft.Office.Server.Search.Administration.SearchServiceApplicationFault>
       Message=The creator of this fault did not specify a Reason.
       Source=mscorlib
       Action=http://tempuri.org/ISearchQueryServiceApplication/ExecuteSearchServiceApplicationFaultFault
       StackTrace:
         Server stack trace: 
            at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
            at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
            at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
            at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
         Exception rethrown at [0]: 
            at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
            at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
            at Microsoft.Office.Server.Search.Query.ISearchQueryServiceApplication.Execute(QueryProperties properties)
            at Microsoft.Office.Server.Search.Administration.SearchServiceApplicationProxy.<>c__DisplayClass4.<Execute>b__3(ISearchServiceApplication serviceApplication)
            at Microsoft.Office.Server.Search.Administration.SearchServiceApplicationProxy.DoSpLoadBalancedUriWsOp[T](WebServiceBackedOperation`1 webServiceCall, Int32 timeoutInMilliseconds, Int32 wcfTimeoutInMilliseconds, String operationName)
       InnerException: 

Is there any restriction on querying Taxonomy fields? What can I do to make my search works?

Was it helpful?

Solution

An interesting discovery... if I run this small PS script:

$prop = Get-SPEnterpriseSearchMetadataManagedProperty -SearchApplication $ssa -Identity owstaxIdAccessLevel
$prop.Retrievable

It's returning:

False

Then I can update this property:

$prop.Retrievable = $true
$prop.Update()

After a full crawl, I'm now able to query my taxonomy field.

However, I'm don't measure now the potential side effects of this change

Licensed under: CC-BY-SA with attribution
Not affiliated with sharepoint.stackexchange
scroll top