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

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

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

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

Операнды

Слово

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

Пример:
налоги льготы компьютер видео кредитимпексбанк онэксимбанк
Слово, написанное с прописной буквы

Такому слову соответствуют все документы базы данных, содержащие это слово, написанное с прописной буквы.

Пример:
Орлов Кузнецов Соловьев
Слово с усечением справа

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

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

Начало слова, замкнутое знаками !* за которыми следует цифра - допустимое число букв, которое может следовать за общим началом в слове документа.

Пример:
дипломат!*2
Cлову запроса дипломат!*2 будут в документах соответствовать слова дипломат, дипломатия, но не дипломатический.
Слово с усечением слева

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

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

Знак *, за которым следует "середина слова", замыкаемая знаком *, с возможным ограничением "хвоста" (ограниченное усечение справа, описанное выше). Такому слову соответствуют документы, в которых содержатся слова, включающие в себя слово запроса, с учетом ограничения правого усечения. Этот элемент запроса имеет смысл употреблять для поиска морфем (кусочков слова), имеющих самостоятельный смысл, например, фрагменты химических терминов, такие как *гекса*, *хлор* и т.п.

Слово в двойных кавычках

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

Дата

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

С точностью до года

Пример:
1990!д
Дате соответствуют документы, в которых есть любые даты, относящиеся к 1990 году.

С точностью до месяца

Пример:
02.1994!д
Дате соответствуют документы, в которых есть любые даты, относящиеся к февралю 1994 года.

С точностью до дня

Пример:
06.02.1994!д

Интервал дат

Пример:
22.06.1941-­09.05.1945!д
Границы дат могут быть заданы с любой точностью. В языке поисковой машины нет операторов поиска по датам "меньше" или "больше" заданной даты. Если требуется найти документы, содержащие даты меньше или больше требуемого значения, то используется интервал с подходящими границами.
Шаблон

Шаблон по которому будут отождествляться слова документа. В шаблоне можно употреблять:

  • любые знаки, из которых состоят слова документов, кроме знаков * и ?
  • знак * обозначающий любую последовательность знаков в слове документа
  • знак ? обозначающий один любой знак документа
Пример:
шевар*надзе, *05-??
Шаблон полезно употреблять, когда нам неизвестно правильное написание слова, или известна только его часть.

Модификаторы элементов запроса

К каждому отдельному слову запроса можно применить модификатор, изменяющий режим поиска этого слова. Модификатор следует непосредственно за словом и начинается знаком "!". Имеются следующие модификаторы: !с !s, !п !p и !т !e (соответственно, кириллический и латинский варианты). В виде модификатора оформляется также ограниченное усечение - !*n, где n - максимальное число усекаемых знаков (букв и/или цифр).

Модификатор !с !s

Если слово запроса замыкается этим модификатором, то релевантные слова документов могут быть написаны неправильно или с опечатками.

Пример:
программа!с
Будут найдены документы, содержащие слова програма, програмам и т.п.
Модификатор !п !p

Если слово запроса замыкается этим модификатором, то релевантными словами документов будут слова, имеющие одинаковый корень с словом запроса.

Пример:
чечня!п
Будут найдены документы, содержащие слова чечня, чеченец, чеченки, чеченский и т.п.
Модификатор !т !e

Этот модификатор определяет поиск точной формы слова.

Пример:
программами!т
Будут найдены документы, содержащие словоформу программами, но не программы. Этот модификатор моделирует отключение морфоанализа.
Модификатор ограниченного усечения !*n

Этот модификатор ограничивает длину "хвоста", отсекаемого при поиске. Заметим, что этот модификатор:

  • Может комбинироваться с усечением начала слова.
  • Работает на нормализованном слове.
Примеры:
*толуол!*2
Будет найдено слово тринитротолуолы, но не тринитротолуолами.
программ!*3
Будут найдены все формы слова программа, но не программирование.

Операторы

Оператор И

Эквивалентные формы записи: и И 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 г. и в обобщенном поле "текст" слова сталинградский и битва.

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

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

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

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

  • как заданное число любых смежных предложений документа - /п /пN /s /sN (формы эквивалентны), где N - число смежных предложений контекста, если N отсутствует, то подразумевается N равное 1 (одно предложение);
  • как заданное число любых смежных слов любого предложения документа - /сN /CN /wN /WN (формы c C w W эквивалентны, N - число смежных слов в контексте, с С - русское "с").

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

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

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

Пример:
((A B C /a) or (D : E F /b) or ((L or M) and N /c)) /d

Наведите курсор мыши, чтобы увидеть область действия модификатора

область действия /a
область действия /b
область действия
область действия /d

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

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

Пример 1
/^ТТ (московские магазины /с3) /^ДТ 30.08.1996!д
Найти документы, содержащие в поле "текст" слова московский и магазин в контексте "три смежных слова" и в поле дата 30 августа 1996 года.
Пример 2
/дата 04.1996-05.1996!d /текст (сталинградская битва)
Найти документы, содержащие в обобщенном поле "дата" дату в интервале с апреля 1996 г. по май 1996 г. и в обобщенном поле "текст" слова сталинградский и битва в контексте "одно предложение".