Поиск в 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>
XML

Свойство 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

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

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

Техлид, Архитектор, Разработчик, Microsoft MVP. Более 20 лет опыта в области системной интеграции и разработки программного обеспечения. Специализируюсь на проектировании и внедрении масштабируемых высокопроизводительных программных решений в различных отраслях.

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