Поиск в SharePoint Online. Использование Office Graph

Описание реализации примера использования Office Graph для поиска информации на сайте SharePoint Online с учетом действий пользователей, который я показывал в своем докладе о Microsoft Graph на DevCon 2016.

Graph Query Language (GQL)

Office Graph собирает информацию о действиях пользователей (просмотр профиля, создание/редактирование/чтение документов, отправка и получение сообщений, комментарии, лайки, ответы и отслеживания) и строит связи между объектами в облаке. Эта информация хранится в поисковом индексе, продолжительность хранения определяется типом совершенного пользователем действия. Таким образом мы получаем граф, построенный на данным, хранящихся в Office 365. Визуально это выглядит примерно следующим образом (вершина - голубого цвета - пользователь, зеленого - документ):

Office Graph

Office Graph

Поскольку информация хранится в поисковом индексе, то и получить её можно с помощью API поиска SharePoint. Для доступа к данным графа существует специально созданный для это Graph Query Language (GQL). Синтаксис его следующий:

ACTOR({ActorId} [, filter])

Где ActorId - идентификатор пользователя. Он полностью соответствует свойству DocId.

В строке запроса к API поиска для поиска документов, измененных пользователем (action:1003) GQL выглядит вот так:

_api/search/?Querytext='*'&Properties='GraphQuery:ACTOR({ActorId}\, action\:1003)'

Для примера использования Office Graph в SharePoint Online я создам страницу результатов для поиска среди документов, которые текущий пользователь просматривал или редактировал.

Создание страницы поиска

В центре поиска создаем новую страницу:

Вводим название страницы, например "viewedormodified":

Чтобы эта страница появилась под строкой ввода поискового запроса необходимо добавить ссылку на неё в параметрах поиска (Параметры сайта - Параметры поиска):

Добавляем ссылку на созданную страницу:

Страница есть, переходим к настройкам отображения результатов поиска.

Настройка веб-части результатов поиска

Для начала на созданной странице экспортируем существующую веб-часть результатов поиска и получаем XML-файл в формате .webpart:

Экспорт веб-части результатов поиска

Экспорт веб-части результатов поиска

Исходную веб-часть результатов поиска можно удалить - она нам больше не понадобится.

Открываем .webpart в любом текстовом редакторе. Нас интересует единственное свойство - DataProviderJSON:

<webParts>
    <webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
    <!--metaData -->
    <data>
      <properties>
        <!-- properties -->
        <property name="DataProviderJSON" type="string">{JSON}</property>
        <!-- properties -->
      </properties>
    </data>
  </webPart>
</webParts>

Свойство DataProviderJSON содержит параметры в формате JSON. Использование Office Graph задается именно в нем. Для этого добавляем свойство GraphQuery в раздел Properties и ровно такое же в раздел PropertiesJson. Результат должен быть примерно следующим:

{
  "Properties": {
    "GraphQuery": "ACTOR(ME, OR(action:1001, action:1003))",
    "ListId": "b4592971-f45e-41ac-8330-ca34b61834a4",
    "ListItemId": 10,
    "TermId": "79334302-07c2-4c37-9bfb-7b64bdd64877",
    "TermSetId": "f4e59d91-7c8a-4d1c-b346-fd6caef3a64a",
    "TermStoreId": "fd4146d3-7c5a-4c73-9e85-657646eab417"
  },
  "PropertiesJson": "{\"GraphQuery\":\"ACTOR(ME, OR(action:1001, action:1003))\",\"ListId\":\"b4592971-f45e-41ac-8330-ca34b61834a4\",\"ListItemId\":10,\"TermId\":\"79334302-07c2-4c37-9bfb-7b64bdd64877\",\"TermSetId\":\"f4e59d91-7c8a-4d1c-b346-fd6caef3a64a\",\"TermStoreId\":\"fd4146d3-7c5a-4c73-9e85-657646eab417\"}",
  "ClientType": "AllResultsQuery",
  "UpdateAjaxNavigate": true,
  "SummaryLength": 180,
  "DesiredSnippetLength": 90,
  "PersonalizedQuery": false,
  "FallbackRefinementFilters": null,
  "IgnoreStaleServerQuery": true,
  "RenderTemplateId": "DefaultDataProvider",
  "AlternateErrorMessage": null,
  "Title": "",
  "ClientFunction": "",
  "ClientFunctionDetails": ""
}

Сохраняем изменения и добавляем на страницу веб-часть, используя импорт:

Результаты поиска SharePoint Online

Результаты поиска SharePoint Online

Готово

Теперь пользователи смогут искать на портале документы, связанные с ними. Аналогично можно реализовать поиск среди коллег, с которыми они работают.

Результаты поиска SharePoint Online

Результаты поиска SharePoint Online

Смотрите также

Query the Office Graph using GQL and SharePoint Online Search REST APIs

Презентация с доклада о Microsoft API и Office Graph

Виталий Жуков

Виталий Жуков

SharePoint архитектор, разработчик, тренер, Microsoft MVP (Office Development). Более 15 лет опыта работы с SharePoint, Dynamics CRM, Office 365, и другими продуктами и сервисами Microsoft.

Смотрите также

Поиск на базе SharePoint 2013. Продажа

Поиск на базе SharePoint 2013. Продажа

Поиск SharePoint 2013. Ранжирование на основе нейронных сетей

Поиск SharePoint 2013. Ранжирование на основе нейронных сетей

Поиск SharePoint 2013. Кастомная модель ранжирования

Поиск SharePoint 2013. Кастомная модель ранжирования

Поиск SharePoint 2013. Профилирование краулера

Поиск SharePoint 2013. Профилирование краулера

Поиск для сайта на базе SharePoint 2013. Часть 1: robots.txt, sitemap.xml и другие особенности

Поиск для сайта на базе SharePoint 2013. Часть 1: robots.txt, sitemap.xml и другие особенности