Использование контекста пользователя (сегментации) при поиске в SharePoint 2013

Исходная статья опубликована в понедельник, 3 декабря 2012 г.

Использование контекста для представления текущего пользователя при поиске впервые было представлено в FAST Search для SharePoint 2010. Если вам интересно, как это работало, ознакомьтесь с данной статьей: https://blogs.technet.com/b/speschka/archive/2009/12/09/using-custom-properties-to-create-a-fast-search-for-sharepoint-2010-user-context.aspx. В SharePoint 2013 данный компонент отсутствует, но для него предложена замена — сегментация пользователей. Сейчас я не буду попытаться объяснить, что такое пользовательские сегменты и как они работают, так как кто-то из группы поиска уже проделал всю эту работу: https://blogs.msdn.com/b/adaptive_experiences_in_sharepoint_2013/archive/2012/11/14/set-up-user-segmentation-to-drive-adaptive-experiences-in-a-product-catalog-in-sharepoint-2013.aspx. Я настоятельно рекомендую вам ознакомиться с этой записью блога, так как в ней рассказывается, что это такое и как оно работает.

Я не собираюсь приписывать себе чужой труд, поэтому у меня здесь другая задача. При чтении статьи вы заметите, что в ней упоминается создание настраиваемой веб-части для выяснения сегментация пользователей, которые следует применить к текущему запросу, после чего выполняется сама операция добавления. В блоге это описывается как добавление сегментации пользователей на основании свойства браузера. Я решил создать веб-часть, добавляющую сегментацию пользователей на основании отдела текущего пользователя. Если кто-то из вас еще не слышал, отмечу, что при импорте профиля из Active Directory в SharePoint 2013 мы автоматически импортируем все уникальные значения отделов в специальный банк терминов. Это делает настройку по отделу текущего пользователя очень удобной.

Может возникнуть один вопрос: "Если я собираюсь представлять контент по отделу пользователя, почему бы просто не воспользоваться аудиториями?" Это логичный вопрос, и вот в чем заключается отличие. При использовании аудиторий мы получаем простой двухпозиционный переключатель — вы либо отображаете веб-часть, либо нет. При использовании сегментации пользователей я могу извлечь информацию из профиля или любого другого источника и настроить отображаемый контент. Поскольку я использую правило запроса, то могу выполнить для пользователя один или несколько дополнительных запросов, я могу изменить предлагаемый результат или даже изменить оценку запроса, например, если хочу, чтобы определенный контент отображался выше в результатах поиска в зависимости от вашего отдела. Это открывает поистине фантастические возможности для поиска в SharePoint 2013.

Чтобы помочь вам с использованием данной возможности, я просто прикрепляю весь свой проект Visual Studio — скомпилированную сборку веб-части, решение, исходный код — для веб-части, добавляющей отдел текущего пользователя в сегментацию пользователей. Вы можете поступить с ней, как захотите, например использовать в неизменном виде или в качестве основы для создания своей собственной веб-части для управления сегментацией пользователей. Существует пара аспектов, которые я хотел бы отметить по сегментации пользователей и этой веб-части из указанной выше статьи.

  • Когда вы создаете правило запроса, оно по умолчанию настраивается на запрос каталога для сайта публикации. Если вы используете данную настройку, то не получите никаких результатов поиска. Выберите вместо нее параметр запроса "Все источники". В приведенном в статье описании конфигурации это упомянуто, но специально не выделено. Поскольку вам требуется изменить режим работы по умолчанию, я решил дополнительно отметить это.
  • В статье говорится об использовании другой веб-части для отображения результатов по любому контенту, выделяемому при использовании сегментации пользователей. В этом случае (как это указано в статье) моя веб-часть наследует от ContentBySearchWebPart, поэтому этот элемент управления можно использовать как для задания сегментации пользователей, так и для отображения выделенного контента. От описанного в статье случая это отличается только тем, что при добавлении веб-части на страницу в свойстве параметров для этой веб-части будет стоять другое значение. Просто задайте в параметрах для свойства Query results provided by (Результаты запроса предоставляет) значение This web part (Данная веб-часть).

Готово! Надеюсь, что при поиске вы все найдете интересные сценарии для сегментации пользователей. Что касается моего конкретного сценария, то при написании данной статьи я ориентировался на специальное обучение для сотрудников, работающих в отделе руководства Executive. В результате при попадании на страницу с моей веб-частью такие сотрудники видят баннер и ссылку о специальном учебном курсе, который им требуется пройти:

Это локализованная запись блога. Оригинал находится на странице Using User Context (AKA Segmentation) in Search with SharePoint 2013