У нас есть требование, согласно которому пользователям должно быть разрешено выполнять поиск в списке под названием «Отчеты» из внешнего интерфейса, а также должен поддерживаться расширенный поиск, такой как author:"John Smith"
или filetype:docx
.
Мы решили, что этого можно добиться с помощью API поиска сервера Sharepoint (с использованием языка запросов по ключевым словам а>). Кроме того, поскольку возможно, что все пользователи не имеют доступа ко всем элементам в списке, мы решили воспользоваться подходом к использованию веб-метода с повышенными привилегиями для запроса списка.
Это моя попытка пока ...
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, поэтому мне помогут любые указатели.