Навигация по метаданным и их фильтрация

Дата последнего изменения: 19 апреля 2010 г.

Применимо к: SharePoint Server 2010

В этой статье
Навигация по метаданным и их фильтрация
Советы
Возможности программирования навигации по метаданным и их фильтрации

Навигация по метаданными и их фильтрация позволяют фильтровать списки Microsoft SharePoint Server 2010 по метаданным элементов. С помощью этой функции владелец списка может повысить уровень полей до ключевых полей навигации, а пользователи, просматривающие эти списки, получают в распоряжение интерфейс фильтрации, с помощью которого текущий список можно отфильтровать таким образом, чтобы отобразить только поля с желаемыми значениями. Навигация по метаданным и их фильтрация основаны на индексах на уровне списков, что обеспечивает высокую эффективность работы даже со списками из десятков миллионов элементов. Эта функция расширяет возможности использования метаданных и тегов: если элементы грамотно снабжены тегами по нескольким полям, их обнаружение выполняется более эффективно, чем для элементов, не снабженных тегами.

Навигация по метаданным и их фильтрация

Возможности навигации по метаданным и их фильтрации:

  • Новый пользовательский интерфейс для просмотра и фильтрации списков на основе метаданных элементов.

  • Процесс автоматического создания индексов списка на основе полей, уровень которых повышен до полей навигации.

  • Процесс выбора для выполняемого запроса наилучшего индекса, позволяющего избежать регулирования запросов к спискам.

Новый пользовательский интерфейс

Новый пользовательский интерфейс включает иерархии навигации и ключевые фильтры:

  • Иерархии навигации представляют собой поля, отображаемые в виде дерева при просмотре пользователем родительского списка. Значения этих полей можно просматривать как структуру папок и щелкать по ним для просмотра документов, соответствующих выбранным значениям. Как и грамотная структура папок, грамотная иерархия навигации позволяет разбить контент на удобные для работы блоки.

  • Ключевые фильтры представляют собой поля, отображаемые под древовидным представлением. Это вспомогательные поля, позволяющие сократить объем контента, отображаемого в текущем представлении.

Автоматическое создание индекса

На странице Настройка навигации для метаданных также можно указать, будут ли для списка автоматически создаваться индексы, соответствующие текущим полям иерархии навигации и ключевых фильтров. Если этот параметр включен (по умолчанию он включен), то при сохранении страницы параметров навигации по метаданным выполняются следующие действия:

  • Для всех поддерживаемых полей ключевых фильтров, за исключением полей Тип контента и Выбор, создаются индексы отдельных столбцов.

  • Для всех поддерживаемых сочетаний иерархий навигации и ключевых фильтров создаются составные индексы.

В большинстве случаев рекомендуется оставить без изменений параметр автоматического создания для списка индексов, соответствующих выбранным полям иерархии навигации и ключевых фильтров, поскольку если для списка отсутствуют индексы, все запросы к такому списку будут неиндексированными. В Microsoft SharePoint Server 2010 неиндексированные запросы не поддерживаются для больших списков и списков, количество элементов в которых превышает значение параметра "Пороговое значение для запросов к спискам" для сайта. В некоторых особых случаях может потребоваться отключить этот параметр и настроить индексы вручную. Ниже приведены важные рекомендации по работе с индексами.

  • В SharePoint Server 2010 для одного списка поддерживаются максимум 20 индексов. Функция навигации по метаданным и их фильтрации не сможет создать индекс, если лимита в 20 индексов окажется недостаточно для всех возможных сочетаний выбранных полей иерархии навигации и ключевых фильтров.

  • Создание новых индексов для больших списков запрещено, если пользователь не является администратором фермы или не работает в рамках периода обслуживания.

Типы индексов и поддерживаемые поля

В таблице 1 перечислены типы и роли полей, которые можно использовать при навигации по метаданным.

Таблица 1. Типы полей, используемых при навигации по метаданным

Тип поля

Поддерживается в иерархии навигации

Поддерживается в качестве ключевого фильтра

Поддерживает индексы отдельных столбцов

Поддерживает составной индекс

Тип контента

Да

Да

Да

Да

Выбор (одно значение)

Да

Да

Да

Нет

Управляемые метаданные (одно значение)

Да

Да

Да

Да

Управляемые метаданные (несколько значений)

Да

Да

Да*

Нет

Пользователь или группа (одно значение)

Нет

Да

Да

Да

Пользователь или группа (несколько значений)

Нет

Да

Нет

Нет

Дата и время

Нет

Да

Да

Да

Число

Нет

Да

Да

Да

ПримечаниеПримечание

*Поля подстановки с поддержкой нескольких значений индексируются автоматически так, как они хранятся в базе данных, и поэтому на них не распространяется ограничение в 20 индексов. Однако такие поля не могут входить в составные индексы.

