Последнее обновление 4 декабря 2007 г. С тех пор многое могло измениться.
Материал рассчитан на подготовленного читателя, знающего, что такое стоп-слова, сниппеты и чем '~~' отличается от '&&'. Мне казалось, что это очень небольшая аудитория, однако этот пост неожиданно стал популярным и даже висит в топ-50 ЖЖ-постов, чаще всего заносимых в избранное (
по версии lj+).
В первую очередь читайте весьма толковую
официальную документацию. Этот текст ее ни в коем случае не заменяет, а исправляет и дополняет.
Зачем такие навороты?
В 90% случаев я делаю самые обычные запросы из нескольких ключевых слов. Однако бывает, что применение даже одного «навороченного» оператора существенно улучшает выдачу, иногда нужно получить «дистиллированные» результаты (скажем, для отслеживания публикаций о компании). Кроме того, эта статья поможет вам научиться контролировать выдачу, понимать, что именно находит Яндекс по вашему запросу (или почему не находит), и приведет к более глубокому пониманию методов поиска.
Ну, поехали.
Нестрогие соответствия
Это самый серьезный баг в нынешнем Яндексе (и, пожалуй, за всю его историю). К сожалению, он тянется еще с весны 2007 г.
Беру первый попавшийся запрос из «прямого эфира» '
диски для toyota land cruiser' и смотрю топ-20 результатов. Одиннадцать из них заведомый мусор, поскольку в них нет (смотрю в кэше, разумеется) слова «диски». То есть Яндекс самовольно решил исключить слово из запроса. Эти неправильные результаты идут вперемешку с нормальными и внешне никак от них не отличаются.
Раньше такие результаты выдавались с пометкой «нестрогое соответствие» (пометка исчезла весной 2007 года) и только после нормальных результатов (от этого отказались осенью 2007 года). Так что не удивляйтесь, если в найденном документе «почему-то» не будет каких-то слов из запроса, иногда ключевых.
Избавиться от «нестрогих соответствий» можно двумя способами:
А. Поставить перед каждым словом '+'. Но при этом может измениться сортировка результатов.
Б. Минимизировать нестрогие соответствия запросом вида '(запрос из нескольких слов)//1'. Сравните, скажем, '
диски для toyota land cruiser' и '
(диски для toyota land cruiser)//1'. К сожалению, не всегда срабатывает.
Про (запрос из нескольких слов)//N стоит сказать понятней, чем в официальной документации. Оператор используется только для «нестрогих соответствий». По умолчанию N=6. Чем больше N тем больше будет найдено результатов с «нестрогим соответствием» (понятно, за счет того, что на страницах будет присутствовать все меньше слов из запроса). Соответственно, чем меньше N, тем меньше результатов. При N=1 нестрогие соответствия вроде как минимизируются увы, не всегда исключаются.
Учет стоп-слов
Яндекс учитывает стоп-слова (предлоги, местоимения, частицы и пр.) только в запросах из трех и менее слов. Если стоп-слово должно быть в результате, поставьте перед ним '+'. Запрос '
+не работает windows xp' позволит найти больше соратников по несчастью, чем
'
не работает windows xp'.
Расстояние между словами
Почему-то многие, даже продвинутые пользователи, недооценивают эту возможность. А зря.
В общем виде расстояние между словами задается оператором вида '/(n m)' (n минимальное, m максимальное расстояние между словами). На практике в общем виде почти не используется. Вместо него используются запросы вида '
кубок /5 (яндекса | поиску)' (= слово «яндекса» или «поиску» находится на расстоянии пяти слов от слова «кубок» находит «кубок яндекса», «Кубок главы города Перми по поиску в Интернете», «Яндекс успел вывесить анонс Восьмого кубка» и т. п.
Кроме того, весьма распространены запросы с жестко заданным расстоянием. Область их применения разнообразна:
- Самый полный словарь синонимов. Запросы вида '!надеемся +на /+2 !сотрудничество' (= «надеемся на какое-то_слово сотрудничество») выдадут все варианты слов, которые сюда подставляют. Чтобы поймать редко используемые синонимы, исключайте частые варианты оператором '~'.
- Отчество и второе имя. 'максим /+2 галкин', 'памела /+2 андерсон' релевантность зашкаливает.
- Дата рождения. Как там обычно пишут? «Иванов Иван Иваныч родился 1 января 1951 года». Считаем слова от «родился» до «года», получаем схему, которую можно применить к кому угодно: '!платон родился /+4 !года'.
- И т.п.
К сожалению, поиск с жестко заданным расстоянием поломался, и даже приведенные примеры сейчас работают некорректно.
То же самое слово
Частный случай оператора расстояний '/+0' (буквально то же самое слово) тоже очень полезен.
Во-первых, с его помощью можно проверять работу морфологического модуля Яндекса. Например, '
бруля /+0 брули' ага, Яндекс знает, что это формы одного слова. Убеждаемся, что форма
!бруля есть в Сети, ставим в начальную форму, проверяем:
!!бруль /+0 !бруля действительно, «бруля» это, с точки зрения Яндекса, форма слова «бруль». Аналогично,
«тест» форма слова «тесто», но
никак не наоборот.
Во-вторых, '/+0' полезен для исключения какой-то формы слова. Скажем, чтобы найти все формы слова «женить», исключая все формы слова «Женя», можно использовать запрос '
женить ~ !!женя' но такой вариант исключит также результаты, где слова «женить» и «женя» встречаются в одном предложении. Правильный запрос '
женить ~ /+0 !!женя'.
Словосочетания
Официальная документация сообщает, что «порядок слов можно указать с помощью запроса в кавычках». Это не так: кавычки также задают и форму слов. То есть запросом
"красными шапочками" вы "красную шапочку" не найдете.
Отношение Яндекса к словам в кавычках неоднократно менялось: когда-то требовалось совпадение формы, потом учитывался только порядок слов, затем форма учитывалась, если в запросе было только словосочетание в кавычках и больше ничего. Думаю, это еще далеко не конец.
В общем случае, если вам важен порядок слов и не важна их форма, используйте оператор расстояния '/+1' его действие на протяжении лет не менялось. Так, '
"умная хороший мальчики"' 0 результатов, а '
умная /+1 хороший /+1 мальчики' ищет все формы этих слов и находит множество страниц со словосочетанием «умный хороший мальчик».
Наличие заданного слова в сниппетах
'слово_в_сниппетах << (остальная_часть_запроса)'. Скобки обязательны. Например, '
сайт << (лебедев)' в сниппетах обязательно будет присутствовать слово «сайт».
На самом деле оператор работает несколько по-другому. Подробно объяснять не буду, но важно знать, что часть запроса справа от '<<' не влияет на релевантность. Так что используйте этот оператор, только когда наличие слова в сниппетах перевешивает потерю релевантности.
Примечание. До того как этот оператор стал известен, приходилось использовать
оригинальный метод Александра Садовского: '
сайт ~~ (сайт ~~ лебедев)'. Здесь обязательно сделайте паузу и оцените красоту решения.
Как трактуется пробел близко и далеко
Цитата из официальной документации: «Яндекс хорошо понимает запросы из нескольких слов и способен самостоятельно их интерпретировать. Он знает, в каких случаях надо искать страницы, в которых слова запроса расположены рядом, а когда достаточно словам встретиться в одном документе, чтобы страница хорошо соответствовала запросу».
Означает это следующее. Когда вы делаете запрос '
кубок яндекса финал', Яндекс трансформирует его примерно в '
кубок & яндекса &&/7 финал': он ищет в одном предложении слова «кубок» и «яндекс», и на расстоянии не более семи предложений от них должно находиться слово «финал».
Обычно на этот механизм определения «связанности» слов можно положиться и просто разделять слова в запросе пробелами. Однако периодически он подводит, и приходится явно указывать Яндексу, хотите вы увидеть слова в пределах предложения (оператор '&') или им достаточно встретиться на одной странице (оператор '&&').
Раньше можно было узнать, как Яндекс трактовал пробелы в каждом запросе. Увы, осенью 2007 г. эту возможность убрали.
Долгие годы пробелы рядом со скобками и кавычками автоматически трактовались как '&'. Сейчас эта ошибка исправлена, и ответить на вопрос второго тура VIII Кубка Яндекса найти открытку "Спокойной ночи" (Везенбергъ и Ко)
не очень сложно.
Примечание. В документации
сообщается, что «не очень далеко» на странице
расширенного поиска это поиск на расстоянии в несколько предложений. На самом деле такой вариант отдаст пробелы на откуп обработчику связанности слов, то есть, строго говоря, слова могут быть найдены и очень далеко друг от друга.
Исключение слова
Глюки. При использовании операторов исключения меняется порядок результатов в выдаче, даже если вы исключаете несуществующее слово: сравните '
компьютер' и '
компьютер ~ гывлсзырмзов'. Что интересно, новый вариант сортировки будет уже внутренне логичный, и в нем операторы исключения будут работать аккуратно, выбрасывая из выдачи ненужные результаты, при этом не меняя порядок остальных. Сравните '
компьютер ~ гывлсзырмзов' и '
компьютер ~~ журнал'.
Цифры
Когда речь заходит о цифрах, Яндекс забывает, что он поисковик, и начинает себя вести словно какой-то Microsoft Excel. Так, запросы '
107 0000' (скорее всего, ищется телефон) '
107 000' (очевидно, количество), '
107 00' (часто цена), '
107,0' (похоже на частоту радиостанции) для Яндекса эквивалентны. Совпадение «числоформы» в запросе и в тексте, увы, даже не влияет на ранжирование. Оператор '!', как и полагается, позволяет искать точную «числоформу» '
107 !0'.
Если ищете даты или дробные числа, учтите, что для Яндекса '
17 01 2003' (ищет также «17-01-2003», «17/01/2003»
) и '
17.01.2003' разные запросы.
Поиск спецсимволов
Нет, '
C#' и '
C++' Яндекс не ищет и искать в ближайшее время не собирается.
Используйте Google.
Транслитерация
Какая разница между словами «хоровод» и «xopoвog»? Она почти не видна, но первое слово написано по-русски, а во втором только одна русская буква 'в', остальные же написаны латинским шрифтом.
Яндекс учитывает «взаимозаменяемость» некоторых английских и русских букв, поэтому:
1. Оба запроса дадут почти на 100% одинаковые результаты: '
хоровод' и '
xopoвog'. В запросе из одного слова приоритет отдается точной форме (т.е. если в запросе латиница, то и первые результаты будут с ней); результаты запросов из двух и более слов идентичны, вне зависимости от написания.
2. Оба запроса найдут страницы как с русским «хороводом», так и составленным частично из английских букв (отсюда вывод: иногда Яндекс может найти слово на странице, а Ctrl-F нет).
Яндекс «транслитерует» слова, в которых есть хотя бы одна русская буква (
noдapok полужирным выделены латинские буквы). Яндекс НЕ транслитерует слова:
1) в которых все буквы английские: '
nogapok' (включая и слова, состоящие из одной буквы: '
мне хорошо c тобой');
2) в которых есть хотя бы одна цифра: '
подарок1' и '
nодарок1'. «0» (цифра) и «О» (буква) почему-то
не взаимозаменяемы. Яндекс транслитерует только в русскую сторону, поэтому '
samsunд' ничего не найдет.
Украинская «і» (
радіємо) и английская «i» (
радiємо) транслитеруются.
Если вам не нужна транслитерация, используйте '!': '
!поgарок'.
Поиск по маске
Яндекс не ищет слова с пропущенными буквами, как-то 'Ян?екс' или 'Янде*'. Илья Сегалович примерно в 2003 г. обещал подумать об этом и
все еще обещает.
Единственное исключение поиск адреса (только для неизвестного окончания) и его вариации.
1. Поиск доменов
domain="ya*"
2. Поиск авторов в Яндекс.Блогах
author="kub*"
3. Поиск ссылок там же
link="www.livejournal.com/community/kubok/458*"
4. И т.п.
Поиск в элементах
Читайте оригинальную документацию. К ней есть лишь пара замечаний.
Со служебными операторами можно обращаться точно так же, как и со словами: к ним применимы операторы расстояния, "ИЛИ", "НЕ" и другие; с ними можно строить сколь угодно сложные запросы. Скажем, запрос '
$title ("англо русский") (domain="forum*" | $title (форум|forum))' прекрасно находит англо-русские форумы.
Отделяйте операторы поиска в элементах от слов запроса символами '<<'. Сравните '
unix rhost="ru.narod.*"' и '
unix << rhost="ru.narod.*"'.
Поиск на заданном сайте
Есть три основных способа поиска на сайте:
- оператор 'url="адрес*"' в строке поиска (или аналогичный host="адрес*");
- страница расширенного поиска (или аналогичный по действию параметр 'surl=адрес' в адресной строке, или через форму «Проверить сайт»);
- параметр 'serverurl=адрес' в адресной строке.
Как ни смешно, все три приводят к разным результатам. Главное отличие это отношение каждого способа к поддоменам, «зеркалам» и адресу сайта с / без 'www'. Где будет искать Яндекс, если указать 'www.artlebedev.ru'? А если 'artlebedev.ru'? А если 'design.ru'? А если '
vilka.ru'?
Иллюстрирующая табличка, с гуглевым 'site:' для сравнения.
www.artlebedev.ru artlebedev.ru design.ru vilka.ru
Оператор url
есть, нужен еще один клик
Находит сайты вида artlebedev.rutube.ru
Находит сайты вида design.rusmedserv.com
нет
Страница расширенного поиска
есть есть, также находит поддомены artlebedev.ru Находит поддомены сайта design.ru
нет
Параметр serverurl
есть есть
Находит результаты с сайта artlebedev.ru Находит результаты с сайта artlebedev.ru
Google, оператор site:
есть есть, также находит поддомены artlebedev.ru
Находит поддомены сайта design.ru Ухитрился что-то найти на vilka.ru
Как видите:
- Оператор url для поиска по сайту плохо подходит, к тому же каждый раз нужно переходить по ссылке «еще с сайта».
- serverurl и страница расширенного поиска хорошо дополняют друг друга, так что для полноты рекомендуется применять их одновременно.
- Поиск по сайту у Google примерно аналогичен поиску по сайту через страницу расширенного поиска у Яндекса.
Поиск на нескольких сайтах.
Помимо очевидного '
работа && (url="www.ko.by*" | url="www.superjob.ru*")' можно использовать параметр serverurl в адресной строке. Адреса сайтов не более 10, остальные игнорируются
перечисляются через запятую.
Разное
«Найдётся всё»
По умолчанию Яндекс исключает из выдачи страницы-дубли, очень похожие на другие. Если вам нужны все результаты (скажем, ищете все ссылки на свой блог или все страницы со старым телефонным кодом Москвы на своем сайте), добавьте к адресу выдачи '&rd=0' (rd, надо полагать Remove Duplicates). Например,
http://www.yandex.ru/yandsearch?text=%21095&surl=yandex.ru&rd=0.
«Найден по ссылке»
Примечание «найден по ссылке» в результатах означает, что на самом сайте слова из запроса не были найдены, зато на него кто-то такими словами ссылается. Кто именно, узнать
уже нельзя.
Для таких документов Яндекс не выдает ссылку на сохраненную копию:
Самый простой способ все-таки получить ссылку на кэш сделать еще один запрос, в котором искать на странице, найденной по ссылке, слово, которое там точно есть (скажем, ее заголовок).
Пример.
Параллельный поиск
Не все знают: табы «Новости», «Маркет», «Адреса», «Словари», «Блоги», «Картинки» выделяются черным цветом, если результаты в них есть, и серым если результатов нет. Это
теоретически, на самом деле черно-серое кодирование включается, только когда вы ищете во вкладках «Везде», «Новости» или «Картинки», и часто показывает неправильно, так что в данный момент является глубоко бессмысленной фичей. Обещают починить.
Поиск по сайтам каталога
В
каталоге Яндекса разложены по тематикам десятки тысяч сайтов, но поиск почему-то предоставляется только по описаниям сайтов, им же сделанным.
Чтобы полноценно искать на сайтах определенной рубрики, сделайте запрос вида: 'запрос << cat=(CATID)', где CATID = 9000000 + номер рубрики. Вот
список рубрик и их номера (структуру же рубрик можно посмотреть в самом каталоге).
Например, '
юрист << cat=(9000025)' поиск слова "юрист" на сайтах, входящих в рубрику "Высшее образование" (№ 25) Яндекс.Каталога. В выдаче показывается категория каждого сайта. Легко заметить, что там указывается не "Высшее образование", а "Гуманитарные вузы", "Студенческая жизнь" или даже "Работа" очевидно, поиск идет также по всем вложенным и второстепенным категориям. Одному сайту может быть присвоено несколько категорий, и, насколько я знаю, запросы вида '
cat=(9000068)' единственный способ получить полный список сайтов категории.
Яндекс.XML
Яндекс.XML позволяет вам делать автоматические запросы к Яндексу (не более 1000 в день) и самостоятельно обрабатывать результаты.
Зачем нужен (мне, по крайней мере):
1. Делать одновременно запросы в другие поисковые системы и объединять их выдачи.
2. Применять свой синтаксис, чтобы все основные операторы можно было набирать в русской раскладке.
3. Создать в Яндексе аналог
оператора диапазона из Google заменять '1930..1940' на '(1930|1931|1932|1933|1934|1935|1936|1937|1938|1939|1940)'. Для небольших диапазонов сойдет.
4. Сделать собственный дизайн выдачи. В нынешней яндексовской, на мой взгляд,
много недостатков.
5. Выдавать ссылки на кэш для документов, найденных по ссылке.
6. Выводить несколько страниц с каждого найденного сайта.
И еще много чего по мелочи.
Если вдруг решите использовать Яндекс.XML вместо основного Яндекса, учтите, что, во-первых, их выдачи слегка различаются, во-вторых, в Яндекс.XML не работает параметр maxpassages, и больше двух сниппетов вам не покажут.
Задание для самостоятельной работы
Мальчик Денис хочет найти ссылки на свой ЖЖ в блогах и форумах. Полученным запросом он хочет поделиться с друзьями, чтобы они тоже могли найти ссылки на себя. Денис подумал и сделал
вот такой запрос. Внесите в него минимум три улучшения. (
Ответ)
Послесловие
Нет, я не работаю в Яндексе и понятия не имею, что у него внутре, хотя подозреваю, что без неонки и думателя таки не обошлось.
Яндекс отличный поисковик.
Большое спасибо всем, кто так или иначе помог в работе над документацией: Илья Сегалович, Александр Садовский, Роман Иванов (все компания «Яндекс»), Максим Сидоров, Евгений Ющук, Евгений Трофименко.
Еще раз, документация ни в коем случае не заменяет имеющуюся, а призвана ее исправить и дополнить.
Приведенная документация не является истиной в последней инстанции. «Истину вам предстоит найти самому» ©