Как использовать поиск сервера Sharepoint (класс KeywordQuery) для поиска по списку sharepoint?

У нас есть требование, согласно которому пользователям должно быть разрешено выполнять поиск в списке под названием «Отчеты» из внешнего интерфейса, а также должен поддерживаться расширенный поиск, такой как 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, поэтому мне помогут любые указатели.


person SNag    schedule 14.04.2014    source источник
comment
В вашей таблице результатов должно быть свойство Path, которое содержит URL-адрес элемента результата. Вы можете попробовать использовать его для фильтрации результатов. Что-то вроде «Путь: * Отчеты *» может помочь. Но, конечно, это в основном зависит от вашей конфигурации поиска.   -  person Yevgeniy.Chernobrivets    schedule 15.04.2014


Ответы (1)


Можно указать путь к списку или идентификатор списка в тексте запроса.

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