8. Поиск по индексу
8. Поиск по индексу
8. 1. Общие функции диалогового окна "Поиск по индексу"
8.2. Базовый поиск
8.3. Расширенный поиск
8.4. Поиск в режиме эксперта
8.5. Язык запросов HiDA
8.6. Примеры запросов
8.7. Создание и редактирование запросов при помощи текстового редактора
Функциональность HiDA "Поиск по индексу" дает возможность пользователю формулировать как простые запросы, состоящие из одного условия, так и состоящие из нескольких поисковых условий.
Пользователь может иметь одновременно несколько открытых индексов. Поиск всегда работает для активного индекса. Подробнее смотрите в разделе "9.1. Глобальный и локальный индексы" и "9.3. Панель индексов".
Диалоговое окно для поиска открывается с помощью команды меню Индекс->Поиск по индексу...[Ctrl+F3] или кнопки в панели инструментов
.

Диалог поиска имеет три альтернативные модели интерфейса, которые представлены в окне закладками "Базовый поиск", "Расширенный поиск" и "Поиск в режиме эксперта". В каждой модели интерфейса пользователь может задавать критерии для поиска, формируя запрос. При этом если пользователь создает запрос в режиме "Базовый поиск", то автоматически создается соответствующий запрос в расширенном поиске и в режиме эксперта. Аналогично при формировании запроса в расширенном поиске – его можно править на языке запросов HiDA, переключившись в режим эксперта (но не в обратном порядке).
Поисковый интерфейс переключается с помощью выбора соответствующей закладки.

8. 1. Общие функции диалогового окна "Поиск по индексу"
Нижняя часть окна диалога поиска для всех моделей интерфейсов общая:

По желанию пользователь может сделать свой критерий поиска более строгим, помечая опцию Учитывать заглавные/строчные. К примеру, поиск дескриптора 'Эстамп' с включенной опцией исключит из поиска дескриптор 'эстамп'.
Результат поиска пользователь может по своему выбору отображать либо как список документов – закладка "Документы", либо как набор изображений – закладка "Галерея". Можно определить, показывать все изображения из документов в "Галерее" или только по одному на каждый найденный документ. Последнее позволяет уменьшить количество скачиваемых изображений для ускорения работы (Настройки|Прочие):

После выполнения запроса в заголовке окна для результатов в нижней части поискового диалога отображается количество найденных документов и в скобках затраченное время:
![]()
или
![]()
Кнопка Развернуть
позволяет увеличить окно со списком документов (или с набором изображений) до размеров окна поискового диалога.
Кнопки Экспорт..., Сохранить список..., Отчет становятся доступными, если найден хотя бы один документ на запрос пользователя. С помощью этих кнопок можно выбирать дополнительные функции для найденных документов:
- экспортировать найденные документы (в формат *.xml, *.html, *.rtf),
- сохранить список полученных документов (в файл формата *.sel) или
- печатать полученные при поиске документы в виде "Карточек", "Списков" и "Этикеток" с помощью программы Генератор отчетов.
Кнопка Открыть становится доступной при выборе одного документа из списка, она позволяет открыть выбранный документ. Подробнее смотрите раздел "4.6.2.2. Открытие документов списком".
По умолчанию поиск ведется во всех документах. Пользователь может ограничить диапазон поиска с помощью кнопки "Выбрать документы...":

При нажатии на данную кнопку открывается стандартный диалог выбора документов[*]:

Ограничение диапазона поиска позволяет отсечь заведомо ненужные документы. Например, можно ограничить поиск только отдельными предметами и исключить коллекции. Кроме того, если из рассмотрения исключены лишние документы, операция поиска выполняется быстрее.
![]()
Функция "Фильтр типы" служит для фильтрации найденного списка документов по типу.

С помощью кнопок Убрать и Добавить устанавливается фильтр по типам документов. Кнопка Сбросить Все позволяет отменить фильтрацию.
Список найденных документов можно сократить также вручную. Для этого необходимо отобрать ненужные документы в результирующем списке для последующего удаления. Для выделения нескольких непоследовательных документов нужно щелкать по строкам таблицы левой кнопкой мыши, удерживая клавишу [Ctrl]. Для выделения одновременно нескольких документов, находящихся в списке подряд, нужно выделить с помощью мыши первый (или последний) желаемый документ, затем нажать клавишу [Shift] и, удерживая ее, щелкнуть по документу, расположенному ниже (или соответственно выше) указанного. Для отмены выделения отдельных документов можно использовать те же правила с клавишей [Ctrl]. Для отмены всего удаления – щелкнуть на списке документов за пределами выделенной зоны.
Пример выбора более одного документа:

