我想使用SharePoint Server搜索并返回特定客户端ID的文档。
代码现在通过通配符搜索返回所有内容:
using (ClientContext clientContext = new ClientContext(hostWeb))
{
clientContext.Credentials = new System.Net.NetworkCredential(hostWebAdmin, hostWebPassword, hostWebDomain);
KeywordQuery keywordQuery = new KeywordQuery(clientContext);
var scope = "All Sites";
keywordQuery.QueryText = String.Format("{0} AND Path:\"{1}\" AND Scope:\"{2}\" AND IsDocument:1", searchValue, hostWeb+"PropertyDocuments", scope);
SearchExecutor searchExecutor = new SearchExecutor(clientContext);
ClientResult<ResultTableCollection> results = searchExecutor.ExecuteQuery(keywordQuery);
clientContext.ExecuteQuery();
//foreach (SearchResults s in searchResults)
foreach (var resultRow in results.Value[0].ResultRows)
{
查看resultRow的结果 - 我找不到客户端ID或客户端名称的密钥。 有关如何按客户端ID过滤的任何建议? 感谢。
答案 0 :(得分:0)
要获取其他字段供您在结果中进行过滤,您需要采取一些步骤。首先,确保您拥有一个托管属性,该托管属性映射到具有您的ID并且标记为“可检索”和“可查询”的已爬网属性。如果您不知道如何操作,请点击此链接Manage the Search Schema。更新或添加新的托管属性后,您必须运行完全爬网。您可以直接在查询中使用托管属性,但要在结果中实际返回它,您需要将其添加为要返回的附加字段。例如,假设您的托管属性名为 ClientID 。
int clientId = 5;
keywordQuery.QueryText = String.Format("{0} AND Path:\"{1}\" AND Scope:\"{2}\" AND ClientID:\"{3}\" AND IsDocument:1", searchValue, hostWeb+"PropertyDocuments", scope, clientId);
keywordQuery.SelectProperties.Add("ClientID");
您可以通过这种方式添加多个字段,以便在结果中返回以进行其他过滤或显示。