Язык запросов

Запрос к ИПС Артефакт должен быть сформулирован на понятном ему языке, который называется языком запросов.

Из чего состоят запросы

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

Операнды

Операторы

Оператор И

Эквивалентные формы записи: и И and AND.

Оператор И соединяет операнды - слова и/или выражения в скобках. Если оператор соединяет два слова А и B, то фразе A и B будут релевантны документы содержащие и слово A и слово B. Фразе A и B и C будут релевантны документы, содержащие и A и B и C. Другими словами, оператор И требует совместного вхождения слов в документ.

Оператор И может быть опущен. Поэтому, например, следующие фразы будут полностью эквивалентны:

ремонт компьютеров  эквивалентно  ремонт и компьютер
ремонт тракторов и телег  эквивалентно  ремонт и трактор и телега

Оператор ИЛИ

Эквивалентные формы записи: или ИЛИ or OR.

Оператор ИЛИ соединяет операнды - слова и/или выражения в скобках. Если оператор соединяет два слова А и B, то фразе А или B будут релевантны документы в которых содержится A или B, или A и B.

Старшинство операторов И и ИЛИ не определено - порядок их выполнения определяется скобками.

Например, рассмотрим запрос:

(ремонт или продажа) и (компьютер или видеотехника)

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

Оператор следования :

Оператор : требует вхождения операндов в одно предложение документа в заданном порядке.

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

(ремонт или продажа) : компьютеров

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

(ремонт или продажа) :2 компьютеров

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

Поиск по полю

Очень часто документы базы данных разделены на поля - самостоятельные логические единицы документа. Например, поле - дата выхода документа, поле - источник, из которого получен документ, поле - заглавие, поле - текст и т. п.

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

Поиск по слову в поле

Для того, чтобы задать поиск по слову (или дате) в некотором поле, надо перед словом указать имя этого поля перед которым стоит знак /. Например,

/ИМП компьютер

означает, что надо искать документы, которые содержат слово компьютер в поле /ИМП (импорт).

Вместо знака / при записи имен полей можно также использовать знак \, что иногда позволяет уменьшить число переключений между регистрами клавиатуры.

Поиск по слову в группе полей

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

/ИМП /ЭКС компьютер

означает, что надо искать документы, которые содержат слово компьютер хотя бы в одном из полей /ИМП (импорт) или /ЭКС (экспорт).

Поиск по фразе в поле/группе полей

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

/ИМП /ЭКС (компьютер или телега)

означает, что надо искать документы, которые содержат хотя бы одно из слов компьютер или телега хотя бы в одном из полей /ИМП (импорт) или /ЭКС (экспорт).

/текст - обобщенное имя полей типа "текст"

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

В языке запросов предусмотрено обобщенное имя поля, которое записывается как /текст или /text и обозначает совокупность всех полей типа "текст". Например, если введен запрос

/текст (сталинградская битва)

то производится поиск документов, которые в полях типа "текст" содержат слова сталинградский и битва.

Обобщенные имена полей введены для удобства многобазового поиска, поскольку в различных базах данных одинаковые по смыслу поля могут иметь разные имена.

/дата - обобщенное имя полей типа "дата"

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

В языке запросов предусмотрено обобщенное имя поля, которое записывается как /дата или /date и обозначает совокупность всех полей типа "дата". Например, если введен запрос

/дата 04.1996-05.1996!д

то производится поиск документов, которые в полях типа "дата" содержат даты в интервале с апреля 1996 г. по май 1996 г.

Обобщенные имена полей введены для удобства многобазового поиска, поскольку в различных базах данных одинаковые по смыслу поля могут иметь разные имена.

Примеры и комментарии

Пример 1.

/^ДТ 08.07.1996!д

Найти документы, у которых в поле ^ДТ (дата) указана дата 8 июля 1996 года.

Пример 2.

/^ЗГ Ельцин /^ТТ визит

Найти документы, у которых в поле ^ЗГ (заглавие) есть слово Ельцин и в поле ^ТТ (текст документа) есть слово визит. Заметим, что писать с большой буквы идентификаторы не обязательно, но полезно, особенно тогда, когда может возникнуть омонимия с обычными словами, например на запрос Лебедь или Орлов не будут выданы документы с упоминанием соответствующих птиц.

Пример 3.

/^ТТ магазины /^ДТ 30.08.1996!д

Найти документы от 30 августа 1996 года, у которых в поле "текст" есть слово магазин.

Пример 4.

/^ТТ (московские магазины) /^ДТ 30.08.1996!д

Найти документы, содержащие в поле "текст" слова московский и магазин и в поле "дата" 30 августа 1996 года.

Пример 5.

/дата 04.1996-05.1996!д /текст (сталинградская битва)

Найти документы, содержащие в обобщенном поле "дата" дату в интервале с апреля 1996 г. по май 1996 г. и в обобщенном поле "текст" слова сталинградский и битва.

Поиск с ограничением контекста

Все запросы, которые рассматривались выше, накладывали условия, относящиеся ко всему документу, т.е. требовалось, чтобы определенные слова появлялись внутри документа, но при этом не накладывалось никаких ограничений на расположение этих слов в документе и на расстояния между ними. Однако, в случае баз данных, содержащих документы значительного объема, это может приводить к тому, что будет найдено слишком много документов (этот эффект известен под названием "поискового шума"). Можно уменьшить этот шум, накладывая дополнительные ограничения на контекст, в котором операнды запроса должны появляться в документе.

Модификаторы

Контекст поиска по фразе запроса всегда подразумевается в пределах поля и может быть определен модификаторами:

Вместо знака / при записи модификаторов можно также использовать знак \, что иногда позволяет уменьшить число переключений между регистрами клавиатуры.

Область действия модификатора в запросе

Модификатор действует в пределах скобок, в которые он заключен. Если таких скобок нет, то модификатор действует в пределах запроса. Поясним сказанное рисунком, используя вместо слов буквы A, B, C, и т.д., и условные модификаторы /a, /b, /c, и т.д.

область действия /a   область действия /b   область действия  
((A B C /a) or (D : E F /b) or ((L or M) and N /c)) /d
область действия /d

Если в пределах одной области действия задано несколько модификаторов /сN или /пN (N - число слов или предложений), то реально действует последний из них.

Примеры и комментарии

Пример 1.

/^ТТ (московские магазины /с3) /^ДТ 30.08.1996!д

Найти документы, содержащие в поле "текст" слова московский и магазин в контексте "три смежных слова" и в поле дата 30 августа 1996 года.

Пример 2.

/дата 04.1996-05.1996!d /текст (сталинградская битва)

Найти документы, содержащие в обобщенном поле "дата" дату в интервале с апреля 1996 г. по май 1996 г. и в обобщенном поле "текст" слова сталинградский и битва в контексте "одно предложение".