Индексированные запросы

Функция навигации по метаданным и их фильтрации пытается при каждой загрузке списка подключить наиболее эффективный индекс. Каждый раз, когда пользователь загружает список или изменяет его, применяя новый фильтр, очищая параметры фильтра или выполняя сортировку по какому-либо полю, в фоновом режиме выполняется определенная логика, которая изучает запрос и обращается к базе данных таким образом, чтобы избежать регулировки большого списка. Этот процесс не всегда прямолинеен; запрос может быть выполнен несколькими способами, каждый из которых может привести к различным результатам. Процесс работает следующим образом:

  1. Когда пользователь переходит на страницу списка или обновляет список, на странице выполняется запрос Collaborative Application Markup Language (CAML) к списку для получения элементов, отображаемых в веб-части представления списка. Этот запрос может включать один или несколько фильтров, основанных на выбранных значениях в иерархии навигации, один или несколько выборов ключевых фильтров, один или несколько фильтров, указанных в определении представления, или один или несколько фильтров, указанных в фильтрах столбцов веб-части представления списка. Если текущий список имеет большой размер, этот запрос CAML может выдать исключение SPThrottledQueryException, означающее, что запрос не является селективным. Другими словами, запрос требует больше элементов из базы данных, чем задано администратором в параметре "Пороговое значение для запросов к спискам". При возникновении этого исключения выполняется шаг 2 и последующие шаги.

  2. Функция навигации по метаданным изучает каждую операцию (предложение) фильтра в запросе CAML и определяет, для каких из них созданы соответствующие индексы, которые можно применить для выполнения операции фильтра. Например, если для столбца ModifiedBy создан индекс, и в текущем списке выполняется фильтрация по столбцу ModifiedBy, этот индекс можно использовать в запросе.

  3. Для каждого допустимого сочетания индекса и фильтра функция навигации по метаданным перезаписывает текущий запрос CAML таким образом, чтобы задействовать соответствующий индекс.

  4. Затем функция навигации по метаданным и их фильтрации выполняет каждый из получившихся индексированных запросов до тех пор, пока не будет найден запрос, не приводящий к исключению SPThrottledQueryException. Если это исключение возникает при выполнении всех запросов, функция формирует и выполняет резервный запрос.

ПримечаниеПримечание

Функция навигации по метаданных и их фильтрации включена по умолчанию для большинства сайтов, созданных в SharePoint Server 2010. Указанный выше процесс выполняется для каждого списка на этих сайтах независимо от того, была ли эта функция настроена.

Резервные запросы

Если функция навигации по метаданным и их фильтрации определяет, что текущий пользовательский запрос невозможно выразить в виде селективного индексированного запроса, она формирует и выполняет резервный запрос. Резервный запрос представляет собой измененную версию исходного запроса, которая запрашивает только часть списка, а не весь список. Резервные запросы позволяют показать пользователю часть результатов, даже в том случае, если исходный запрос невозможно выполнить из-за регулировки большого списка. Резервные запросы также сигнализируют владельцам списков о том, что распределение данных в списке несимметрично, а определенные запросы пользователей не позволяют вернуть полный набор результатов, что означает, что пользователям может быть недоступен необходимый контент. Резервные запросы могут не вернуть результатов, если ни один из элементов в части списка, просканированной запросом, не удовлетворяет исходному запросу.

