在 SharePoint 用户配置文件中搜索自定义 属性

Search custom property in SharePoint User Profile

我在用户配置文件中创建了自定义 属性。 我想搜索所有用户配置文件并输出自定义 属性 包含特定字符串

的配置文件

例如:

User1- 自定义 属性 值为 1,2,3 User2- 2,4,5 中的自定义 属性 值 User3- 自定义 属性 值为 4,6,8

我要输出自定义 属性 包含 2 个的所有配置文件 (使用 C# 代码)

所以输出应该有User1和User2

有人可以建议实现这个的最佳方法吗? 我确实在互联网上找到了一些使用关键字搜索来搜索用户配置文件的链接,但不确定这些方法是否可用于搜索自定义属性。 示例:https://www.collaboris.com/how-to-use-search-keywordquery-to-query-user-profiles-in-sharepoint/

我正在使用 SharePoint 2013

我们最终将添加到用户配置文件的自定义 属性 提升到托管 属性。 此外,我们似乎可以对托管属性进行通配符搜索,因此我们可以像 "CustomProperty:*,2,*" 这样进行人员搜索,这样它将 return 所有在自定义 属性 中具有数字 2 的用户配置文件他们的用户资料

有趣的是,通配符仅适用于 FirstName 等 OOTB 属性的末尾,因此我们无法执行 FirstName:oh 之类的操作并期望它会 return John Doe 的个人资料 但我们当然可以做到这一点 - FirstName:joh* 这样 return 所有名字以 Joh 开头的人(包括 John Doe)

但似乎通配符在自定义托管属性的开头和结尾都有效(这对我们帮助很大)

关于如何 return 使用 c# 搜索结果我们使用了这个-

    private DataTable GetPeople(SPSite spSite, string queryText)
    {

        var keywordQuery = new KeywordQuery(spSite)
         {
             QueryText = queryText,
             KeywordInclusion = KeywordInclusion.AllKeywords,
             SourceId = System.Guid.Parse("b09a7990-05ea-4af9-81ef-edfab16c4e31")
         };

        keywordQuery.RowLimit = this.MaxProfilesToDisplay;

        keywordQuery.SelectProperties.Add("AccountName");
        keywordQuery.SelectProperties.Add("PictureURL");

        SearchExecutor e = new SearchExecutor();
        ResultTableCollection rt = e.ExecuteQuery(keywordQuery);
        var tab = rt.Filter("TableType", KnownTableTypes.RelevantResults);
        var result = tab.FirstOrDefault();
        DataTable DT = result.Table;
        return DT;
    }

我们会像

那样调用它
DataTable dt = GetPeople(SPContext.Current.Site, "CustomProperty:*,2,*" );