После того как документы выделены их можно удалить с помощью клавиши [Delete] или команды контекстного меню:
.
В заголовке результатов отображаются изменения:

Измененный список можно использовать для открытия, экспорта и других операций с документами.
8.2. Базовый поиск
В этой модели интерфейса используются пользовательские настройки. Пользователь видит только те индексные категории, которые перечислены в файле определений, в элементе "EasySearchSections". Подробнее смотрите в разделе "26.5. Определение категорий индексов для "Базового поиска"".
Модель интерфейса "Базовый поиск":

Кнопка Сбросить все служит для возвращения поисковых условий к первоначальному состоянию – индексные категории будут располагаться в том порядке, как они определены в файле определений, в качестве операторов сравнения будет использован "=", значение "Объединение" примет заданное значение объединения по умолчанию (смотрите Настройки; Индекс/Поиск):
.
Пользователь в диалоге "Базовый поиск" может выбрать из раскрывающегося списка "Объединение" любой из элементов: "И", "Или", "Но не", "в той же группе", "в том же блоке" для объединения результатов отдельных поисковых запросов друг с другом (смотрите в разделе "8.6. Примеры запросов"). |
|
Любой элемент формы "Категория" также содержит список - это индексные категории, заданные в файле определений для базового поиска. Например: |
|
Элемент "Оператор" содержит операторы сравнения: |
|
В строку "Значение" пользователь должен ввести дескриптор, по которому он будет искать или с которым собирается сравнивать.
![]()
При вводе в поле "Значение" в распоряжении пользователя имеются следующие возможности:
- Поддержка маски "*" вместо любой цепочки символов в запросах с оператором "=".
Например, для нахождения всех документов, у которых дескрипторы в заданном поле начинаются с символа "а", используют значение "а*", заканчивающихся строкой "ка" - значение "*ка".
Для того чтобы искать символ "*" в документах необходимо записывать "\*" при поиске.
- Список дескрипторов соответствующей индексной категории. Нажатием на кнопку
или клавиши [F7] открывается окно дескрипторов, с помощью кнопок Добавить/Заменить можно добавить дескриптор в текущую позицию курсора или заменить дескриптором цепочку символов в строке "Значение". Использование списка дескрипторов гарантирует правильный ввод значения.
Для того чтобы выполнить сформированный запрос вне зависимости от выбранной модели интерфейса, необходимо нажать на клавишу [Enter] или на кнопку
. В процессе поиска название этой кнопки заменяется на "Прервать поиск". Нажатием на данную кнопку пользователь может принудительно прервать операцию.
При получении результатов необходимо учитывать тот факт, что количество выводимых документов может быть ограничено.
Опция Настройки; Прочие*:
.
![]()
8.3. Расширенный поиск
В отличие от "Базового поиска", который позволяет искать только в зафиксированных "базовых" индексных категориях, в "Расширенном поиске" пользователь не ограничен, в запросах может задавать любые индексные категории.

