我正在使用KeywordQuery在SharePoint 2010中的自定义Web部件中执行人员搜索。我正在搜索特定的用户配置文件属性。这些属性映射到Search Service应用程序中的托管属性。我想在搜索结果中输出这些属性。这适用于不使用托管元数据的标准属性和自定义用户属性。
问题:但问题是:使用托管元数据术语集的用户配置文件属性不会显示在搜索结果中。我不确定问题是否与MM有关,但似乎很可能,因为其他自定义属性出现了。踢球者认为搜索本身似乎运作正常。当我搜索使用MM的用户配置文件属性时,我会得到被驱逐的人。
相关代码:在下面的代码中,我使用SelectProperties为我想要显示的属性添加列。自定义属性Regular_Property和MM_Property都是托管属性。但是,在这两个中,只有Regular_Property出现在GridView中。在MM_Property上搜索,例如keywordQueryText = MM_Property:“Some Value”,似乎工作正常。
private void ExecuteKeywordQuery(string keywordQueryText)
{
SearchServiceApplicationProxy SSAProxy = (SearchServiceApplicationProxy)SearchServiceApplicationProxy.
GetProxy(SPServiceContext.GetContext(SPContext.Current.Site));
KeywordQuery keywordQuery = new KeywordQuery(SSAProxy);
keywordQuery.ResultsProvider = SearchProvider.Default;
keywordQuery.QueryText = keywordQueryText;
keywordQuery.ResultTypes |= ResultType.RelevantResults;
//keywordQuery.ResultTypes = ResultType.RelevantResults;
keywordQuery.HiddenConstraints = "scope:\"People\"";
//keywordQuery.KeywordInclusion = KeywordInclusion.AnyKeyword;
keywordQuery.SelectProperties.Add("Title");
keywordQuery.SelectProperties.Add("Path");
keywordQuery.SelectProperties.Add("MobilePhone");
keywordQuery.SelectProperties.Add("Regular_Property");
keywordQuery.SelectProperties.Add("MM_Property");
ResultTableCollection searchResults = keywordQuery.Execute();
if (searchResults.Exists(ResultType.RelevantResults))
{
ResultTable searchResult = searchResults[ResultType.RelevantResults];
DataTable result = new DataTable();
result.TableName = "SearchResults";
result.Load(searchResult, LoadOption.OverwriteChanges);
PopulateResultsGrid(result);
}
private void PopulateResultsGrid(DataTable resultsTable)
{
gridSearchResults = new GridView();
gridSearchResults.DataSource = resultsTable;
gridSearchResults.DataBind();
Controls.Add(gridSearchResults);
}
有人知道如何使这项工作?我尝试过多次尝试重置索引,完全爬网,增量爬网,用户配置文件同步等。它似乎仍无法正常工作。
答案 0 :(得分:0)
我最终弄明白了,答案非常简单。由于MM_Property是多值的,因此存储在列中的值的数据类型(由result.Columns [“MM_Property”] .DataType返回)是字符串数组,而不是字符串。