Формулировка проблемы: необходимо реализовать фасетный поиск в модуле "Документы" с возможностью выбора способа и направления сортировки результатов.
Используется: Хранилище -> Документы.
Решение: необходимо реализовать поиск по фасетам, аналогичный поиску в модулях "Реестры", "Проекты" и "Файлы".
При вводе поискового запроса в строке поиска модуля
"Документы" и последующем нажатии на кнопку лупы/клавишу
Enter
отобразится новый интерфейс фасетного
поиска.
При переходе в другой узел навигатора (журнал, фильтр, дело и т.п.) интерфейс поиска пропадает и отображаются документы этого узла согласно его условиям фильтрации и сортировки (без заданных предыдущим поиском условий и ограничений). Настройки фильтра навигатора («боковой фильтр») также сбрасываются. При этом введённый в глобальную поисковую строку (рядом с кнопкой «Настройки») текст сохраняется.
Поисковый интерфейс разбит на две части:
основная рабочая область для отображения результатов поиска;
боковая панель фасетов и сортировки
В случае, если пользователь ничего не ввёл в строку поиска (как в «глобальную», так и в строку в интерфейсе поиска), то необходимо отображать интерфейс поиска в следующем виде:
Основная рабочая область отображает результаты поиска согласно настройкам боковой панели. Результаты поиска представлены в виде плашек либо таблицы, в зависимости от настроек вида отображения документов.
Также область содержит строку поиска. По умолчанию данная строка содержит то же значение, что и строка глобального поиска. При вводе нового поискового запроса в данную строку, глобальный поиск также примет это же значение.
В верхней панели экрана располагаются кнопка "Детали" и пагинатор. По умолчанию отображается первая страница. Количество результатов поискового запроса, отображаемых на одной странице - 30.
Результаты могут быть отфильтрованы как выбором фасетов в боковой панели, так и фильтром навигатора ("боковой фильтр"). Эти два способа могут использоваться совместно, например: сначала вводится строка поиска, фильтруется выбором каких-либо фасетов, а затем ещё ограничивается фильтром навигатора и т.д.
Боковая панель экрана разделена на группы фасетов:
Категории поиска;
Статус документа;
Тип совпадения;
Также имеется группа настроек "Сортировка".
Все фасеты представлены в формате:
%Название_фасета% (%N%)
где N
- количество найденных результатов поиска
согласно данному фасету.
По умолчанию выбраны первые фасеты каждой группы. Форматирование выбранных пунктов указано в соответствующем разделе.
При изменении поисковой строки, а также при переключении фасетов в других группах, выбранные фасеты не сбрасываются в исходное состояние.
Пример
Пользователь вводит что-либо в поисковую строку и выбирает фасет «Номер». Далее пользователь меняет значение поисковой строки. Фасет «Номер» остаётся выбранным.
Боковая панель имеет собственный скролл, который появляется в том случае, если фасеты не умещаются в неё по вертикали (например, большое количество динамически формируемых пунктов).
Категории поиска представляют собой наборы полей документов в зависимости от выбранного узла:
все журналы:
Номер;
Номер (исх);
Краткое содержание;
Корреспондент (орг);
Корреспондент;
Автор;
Зарегистрировал;
Исполнитель;
Тип документа;
Доп. поля карточки;
журнал типа "Внутренний":
Номер;
список динамически формируемых пунктов;
Краткое содержание;
Автор;
Зарегистрировал;
Исполнитель;
Тип документа;
Доп. поля карточки;
журнал типа "Входящий":
Номер;
список динамически формируемых пунктов;
Номер (исх);
Краткое содержание;
Корреспондент (орг);
Корреспондент;
Зарегистрировал;
Исполнитель;
Тип документа;
Доп. поля карточки;
журнал типа "Исходящий":
Номер;
список динамически формируемых пунктов;
Краткое содержание;
Корреспондент (орг);
Корреспондент;
Автор;
Зарегистрировал;
Тип документа;
Доп. поля карточки;
"Дела":
Номер;
Номер (исх);
Краткое содержание;
Корреспондент (орг);
Корреспондент;
Автор;
Зарегистрировал;
Исполнитель;
Тип документа;
Доп. поля карточки;
"Все":
Номер;
Краткое содержание;
Корреспондент (орг);
Корреспондент;
Автор;
Зарегистрировал;
Исполнитель;
Тип документа;
Доп. поля карточки.
Список динамически формируемых пунктов.
Представляет собой динамически формируемый список счетчиков,
настроенных в системе, исключая
стандартные
счетчики даты регистрации, а также «Индекс дела»
({file_index}
).
Пункты отображаются в формате:
Элемент %номер_п/п% - %код_счетчика/звезды%
Динамически формируемые пункты отображаются только для журналов. Список пунктов зависит от выбранного журнала, в котором осуществляется поиск.
Для корневого узла журналов данные пункты отсутствуют[4].
Данная группа фасетов определяет отображения документов согласно их статусу:
Все документы - зарегистрированные и незарегистрированные документы;
Только незарегистрированные;
Только зарегистрированные.
Фасеты данной группы определяют тип совпадения результатов относительно поискового запроса:
Все - документы с полным, а также частичным совпадением результата запроса;
Полное совпадение - документы с полным совпадением результата запроса.
Полное совпадение подразумевает под собой полное лексикографическое совпадение результата с поисковым запросом. Остальные варианты относятся к группе частичных совпадений.
Примечание
По техническим причинам неполное совпадение с основами слов обрабатывается для основ длиной до пяти символов включительно.
Примечание
По техническим причинам полное лексикографическое, а также частичное (в стиле wildcard) совпадение не будет работать в фасете «Доп. поля карточки». Поиск в этом фасете будет осуществляться по основам слов.
Данная группа определяет сортировку найденных результатов поискового запроса. Возможно осуществлять сортировку по следующим типам:
По релевантности;
По дате регистрации;
По номеру;
по динамически формируемым пунктам;
По краткому содержанию;
По автору;
По зарегистрировавшему;
По исполнителю.
По динамически формируемым пунктам
. Список
динамически формируемых пунктов повторяет соответствующие им
фасеты для выбранного журнала и отображается в формате:
По элементу %номер_п/п% - %код_счетчика/звезды%
Сортировка осуществляется по убыванию в пунктах:
По релевантности
По дате регистрации
По элементу %номер_п/п% - %код_счетчика/звезды%
В остальных пунктах - по возрастанию.
Также необходима возможность сортировки документов с учетом их статуса. Для этого будет реализована настройка "Сначала незарегистрированные" в виде флага (по умолчанию выключен).
Алгоритм сортировки зависит от данной настройки и выглядит следующим образом:
Флаг выключен
В данном случае сортировка осуществляется по следующим критериям:
первый критерий - по сущности выбранного типа сортировки;
второй критерий - по дате регистрации;
третий критерий - по дате создания.
Флаг включен
При включении настройки в модуле будут отображаться сначала все незарегистрированные документы, удовлетворяющие поисковому запросу, а затем - зарегистрированные. При этом критериями сортировки будут служить:
Незарегистрированные документы:
первый критерий - по сущности выбранного типа сортировки;
второй критерий - по дате создания;
Зарегистрированные документы:
первый критерий - по сущности выбранного типа сортировки;
второй критерий - по дате регистрации.
третий критерий - по дате создания.
Если в результате сортировки по первому критерию имеется несколько документов с одинаковым значением, то подключается второй критерий. Если данное поведение повторилось и для второго критерия - сортировка осуществляется по третьему критерию.
Сортировка по дате регистрации
Сортировка по дате регистрации - составной критерий: результаты поиска с одинаковой датой регистрации сортируются между собой по дополнительному счётчику, а при одинаковых дополнительных счётчиках (такое может быть, например при поиске по фильтру «Все» или по всем журналам) - по дате создания.
Примечание:
Это поведение должно также быть распространено на критерии сортировки в фильтрах документов (см. задачу 10608).
Сортировка по релевантности
Сортировка результатов такой сортировки будет осуществляться в следующей последовательности:
полное лексикографическое совпадение, но без учета регистра;
полное совпадение при наличии повторяющихся слов;
полное совпадение, но с измененным порядком слов;
совпадение по основе.
Остальные результаты не являются важными и сортируются по общей релевантности.
Более подробно данный механизм можно просмотреть в примере использования
Пусть список документов входящего журнала выглядит следующим образом (тип документа у всех «Входящий» шаблон номера в примере — 08-03/{in1}, период сброса — каждый год):
Сотрудник канцелярии открывает журнал входящих документов модуля "Документы".
В окне поиска устанавливает курсор, вводит «123» и нажимает
<Enter>
.
В основной области вместо списка документов отобразился поиск по категориям.
Категории поиска:
Все результаты (12) — выбран по умолчанию
Краткое содержание (2)
Номер (7)
Элемент 1 - in1 (7)
Номер исх (4)
Корреспондент (0)
Корреспондент (орг) (0)
Зарегистрировал (0)
Исполнитель (0)
Тип документа (0)
Доп.поля карточки (0)
Статус документа:
Все документы (12) — выбран по умолчанию
Только незарегистрированные (2)
Только зарегистрированные (10)
Тип совпадения:
Все, включая неполное совпадение (12) — выбран по умолчанию
Только полное совпадение (4)
Сортировка:
По релевантности — выбран по умолчанию
По дате регистрации
По краткому содержанию
По номеру
По элементу 1 - in1
По автору
По зарегистрировавшему
По исполнителю
И далее флажок:
Сначала незарегистрированные — нет (значение по умолчанию).
Согласно критериям по умолчанию документы отсортированы в следующем порядке:
Примечание
сначала идут документы с полным совпадением по полю «Номер исх» (значение релевантности высокое);
затем идет документ с полным совпадением по полю «Краткое содержание» (значение релевантности высокое, но ниже номера исх);
затем идет документ с совпадением по основе слова;
далее — частичное совпадение.
Пользователь включает флажок «Сначала незарегистрированные». Обновится сортировка документов:
Примечание
Cначала идут незарегистрированные документы. Между собой они отсортированы по релевантности:
сначала идет документ с полным совпадением (значение релевантности высокое);
затем идет документ с совпадением по основе слова (значение релевантности ниже).
Cледом идут зарегистрированные документы. Между собой они также отсортированы по релевантности:
первые 3 документа имеют полное совпадение по полю «Номер исх» (значение релевантности одинаково высокое), они будут отсортированы между собой сначала по дате регистрации, затем по дате создания;
в остальных — частичное совпадение.
Сотрудник выделяет среди категорий поиска «Элемент 1 - in1 (7)». Обновятся группы фасетов «Тип совпадения» и «Статус документа»:
Все, включая неполное совпадение (7)
Только полное совпадение (3)
По данным критериям документы будут отсортированы в следующем порядке:
Примечание: сортировка аналогична пункту выше.
В типе сортировки сотрудник канцелярии указывает «По элементу in1». Теперь документы отсортированы в следующем порядке:
Примечание
Т.к. у незарегистрированных документов отсутствует номер, в выборке такие документы отсутствуют.
Среди зарегистрированных документов:
первые 3 документа имеют полное совпадение по «Элементу счетчика» и, соответственно, одинаковую релевантность (будут отсортированы между собой сначала по дате регистрации, затем по дате создания);
в остальных — частичное совпадение.
В типе сортировки сотрудник канцелярии указывает «По дате регистрации». Теперь документы отсортированы в следующем порядке:
В типе совпадения сотрудник канцелярии указывает «Только полное совпадение». Результаты поиска:
Изменить поисковую строку на «Входящий». Категория поиска - «Краткое содержание», статус документа - «Все документы», тип совпадения - «Все, включая неполное совпадение», сортировка - «По дате регистрации», «Сначала незарегистрированные» - да.
Категории поиска:
Все результаты (23)
Краткое содержание (15)
Номер (0)
Элемент 1 - in1 (0)
Номер исх (0)
Корреспондент (0)
Корреспондент (орг) (0)
Зарегистрировал (0)
Исполнитель (0)
Тип документа (23)
Доп.поля карточки (0)
Статус документа:
Все документы (15)
Только незарегистрированные (5)
Только зарегистрированные (10)
Тип совпадения:
Все, включая неполное совпадение (15)
Только полное совпадение (0)
Сортировка:
По релевантности
По дате регистрации
По краткому содержанию
По номеру
По элементу 1 - in1
По автору
По зарегистрировавшему
По исполнителю
И далее флажок:
Сначала незарегистрированные — да.
По данным критериям документы отсортированы в следующем порядке:
Примечание: • Сначала идут незарегистрированные документы. Между собой они отсортированы по дате создания. • Следом идут зарегистрированные документы. Между собой они отсортированы по дате регистрации.
Изменить поисковую строку на «Сладкой ваты». Категория поиска - «Краткое содержание», статус документа - «Все документы», тип совпадения - «Все, включая неполное совпадение», сортировка - «По релевантности», «Сначала незарегистрированные» - да.
Категории поиска:
Все результаты (7)
Краткое содержание (7)
Номер (0)
Элемент 1 - in1 (0)
Номер исх (0)
Корреспондент (0)
Корреспондент (орг) (0)
Зарегистрировал (0)
Исполнитель (0)
Тип документа (0)
Доп.поля карточки (0)
Статус документа:
Все документы (7) — выбран по умолчанию
Только незарегистрированные (7)
Только зарегистрированные (0)
Тип совпадения:
Все, включая неполное совпадение (7)
Только полное совпадение (1)
Сортировка:
По релевантности
По дате регистрации
По краткому содержанию
По номеру
По элементу 1 - in1
По автору
По зарегистрировавшему
По исполнителю
И далее флажок:
Сначала незарегистрированные — да.
По данным критериям документы отсортированы в следующем порядке:
Примечание
Все документы в выборке незарегистрированные. Между собой они отсортированы по релевантности:
первый документ имеет полное совпадение (наибольшее значение релевантности);
второй документ имеет совпадение с поисковой строкой, но является частичным совпадением;
третий документ имеет совпадение по словам поисковой строки, но их порядок не совпадает;
четвертый документ имеет совпадение по основам слов;
далее идут документы с частичным совпадением.
[4] Список динамически формируемых пунктов должен работать так же, как в фильтрах модуля «Документы» (см. задачу 9625)