【问题标题】:How to use Sharepoint Server Search (KeywordQuery class) to search through a sharepoint list?如何使用 Sharepoint Server Search(KeywordQuery 类)来搜索 sharepoint 列表?
【发布时间】:2014-04-14 14:22:14
【问题描述】:

我们有一个要求,允许用户从前端搜索一个名为“报告”的列表,并支持高级搜索,例如author:"John Smith"filetype:docx

我们认为这可以使用Sharepoint Server Search API(使用Keyword Query Language)来实现。此外,由于可能并非所有用户都有权访问列表中的所有项目,因此我们决定采用具有提升权限的 Web 方法来查询列表的方法。

这是我目前的尝试......

public string GetSearchResults(string listname, string searchQuery)
{
    SPUser superUser = SPContext.Current.Web.AllUsers[@"SHAREPOINT\SYSTEM"];
    using (SPSite site = new SPSite(SPContext.Current.Web.Url, superUser.UserToken))
    {
        KeywordQuery keywordQuery = new KeywordQuery(site);
        keywordQuery.QueryText = searchQuery;

        //where should listname be specified?

        SearchExecutor searchExecutor = new SearchExecutor(); 
        ResultTableCollection resultTableCollection = searchExecutor.ExecuteQuery(keywordQuery); 
        var resultTables = resultTableCollection.Filter("TableType", KnownTableTypes.RelevantResults); 
        ResultTable resultTable = resultTables.FirstOrDefault(); 
        DataTable dataTable = resultTable.Table; 
    }

    //how to parse result to filter only items in given list?
}

...但我不明白的是如何将搜索限制为仅给定列表或如何解析搜索结果以检索与搜索查询匹配的列表项。

我是 Sharepoint 搜索的新手,所以任何指针都会有所帮助。

【问题讨论】:

  • 结果表中应该有“路径”属性,其中包含结果项的 url。您可以尝试使用它来过滤结果。 'Path:"*Reports*"' 之类的东西可能会奏效。不过当然主要看你的搜索配置。

标签: sharepoint sharepoint-2013


【解决方案1】:

这可以在查询文本中给出列表路径或列表 guid

keywordQuery.QueryText = "Path:/Sales/Lists/Prospects/ (contentclass:STS_ListItem OR IsDocument:True) -ContentClass=urn:content-class:SPSPeople ";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    相关资源
    最近更新 更多