Запрос к ИПС Артефакт должен быть сформулирован на понятном ему языке, который называется языком запросов.
Каждый запрос является выражением, состоящим из операндов, операторов, скобок и модификаторов. Скобки используются для указания порядка, в котором будут обрабатываться фразы, составляющие запрос, в то время как модификаторы позволяют задать дополнительные контекстные условия поиска. Можно также указать поля, в которых будет производиться поиск.
Примеры:
налоги льготы компьютер видео кредитимпексбанк онэксимбанк
Примеры:
Орлов Кузнецов Соловьев
Примеры:
дипломат* осуществл*
Слову запроса дипломат* будут релевантны документы, в которых есть слова дипломат, дипломатия, дипломатический и т.п.
Например, слову запроса дипломат!*2 будут в документах соответствовать слова дипломат, дипломатия, но не дипломатический.
06.02.1994!д
22.06.194108.05.1945!д
Границы дат могут быть заданы с любой точностью. В языке ИПС Артефакт нет операторов поиска по датам "меньше" или "больше" заданной даты. Если требуется найти документы, содержащие даты меньше или больше требуемого значения, то используется интервал с подходящими границами.
В шаблоне можно употреблять:
Шаблон полезно употреблять, когда нам неизвестно правильное написание слова, или известна только его часть.
Например: шевар*надзе, *05-?? и т.п.
Эквивалентные формы записи: и И 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 г. и в обобщенном поле "текст" слова сталинградский и битва в контексте "одно предложение".