我们要求允许用户从前端搜索名为“报告”的列表,并支持高级搜索,例如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搜索的新手,所以任何指针都会有所帮助。
答案 0 :(得分:2)
这可以在查询文本中提供列表路径或列表guid
keywordQuery.QueryText = "Path:/Sales/Lists/Prospects/ (contentclass:STS_ListItem OR IsDocument:True) -ContentClass=urn:content-class:SPSPeople ";