Язык запросов
Запрос к поисковой машине должен быть сформулирован на понятном ему языке, который называется языком запросов.
Каждый запрос является выражением, состоящим из операндов, операторов, скобок и модификаторов. Скобки используются для указания порядка, в котором будут обрабатываться фразы, составляющие запрос, в то время как модификаторы позволяют задать дополнительные контекстные условия поиска. Можно также указать поля, в которых будет производиться поиск.
Слово
Любое слово естественного языка, на котором написаны документы базы данных, такое, что предположительно оно содержится в документах базы. Важной особенностью поисковой машины является возможность задавать слова в запросе в любой форме (число, падеж, род, склонение/спряжение). Если задать запрос из одного слова, то ему будут соответствовать (будут релевантны) все документы базы данных, в которых содержится это слово.
Пример:
налоги льготы компьютер видео кредитимпексбанк онэксимбанк
Слово с усечением справа
Начало слова естественного языка, замкнутое знаком *. Если задать запрос из одного слова с усечением справа, то такому запросу будут релевантны все документы базы данных, в которых содержатся слова, такие, что начало их нормализованной формы совпадает с усеченным словом запроса.
Пример:
дипломат* осуществл*
Слову запроса дипломат* будут релевантны документы, в которых есть слова дипломат, дипломатия, дипломатический и т.п.
Слово с ограниченным усечением справа
Начало слова, замкнутое знаками !* за которыми следует цифра - допустимое число букв, которое может следовать за общим началом в слове документа.
Пример:
дипломат!*2
Cлову запроса дипломат!*2 будут в документах соответствовать слова дипломат, дипломатия, но не дипломатический.
Слово с усечением слева
Знак *, за которым следует "хвост" нужного слова. Формально слову соответствуют слова в базе данных, имеющие со словом запроса общий конец. Однако
следует иметь в виду, что поиск производится не по текстам, а по словарю базы данных, в котором слова документов нормализованы, поэтому слову с усечением слева могут соответствовать документы,
содержащие заданное слово в других формах (не содержащие слово с заданным "хвостом").
Пример:
*техник
Cлову запроса *техник будут соответствовать документы, содержащие слова радиотехник, техники, техника (родительный падеж слова техник), видеотехника
Неточность поиска с усечением слева также связана с высокой омонимичностью словоформ русского языка. Поэтому усечение слева обычно имеет смысл употреблять только для слов, нераспознаваемых по морфологическому словарю.
Слово с усечением слева и справа
Знак *, за которым следует "середина слова", замыкаемая знаком *, с возможным ограничением "хвоста" (ограниченное усечение справа, описанное выше). Такому слову соответствуют документы, в которых содержатся слова, включающие в себя слово запроса, с учетом ограничения правого усечения. Этот элемент запроса имеет смысл употреблять для поиска морфем (кусочков слова), имеющих самостоятельный смысл, например, фрагменты химических терминов, такие как *гекса*, *хлор* и т.п.
Слово в двойных кавычках
Слово, содержащее специальные знаки (например, скобки), должно быть записано в запросе заключенным в двойные кавычки. В частности, слово не должно записываться как "не", чтобы оно не путалось с оператором НЕ.
Дата
Дата, заданная в запросе, должна быть замкнута комбинацией !д или !d. Это нужно для того, чтобы можно было отличить дату от схожей цифровой комбинации, например, классификационного индекса. Даты можно задавать с точностью до года, месяца и дня.
С точностью до года
Пример:
1990!д
Дате соответствуют документы, в которых есть любые даты, относящиеся к 1990 году.
С точностью до месяца
Пример:
02.1994!д
Дате соответствуют документы, в которых есть любые даты, относящиеся к февралю 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 г. и в обобщенном поле "текст" слова сталинградский и битва в контексте "одно предложение".