Поскольку результаты резервного запроса являются только подмножеством запрошенных пользователем элементов, пользователю выводится сообщение о том, что выведен неполный набор результатов, а для получения полного набора необходимо применить дополнительные фильтры. Каждый раз, когда пользователь указывает дополнительный фильтр, обработчик запросов получает возможность найти селективное сочетание фильтра и индекса, не приводящее к исключению SPThrottledQueryException. Существуют два типа резервных запросов (указаны в порядке предпочтения): индексированные резервные запросы и простые резервные запросы.

  1. Индексированные резервные запросы. Запросы этого типа выполняются для одного из индексов в списке, проверяя N последних созданных элементов на соответствие отфильтрованному значению. Для использования семантики индексированного резервного запроса в пользовательский запрос должен входить фильтр по индексированному столбцу, а сочетание фильтра и индекса должно удовлетворять ряду дополнительных ограничений. В индексированном резервном запросе можно использовать только сочетания фильтра и индекса, перечисленные в таблице 2.

    Таблица 2. Допустимые сочетания фильтра и индекса в резервных запросах

    Тип индекса

    Запросы, поддерживающие резервную индексацию

    Тип контента

    Одно значение

    Выбор (одно значение)

    Одно значение

    Управляемые метаданные (одно значение)

    Одно значение

    Несколько значений

    Управляемые метаданные (несколько значений)

    Одно значение

    Несколько значений

    Пользователь или группа (одно значение)

    Одно значение

    Дата и время

    Одно значение

    Диапазон значений

    Число

    Одно значение

    Диапазон значений

    Управляемые метаданные (одно значение), составной индекс с датой и временем

    Одно значение в столбце с типом "Управляемые метаданные"

    Либо одно значение, либо диапазон значений в столбце с типом "Дата и время"

    Управляемые метаданные (одно значение), составной индекс с численными значениями

    Одно значение в столбце с типом "Управляемые метаданные"

    Либо одно значение, либо диапазон значений в столбце с типом "Число"

    Управляемые метаданные (одно значение), составной индекс с типом контента

    Одно значение в столбце с типом "Управляемые метаданные"

    Одно значение в столбце с типом "Тип контента"

    Управляемые метаданные (одно значение), составной индекс с пользователем или группой

    Одно значение в столбце с типом "Управляемые метаданные"

    Одно значение в столбце с типом "Пользователь или группа"

    Тип контента, составной индекс с датой и временем

    Одно значение в столбце с типом "Тип контента"

    Либо одно значение, либо диапазон значений в столбце с типом "Дата и время"

    Тип контента, составной индекс с численными значениями

    Одно значение в столбце с типом "Тип контента"

    Либо одно значение, либо диапазон значений в столбце с типом "Число"

    Тип контента, составной индекс с пользователем или группой

    Одно значение в столбце с типом "Тип контента"

    Одно значение в столбце с типом "Пользователь или группа"

    ПримечаниеПримечание

    В таблице 2 "одно значение" означает фильтр, выражаемый с помощью такого предложения в CAML, как, например, 10. "Несколько значений" означает фильтр, выражаемый с помощью такого предложения в CAML, как, например, 1011. "Диапазон значений" означает фильтр, выражаемый с помощью такого предложения в CAML, как, например, 2010-02-04T08:00:00Z.

    Для определенных индексированных сочетаний нельзя использовать резервный запрос, если запрос не соответствует указанному формату. Например, если для поля таксономии с одним значением и поля даты задан составной индекс, а в предложение CAML пользовательского запроса входит несколько значений из поля таксономии, вместо индексированного запроса выполняется простой резервный запрос.

  2. Простые резервные запросы. Запросы, в которых отсутствует предложение фильтра, поддерживающее резервную индексацию, должны выполняться как простые резервные запросы. Простой резервный запрос выполняется для N последних созданных элементов списка. Если ни один из этих N элементов не соответствует параметрам пользовательского запроса, результаты не возвращаются.

    ПримечаниеПримечание

    И в индексированном, и в простом резервном запросе N равно ("Пороговое значение для запросов к спискам" * 0,20). "Пороговое значение для запросов к спискам" задает администратор, а множитель 0,20 изменить нельзя.

Советы

  • Функцию навигации по метаданным лучше всего использовать в сочетании с полями управляемых метаданных; их надежность, иерархическая природа и удобство использования обеспечивают эффективное разбиение контента списков на удобные для работы блоки.

  • Для просмотра CAML и SQL-кода индексированных и простых резервных запросов, выполняемых для пользовательского запроса, можно воспользоваться панелью мониторинга разработчика на страницах списка с навигацией по метаданным.

  • Некоторые администраторы рассматривают резервные запросы как предупреждение о том, что данные в списке неэффективно распределены по индексам и значениям полей и требуется перераспределить данные, чтобы пользователи списка могли получить доступ к необходимым документам. Если включена запись подробных сведений в журнал, при каждом выполнении резервного запроса производится запись в журнал ULS. Для перехвата этих записей и вывода предупреждения, чтобы администратор мог принять соответствующие меры, можно создать правило исправности.

Возможности программирования навигации по метаданным и их фильтрации

Объектная модель навигации по метаданным и их фильтрации основана на пространстве имен Microsoft.Office.DocumentManagement.MetadataNavigation и включает указанные ниже типы.

Таблица 3. Модель программирования навигации по метаданным и их фильтрации

Тип

Описание

MetadataNavigationContext

Отслеживает состояние элементов управления навигации по метаданным и веб-части представления списка во время HTTP-запроса.

MetadataNavigationHierarchy

Представляет иерархию объектов MetadataNavigationItem.

MetadataNavigationItem

Представляет объект SPItem, связанный с объектом MetadataNavigationHierarchy.

MetadataNavigationKeyFilter

Представляет ключевой фильтр, используемый для преобразования метаданных в осмысленное и удобное для работы подмножество.

MetadataNavigationSettings

Указывает, какие параметры объекта MetadataNavigationItem в объекте SPList будут контролировать отображение иерархий метаданных и фильтров в представлениях списков.

См. также

Концепции

Модель программирования управления документами

Управление документами

Управление метаданными