Пользователь может выбрать нужную для поиска "категорию" из списка в левой части поискового интерфейса, и затем добавлять ее к запросу для уточнения. Список категорий представлен таблицей с двумя столбцами:
Пользователь может отсортировать список категорий по своему желанию. Критерий сортировки отображается в заголовке столбца в виде
(прямой порядок сортировки) либо
(обратный порядок). Для изменения критерия сортировки пользователь должен щелкнуть указателем мышки на заголовке столбца.
Независимо от сортировки, в верхней части таблицы могут быть сгруппированы "избранные" индексные категории. Это происходит при нажатой кнопке
в панели индексов (подробнее смотрите раздел "9.3. Панель индексов"). Такие индексные категории отображаются синим цветом:
.
Замечание. Не путайте "избранные" и "базовые" категории, эти списки независимые. | |
В зависимости от сортировки категорию можно искать либо по имени, либо по идентификатору (ИД). При этом применяется принцип быстрого поиска: после каждого ввода будет выделена "подходящая" категория – первая категория, для которой введенная последовательность символов является частью названия/ИД категории (например, для ‘м’, ‘ма’, ‘мат’ результатом поиска может быть ‘материал)’. Поиск категории может быть произведен в сочетании с функцией
. Если кнопка отжата – то поиск работает по совпадению с началом строки, в противоположном случае – по совпадению с фрагментом в любом месте строки.
Добавить выделенную категорию для поискового запроса можно нажатием на кнопку
или двойным щелчком мышки по названию/ИД нужной категории в таблице категорий. Клавиша [Enter] также добавляет выделенную индексную категорию в критерии поиска. Однако если фокус ввода не находится в списке категорий, то нажатием на [Enter] запускается поиск.
Так же как в режиме "Базового поиска" в "Расширенном поиске" пользователь может выбрать операторы объединения и сравнения из соответствующих раскрывающихся списков.
В поле "Значение" пользователь должен ввести строку символов (например, дескриптор), которую он будет искать, или с которой собирается сравнивать.

Для ввода в поле "Значение" пользователь так же, как и в "Базовом поиске", может использовать маску "*" и список дескрипторов [F7].
При работе с открытой индексной панелью пользователь может легко составлять запросы с помощью операции перетаскивания "Drag & Drop":
1. | "Перетаскивание" различных индексных категорий в окно "Критерии поиска" приводит к добавлению соответствующего запроса с пустым значением:
| ||
2. | "Перетаскивание" различных дескрипторов из развернутых индексных категорий в окно "Критерии поиска" приводит к добавлению запроса с соответствующим заполненным значением:
|
Исключить строку с выделенным условием из поискового запроса пользователь может нажатием на клавишу [Delete] или на кнопку Удалить, удалить запрос в целом – на кнопку Удалить все.
Нажатием на кнопку Сохранить пользователь может записать текущий запрос в файл для последующего использования (расширение файла "qry"). Соответственно, нажатием на кнопку Загрузить можно открыть существующий файл запроса.
8.4. Поиск в режиме эксперта

В отличие от "Базового" и "Расширенного" поиска, где критерии поиска задаются выбором из соответствующих списков, для работы с "Поиском в режиме эксперта" используется язык запросов HiDA. Использование ручного ввода не так удобно, но зато открывает дополнительные возможности, недоступные в других моделях интерфейса.
Пользователю, не имеющим навыков работы с языком запросов HiDA, рекомендуется использовать этот интерфейс совместно с "Базовым" или "Расширенным". В таком случае процесс формирования запроса разбивается как бы на два этапа: задание поисковых условий в базовом или расширенном режиме, а затем расстановка приоритетов в режиме эксперта.
Смотрите подробно о языке запросов в разделах "8.5. Язык запросов HiDA" и "8.6. Примеры запросов".
8.5. Язык запросов HiDA
Пример поискового выражения на языке запросов HiDA:
'Название_предмета[Nazvan]'='Картина' Or 'Материал[Material]'LIKE'дер*' And Not 'Материал[Material]'LIKE'Стекло'.
Данный запрос означает: найти среди всех документов те, у которых поле, связанное с индексной категорией Название_ предмета, содержит дескриптор "Картина", и те, у которых поле, связанное с индексной категорией Материал, содержит "дерево", "деревянный" и другие, начинающиеся с "дер", но не содержит "Стекло".
Синтаксис языка запросов HiDA:
1. Название[ИД] категории должны всегда быть заключены в одинарные кавычки (апострофы):
- 'Название_категории[ИД_категории]'
- 'Название_предмета[Nazvan]'
- 'Материал[Material]'
2. После названия и ИД категории следует оператор сравнения.
Оператор: | Назначение: |
LIKE | используется вместо '=' для поиска по маске |
= | 'равно' - полное совпадение с дескриптором поля, |
< > | 'меньше чем', 'больше чем' к примеру: 'а' < 'в', но 'в' > 'а' – в алфавите |
<= >= | 'меньше или равно', 'больше или равно' |
<> | 'не равно' |
:: | обобщенный (интуитивный) поиск по тезаурусу |
3. Значения полей, используемые в запросах, должны быть заключены в одинарные кавычки (апострофы).
Например: 'Картина', 'дер*' , 'Стекло'.
4. Для задания дополнительного (уточняющего) поискового запроса используются следующие логические операторы (без кавычек).
Логический оператор: соответствует:
And И
Or Или
And Not Но не
SAME(GROUP) And В той же группе и
SAME(BLOCK) And В том же блоке и
Наиболее важными объединяющими элементами в запросах являются "And", "Or". Эти логические операторы, известные из булевой алгебры, служат для объединения результатов отдельных запросов.
На рисунке ниже представлены различные варианты объединения результатов запросов А и В:

