Язык запросов. Основные операторы

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

Рассмотрим некоторые правила такого языка на примере сервера Яndex.

Ниже приводятся выдержки из документа

http://www2.yandex.ru:8081/ya_detail.html.

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

Если вы набрали в запросе слово с большой буквы, будут найдены только слова с большой буквы, в противном случае будут найдены как слова с большой, так и с маленькой буквы.

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

По умолчанию поиск учитывает все формы заданного слова согласно правилам русского языка. Однако существует возможность поиска по точной словоформе, для этого перед словоформой надо поставить восклицательный знак '!'. Так, по запросу !Лужкову будут найдены все документы, содержащие словоформу 'Лужкову', а по запросу

Лужков ~~ !Лужкову

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

Несколько набранных в запросе слов, разделенных пробелами, означают, что каждое из них должно входить в один абзац искомого документа. Тот же самый эффект произведет употребление символа &.

Например, при запросе холодная вода (или холодная & вода) результатом поиска будет список документов, в которых в одном абзаце содержатся и слово 'холодный', и слово 'вода'.

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

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

Чтобы подняться на ступеньку выше, от уровня абзаца до уровня документа, просто удвойте соответствующий знак. Одинарный оператор (&, ~) ищет в пределах абзаца, двойной (&&, ~~) - в пределах документа.

Например, по запросу холодная && вода будут найдены документы, содержащие, где бы то ни было, оба эти слова. А запрос квас ~~ теплый выдаст все документы со словом 'квас', но без слова 'теплый'.

Поиск с расстоянием

Как Яndex-Web адресует слова? Если все слова в тексте перенумеровать по порядку их следования, то расстояние между словами a и b - это разница между номерами слов a и b. Таким образом, расстояние между соседними словами равно 1 (а не 0), а расстояние между соседними словами, стоящими "не в том порядке", равно -1. То же самое относится и к абзацам.

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

Если порядок слов и расстояние точно известны, можно воспользоваться пунктуацией /+n. Так, например, задается поиск слов, стоящих подряд.

Запрос холодная /+1 вода означает, что слово 'вода' должно следовать непосредственно за словом 'холодный'. (Кстати, к тому же результату приведет запрос холодная вода).

В общем виде ограничение по расстоянию задается при помощи пунктуации вида /(n m), где n - минимальное, а m - максимально допустимое расстояние. Отсюда следует, что запись /n эквивалентна /(-n +n), а запись /+n эквивалентна /(+n +n).

Запрос «холодная /(-2 4) вода» означает, что 'вода' должна находиться от 'холодный' в интервале расстояний от 2 слов слева до 4 слов справа.

Практически все знаки можно комбинировать с ограничением расстояния.

Например, результатом поиска по запросу холодный ~ /+1 вода будут документы, содержащие слово 'холодный', причем в этих документах слово 'вода' не следует непосредственно за словом 'холодный'.

Когда знаки ограничения по расстоянию стоят после двойных операторов, то употребленные там числа - это расстояние не в словах, а в абзацах. Расстояние в абзацах определяется аналогично расстоянию в словах. Запрос холодная && /1 вода означает, что слово 'вода' должно находиться в том же самом либо в соседнем со словом 'холодный' абзаце.