Для сужения области поиска, используется оператор "WHERE_KEY_RANGE_SET":
WHERE_KEY_RANGE_SET 'Набор документов',
где Набор документов может содержать ключи документов, перечисленные через запятую, точку с запятой, либо пробел:
"(Obj) 00000001, 00000002"
"(Obj) 00000001; 00000002"
"(Obj) 00000001 00000002"
Дефис используется для непрерывных областей ключей документов. К примеру, "(Obj) 00000001-10005843" – означает искать среди Obj документов с ключами от "00000001" до "10005843".
Текстовый режим позволяет при помощи круглых скобок задавать приоритеты для объединения результатов отдельных поисковых условий.
Внимание! | Объединение ‘And’ является наиболее приоритетным. Используйте скобки для изменения приоритета запроса: |
(А Or В) And C | А Or В And C |
|
|
Как видно на схемах, использование разных приоритетов в сложных запросах приводит к получению различных результатов. К примеру, запрос в "Расширенном поиске" для демонстрационной базы данных, включенной в стандартную поставку:
Техника | = | чучело | |
Или | Материал | = | |
И | Материал | = | стекло |
и соответствующий ему запрос в режиме "Эксперта"
'Техника[Tehnika]'LIKE'чучело' Or ('Материал[Material]'LIKE'акварель' And 'Материал[Material]'LIKE'стекло')
дают в результате 531 документ, тогда как запрос (только в режиме "Эксперта"):
('Техника[Tehnika]'LIKE'чучело' Or 'Материал[Material]'LIKE'акварель' )And 'Материал[Material]'LIKE'стекло'
всего 3 документа.
Подробнее смотрите в разделе "8.6. Примеры запросов"Error! Reference source not found.Error! Reference source not found..
8.6. Примеры запросов
1. Найти документы, у которых дескриптор "чеканка" содержится в поле Техника и Количество которых более "15".
Запрос в Расширенном поиске:
Техника | = | чеканка | |
И | Количество | > | 15 |
и соответствующий ему запрос в режиме Эксперта:
'Техника[Tehnika]'='чеканка' And 'Количество[Kolvo]'>'15'
2. Найти документы, в которых поле Материал содержит дескриптор "бумага", и, в дополнение к этому, либо поле Материал содержит также дескриптор "стекло", либо поле Техника содержит дескриптор "чучело".
Запрос в Расширенном поиске:
Материал | = | бумага | |
И | Техника | = | чучело |
Или | Материал | = | бумага |
И | Материал | = | стекло |
и соответствующий ему запрос в режиме Эксперта:
'Материал[Material]'='бумага' And ('Материал[Material]'='стекло' Or 'Техника[Tehnika]'='чучело')
3. Найти документы, в которых поле Материал включает дескрипторы "бумага" и "стекло", либо документы с дескриптором "чучело" в поле Техника:
Материал | = | бумага | |
И | Материал | = | стекло |
Или | Техника | = | чучело |
и соответствующий ему запрос в режиме Эксперта:
'Материал[Material]'='бумага' And 'Материал[Material]'='стекло' Or 'Техника[Tehnika]'='чучело'
4. Найти документы, у которых Название организации = "Томский областной краеведческий музей" и Подразделение организации, включающее строку "отдел" в состав дескриптора, находятся в одной группе.
Название организации | = | Томский областной краеведческий музей | |
в той же группе | Назв. подразделения организации | = | *отдел* |
и соответствующий ему запрос в режиме Эксперта:
'Название организации[0600]'='Томский областной краеведческий музей' SAME(GROUP) And 'Назв. подразделения организации[0610]'LIKE'*отдел*'
Результатом может быть документ, содержащий повторяющуюся группу с полями
Название организации | Томский областной краеведческий музей |
Назв. подразделения организации | Отдел природы |
но не документ с повторяющимися группами:
Название организации | Томский областной краеведческий музей |
Назв. подразделения организации | Антропология |
Название организации | Томский областной художественный музей |
Назв. подразделения организации | Отдел новейших течений |
5. Найти документы, у которых Материал = "мережка", но Техника не "ручная".
Материал | = | мережка | |
Но не | Техника | = | ручная |
и соответствующий ему запрос в режиме Эксперта:
'Материал[Material]'LIKE'мережка' And Not 'Техника[Tehnika]'LIKE'ручная'
6. Найти документы, у которых Материал не "мережка" и Техника не "ручная".
В Расширенном режиме нельзя сформировать подобный запрос.
Запрос в режиме Эксперта:
Not 'Техника[Tehnika]'LIKE'ручная' And (Not 'Материал[Material]'LIKE'мережка')
или
Not ('Техника[Tehnika]'LIKE'ручная' Or 'Материал[Material]'LIKE'мережка')
7. Найти документы, у которых Материал - "бумага" но Отдел или собрание не содержит "ботаника" и Книга поступлений не содержит "23".
В Расширенном режиме нельзя сформировать подобный запрос.
Запрос в режиме Эксперта:
'Материал[Material]'='бумага' And (Not ('Отдел или собрание[Otdel]'='ботаника' Or 'Книга поступлений[Kniga]'='23'))
8. Найти документы, у которых Материал, подобный "мет*", и Дата записи, совпадающая с "01.02.1998" или более поздняя, находятся в одном блоке.
Материал | = | мет* | |
в том же блоке | Дата записи | > | 01.02.1998 |
и соответствующий ему запрос в режиме Эксперта:
'Материал[Material]'LIKE'мет*' SAME(BLOCK) And 'Дата записи[DataZap]'>='1991'
Примечания: 1. Логический оператор ‘SAME(BLOCK) And’ в одноблочных документах работает как ‘And’. В многоблочных документах фильтрует документы с данными, удовлетворяющими критериям запроса и находящимися в одном блоке.
2. Поле "Дата записи [DataZap]" для данного запроса должен иметь формат "Date".
9. Найти документы, у которых поле Материал содержит любой дескриптор из раздела "бумажные материалы" тезауруса “Материалы”:

Материал | :: | бумажные материалы |
и соответствующий ему запрос в режиме Эксперта:
'Материал[Material]'::'бумажные материалы'
При помощи интуитивного запроса будут найдены документы, содержащие в поле Материал не только дескриптор "бумажные материалы", но также и любые из дескрипторов "бумага", "фотобумага", "картон цветной", "папирус" и другие, относящиеся к "бумажным материалам".
8.7. Создание и редактирование запросов при помощи текстового редактора
Файлы *.qry, содержащие запросы для поиска, можно создавать и редактировать не только внутри приложения HiDA, а также с помощью любого текстового редактора, поддерживающего кодировку ANSI (например, с помощью "Блокнота"). Затем подготовленные запросы можно использовать для поиска непосредственно в базе данных HiDA.

Порядок обработки запроса в текстовом редакторе:
- Откройте файл с запросом в текстовом редакторе.
- Отредактируйте запрос.
- Сохраните файл с расширением *.qry (если необходимо, задайте новое имя файла).
Редактирование запросов для поиска по индексу в текстовом редакторе подобно редактированию запросов в "Расширенном поиске". Подробнее смотрите в разделе "8.5. Язык запросов HiDA".
Обратите внимание, что при редактировании файлов с запросами, необходимо учитывать способ написания текста (заглавная либо строчная буква, написание через дефис, раздельно или слитно). Каждая строка запроса должна заканчиваться нажатием клавиши [Enter]. Для придания большей наглядности Вы можете добавлять в файл пустые строки, которые будут пропущены при загрузке файла в приложении HiDA.
[*] Стандартный общий диалог выбора документов используется для многих операций с документами









