Пишет Denis (
liveuser) в
kubok Хозяйке на заметку
Материал рассчитан на подготовленного читателя, знающего, что такое стоп-слова и операнды, чем '~~' отличается от '&&' и зачем их использовать. То есть на очень небольшую аудиторию. Полагаю, до конца дочитают только редкие энтузиасты и не менее редкие разработчики Яндекса. :-)
Документация ни в коем случае не заменяет имеющуюся, а призвана ее исправить и дополнить. В отличие от официальной, она включает также разбор глюков и особенностей поиска, что поможет вам наконец-то ответить на вопрос «Блин, ну почему он не находит?» и найти несмотря ни на что.
Официальная документация по поиску в Яндексе:
- Основная, весьма толковая.
- Документация к Яндекс.Server. Там есть несколько дополнительных операторов (не все работают в «большом» Яндексе).
Наличие заданного слова в результатах
Если какие-то слова должны быть в результатах, поставьте перед ними '+'.
Зачем. 1. Помогает со стоп-словами. Сейчас Яндекс, кажется, учитывает стоп-слова только в запросе из трех и менее слов (даже не операндов!). '
+не покупай (samsung|lg)' позволит найти негативные отзывы о продукции этих фирм (сравните с простым '
не покупай (samsung|lg)').
2. Помогает в случае «нестрогих соответствий». Запрос '
индустриализация кемпинг ацтеки психоаналитик афтар' предлагает страницы, на которых отсутствуют некоторые (на усмотрение Яндекса) из заданных слов. Если вы хотите, чтобы слово «ацтеки» обязательно присутствовало на найденных страницах, то запрос должен быть '
индустриализация кемпинг +ацтеки психоаналитик афтар'.
Исключение слова
'~' и '~~' перед словом. Первый оператор следит, чтобы слова не было в пределах предложения, второй - чтобы его не было во всем документе.
Примечание к документации. Яндекс предлагает использовать '-'. На мой взгляд, предпочтительней использовать '~~', поскольку он логичнее выглядит в паре с '~' и исключает стоп-слова (сравните, например: '
иду шагаю москве -по' и '
иду шагаю москве ~ +по').
Исключая стоп-слова, не забудьте ставить перед ними '+', иначе можете наткнуться на
глюк.
Решение проблемы омонимии
Слово употребить в начальной форме и поставить перед ним '!!'. Например, '
!!дело рыбака'.
Зачем. Яндекс сознательно «путает», например, существительные 'дело' и 'день' - из-за глагола 'деть', который может принимать обе эти формы (что сделать? - деть, что сделало? - дело, что сделай? - день). Теоретически, приоритет должен даваться точной словоформе, но это почему-то не всегда срабатывает. Поэтому на запрос '
дело рыбака' вы получите сплошной «день рыбака». А вот на '
!!дело рыбака' - все формы именно этих слов.
Особенности. 1. Хитрый механизм при исключении форм слова. Например, по запросу '
лужков ~~ !!лужков' Яндекс все-таки найдет слово «Лужков», но при этом обязательно на странице будет присутствовать и другая форма слова «лужок».
2. Если одна из форм нужного слова одновременно является формой другого, приходится действовать исключением. Например, поискав '
женить', вы найдете также множество «Женю», «Женя» и «Жени». Запрос '
!!женить', понятно, не поможет от них избавиться. Поэтому исключать Евгения придется буквально: все формы слова «женить», кроме всех форм слова «женя» - '
женить ~~ !!женя'.
Глюки. Увы, небольшой беспорядок в словаре Яндекса. Например, слово «режим» Яндекс почему-то считает формой слова «резать»: '
!!резать видео'. И если наличие «режим» еще как-то можно оправдать безграмотностью создателей страниц, которые иногда именно так и пишут, то наличие «режимы» как формы слова «резать» - целиком на совести Яндекса.
Примечание. Если слово употреблено не в начальной форме и тем более не образует производных, то '!!' будет примерно равно '!'. Пример: '
!!выдавала' и '
!выдавала'.
Большие и маленькие
(спасибо
mackseem)
Всегда пишите все слова в запросе с маленькой буквы - не ошибетесь.
И вот почему.
Особенности. Слово, написанное большими буквами («НОУТБУК»), трактуется, как написанное маленькими, - как в запросе, так и на проиндексированных страницах. Т.е. для Яндекса «НОУТБУК» - это «ноутбук», а не «Ноутбук». Как следствие, запросом «купить Ноутбук» вы страницу с НОУТБУК'ом не найдете. Сравните, например, '
Олег Слепынин' и '
олег слепынин'.
Печальная новость для товарных знаков: запрос 'Артлебедев' не найдет 'АртЛебедев'-а (в слове присутствуют другие заглавные буквы). Сравните '
система Adriver' и '
система adriver' (попутно обратите внимание, как на сайте обычно пишут название системы).
Глюки. Яндекс дополнительно выдает документы, найденные по ссылке, при этом регистр букв игнорирует (
пример).
Поиск слов в одном предложении
'&' между словами. Пример: '
фотография & андерсон & джоли'.
Ошибки в документации. Яндекс уверяет, что «несколько набранных в запросе слов, разделенных пробелами, означают, что все они должны входить в одно предложение». Однако это уже давно не так: «Пробел между словами запроса означает, что слова должны находиться „не очень далеко“ друг от друга. Яндекс пытается определить, насколько тесно слова запроса связаны между собой. Сильно связанные слова ищутся в пределах одного предложения, менее тесно связанные слова - на расстоянии в несколько предложений и, наконец, несвязанным словам достаточно встретиться на одной странице, чтобы она была сочтена соответствующей запросу». К сожалению, и этот принцип соблюдается не всегда (см. ниже).
Поиск слов на одной странице
'&&' между словами. Применяется весьма часто.
Зачем.
1. Максимальное количество результатов. Пример: '
фотография && андерсон && джоли'.
2. «Уточнение» запроса. Пример: '
ремонт мобильный телефон && samsung && руб'.
3. Избавление от глюка, когда при использовании языка запросов Яндекс начинает искать слова в одном предложении (см. ниже). Пример: '
(atmark|colorshift) && удобная'.
Любое из слов
Скобки и '|' между словами: '
(фото|фотография|фотоснимок|снимок) андерсон'.
Глюки. Если в запросе есть «ИЛИ», Яндекс начинает считать, что пробел - это поиск слов в одном предложении. Например, запросы '
(atmark|colorshift) удобная' и '
(atmark|colorshift) & удобная' эквивалентны, оба приводят к одинаковым результатам - нестрогим соответствиям. Сравните с '
atmark удобная' и '
colorshift удобная'.
Наличие заданного слова в сниппетах
'слово_в_сниппетах << (остальная_часть_запроса)'. Например, '
сайт << лебедев' - в сниппетах обязательно будет присутствовать слово «сайт».
Пример посложнее. Скажем, нужно найти резюме жителей Москвы со знанием французского языка, имеющих опыт работы с Windows, Linux и ЛВС. При этом уровень знания французского языка имеет первостепенное значение.
Строим исходный запрос - '
$title(резюме) && +(москва | !095) && +французский && +лвс && +linux && +windows'. Яндекс выбирает слова для сниппетов как скрипт на душу положит, и слово «французский» попадает в них редко - придется открывать все страницы.
А можно и не открывать, а воспользоваться оператором '<<'. '
+французский << ($title(резюме) && +(москва | !095) && +лвс && +linux && +windows)'
Примечания. Спасибо Яндекс.Блогам, в которых впервые упоминается оператор '<<', хоть и совершенно в другом контексте. Ранее приходилось использовать
оригинальный метод
sadovsky: 'слово_в_сниппетах ~~ (слово_в_сниппетах ~~ (остальная_часть_запроса))' (здесь обязательно сделайте паузу и оцените красоту решения). Например,
сайт ~~ (сайт ~~ лебедев)'.
На самом деле, оператор работает несколько по-другому, однако побочный эффект - наличие слова в сниппетах - куда важнее его истинного предназначения.
Расстояние между словами
Почему-то многие, даже продвинутые пользователи, недооценивают эту возможность. А зря.
В общем виде - оператор вида '/(n m)' (n - минимальное, m - максимальное расстояние между словами). На практике в общем виде почти не используется. Вместо него используются запросы вида '
поставщики /2 кофе' (= слова либо идут подряд, либо через одно, неважно в каком порядке) - находит «поставщиков кофе», «поставщики пьют кофе», «кофе для поставщиков» и т. п.
Кроме того, весьма распространены запросы с жестко заданным расстоянием. Область их применения разнообразна:
Как ни странно, применение есть даже у /+0 (буквально - то же самое слово). С его помощью можно проверять работу морфологического модуля Яндекса. Например, '
бруля /+0 брули' - ага, Яндекс знает, что это формы одного слова. Убеждаемся, что форма
!бруля есть в Сети, ставим в начальную форму, проверяем:
!!бруль /+0 !бруля - действительно, «бруля» - это, с точки зрения Яндекса, форма слова «бруль». Аналогично,
«тест» - форма слова «тесто», но
никак не наоборот.
Глюки. '
владимир /+0 путин' и иже с ним.
Устойчивые словосочетания
Словосочетание в кавычках. Пример: '
"красная шапочка"'.
Особенности. Какой порядок слов в кавычках - в таком и будет искать Яндекс. Если в запросе, кроме словосочетания в кавычках, ничего нет - будет искать и в той же словоформе. Сравните
"красными шапочками" и
"красными шапочками" ~~ зелеными Глюки. Как и в случае с «ИЛИ», Яндекс в запросе с кавычками начинает считать, что пробел - это поиск слов в одном предложении. Сравните
"старик хоттабыч" терминатор и
старик /+1 хоттабыч терминатор.
Устойчивые словосочетания с разными словоформами
'/+1' между словами (это частный случай использования оператора расстояния между словами).
Так, '
"умная хорошая мальчики"' - 0 результатов, а '
умная /+1 хорошая /+1 мальчики' ищет все формы этих слов и находит множество страниц со словосочетанием «умный хороший мальчик».
Числа
К «словоформам» добавились «числоформы»: запрос '
03' найдет «3», «03», «003» и т. д. Оператор '!', как и полагается, позволяет искать точную «числоформу».
'
17 01 2003' (ищет также "17-01-2003", "17/01/2003") и '
17.01.2003' - разные запросы.
Глюки. Совпадение «числоформы» в запросе и в тексте, увы, не влияет на ранжирование. Запросы '
107 0000' (скорее, всего, ищется телефон) '
107 000' (очевидно, количество),
107 00 (часто цена),
107,0 (похоже на частоту радиостанции) для Яндекса эквивалентны.
Нафиг не надо
Лично мне лет за 6 не пригодились ни разу:
- Общий случай оператора расстояния между словами: '/(n m)'.
- Исключение порядка слов: 'вакансии ~ /+1 студентов'.
Заявлено, но не работает
Операторы веса и уточнения запроса: 'поисковые механизмы:5', 'компьютер <- телефон'.
Звучит заманчиво, но первое не работает, а принцип действия второго непонятен. Поэтому не использую.
Поиск спецсимволов
Нет, '
C#' и '
C++' Яндекс не ищет и искать в ближайшее время не собирается. Google is your friend.
Символ '№' Яндекс то игнорирует, то автоматически переводит в 'N'. Поэтому лучше '№' вообще не использовать.
Поиск по маске
Яндекс не ищет слова с пропущенными буквами, как-то 'Ян?екс' или 'Янде*'. Единственное исключение - поиск адреса (только для неизвестного окончания) и его вариации.
1. Поиск доменов -
domain="ya*" 2. Поиск авторов в Яндекс.Блогах -
author="kub*" 3. Поиск ссылок -
link="www.livejournal.com/community/kubok/458*" 4. И т.п.
Транслитерация
(спасибо
maksa)
Какая разница между словами «хоровод» и «xopoвog»? Она почти не видна, но первое слово написано по-русски, а во втором только одна русская буква - 'в', остальные же написаны латинским шрифтом. Яндекс учитывает «взаимозаменяемость» некоторых английских и русских букв, поэтому:
1. Оба запроса дадут почти на 100% одинаковые результаты: '
хоровод' и '
xopoвog'
2. Оба запроса найдут страницы как с русским «хороводом», так и составленным частично из английских букв (отсюда вывод: иногда Яндекс может найти слово на странице, а Ctrl-F - нет, в Кубке был такой случай). По ссылке «Найденные слова» транслитерованные слова не подсвечиваются.
Следующие буквы взаимозаменяемы (полужирным выделены английские): e - е - ё, a - а, В - В (только прописные), c - с, e - е, g - д (только строчные), k - к, n - п (только строчные), o - о, p - р, u - и (только строчные), x - х, y - у.
Яндекс «транслитерует» слова, в которых есть хотя бы одна русская буква (
noдapok)
Яндекс НЕ транслитерует слова: 1) в которых все буквы английские: '
nogapok' (включая и слова, состоящие из одной буквы: '
мне хорошо c тобой'); 2) в которых есть хотя бы одна цифра: '
подарок1' и '
nодарок1'.
Если вам не нужна транслитерация, используйте '!': '
!поgарок'.
Особенности. 1. Не взаимозаменяемы: «
0» (цифра) и «О» (буква). Украинская «і» (
радіємо) и английская «i» (
радiємо).
2. Яндекс транслитерует только в русскую сторону. Поэтому '
samsunд' ничего не найдет.
3. В запросе из одного слова приоритет отдается точной форме (т.е. если в запросе латиница, то и первые результаты будут с ней); результаты запросов из двух и более слов идентичны, вне зависимости от написания.
Поиск в элементах
Читайте оригинальную документацию. К ней есть только несколько замечаний.
Поиск на заданном сайте
Есть три основных способа поиска на сайте:
- оператор '#url="адрес*"' в строке поиска (или аналогичный #host="адрес*");
- страница расширенного поиска (или аналогичный по действию параметр 'surl=адрес' в адресной строке);
- параметр 'serverurl=адрес' в адресной строке (или через форму «Проверить сайт»).
Как ни смешно, все три приводят к разным результатам. Главное отличие - это отношение каждого способа к поддоменам, «зеркалам» и адресу сайта с / без 'www'. Где будет искать Яндекс, если указать 'www.artlebedev.ru'? А если 'artlebedev.ru'? а если 'design.ru'? А если
vilka.ru?
Иллюстрирующая табличка.
www.artlebedev.ruartlebedev.rudesign.ruvilka.ruОператор #url
есть, нужен еще один клик
нетНаходит сайты вида design.rusmedserv.comнетСтраница расширенного поиска
естьесть, также находит поддомены artlebedev.ruНаходит поддомены сайта design.ruнетПараметр serverurl
естьестьНаходит результаты с сайта artlebedev.ruНаходит результаты с сайта artlebedev.ruВдобавок, для другого сайта плюсы и минусы могут стоять совершенно в других местах. Поэтому часто приходится перебирать все три варианта.
В первом способе каждый раз нужно переходить по ссылке «еще с сайта» (удобно при поиске картинок, неудобно при обычном поиске).
Поиск на нескольких сайтах. Помимо очевидного '
работа && (#url="www.ko.by*" | #url="www.superjob.ru*")' можно использовать параметр serverurl в адресной строке. Адреса сайтов - не более 10 -
перечисляются через запятую.
Что интересно, во втором случае Яндекс выдаст список страниц, по-видимому, отсортированных так же, как и в основной выдаче. Поэтому можно сравнивать группу сайтов, узнавая, кто (и насколько страниц) выше по определенным ключевым словам.
Следствие. Хотите узнать, входит ли ваш сайт www.centrprofit.ru хотя бы в число первых 500 результатов по запросу 'подбор персонала'? Нет проблем. Делаем запрос
подбор персонала и смотрим, кто на 500-м месте. Ага, www.dnemsognem.ru (сейчас, скорее всего, другой сайт). Теперь сравниваем эти два сайта.
yandex.ru/yandsearch?serverurl=www.dnemsognem.ru,www.centrprofit.ru&text=подбор+персонала. Ну, какой из этих сайтов стоит выше в выдаче? Вот то-то.
Но, напоминаю, совпадение сортировки в группе сайтов и в общей выдаче - только гипотеза, требующая более внимательного изучения.
Особенности и глюки про поиске картинок. Поведение Яндекса здесь весьма оригинальное. Можно предположить, что по запросу '
#url="www.toster.ru*"' вы получите все картинки, размещенные на этом сайте. Это не совсем так. Т. е. картинки эти вы получите, но с небольшим довеском.
В качестве одного из аспектов отсечения дубликатов Яндекс для каждой картинки хранит список URL’ов, по которым она доступна. Когда вы требуете картинки с определенным URL’ом, то Яндекс ищет его по этому списку, но забывает учесть при выдаче результатов. Это приводит к тому, что Яндекс может найти картинки, которые и не расположены на toster.ru, и не загружаются с toster.ru. А находит он картинки, скопированные с него и размещенные на других сайтах (или наоборот, картинки, которые «Тостер» скопировал с других сайтов).
Поиск по частям домена
'rhost' - ищет по заданной доменной зоне.
Пример использования: '
#rhost="ru.narod*"' (обратите внимание на обратный порядок слов) - все сайты с адресом вида имя_сайта.narod.ru.
'domain' - ищет по любой части домена (не URL'а!).
Например,
domain="ufo" - найдет сайты вида ufo.ua, www.ufo.freenet.kz и ufo.city.tomsk.net.
«Найден по ссылке»
Примечание «найден по ссылке» в результатах означает, что на самом сайте слова из запроса не были найдены, зато на него кто-то такими словами ссылается.
Кто именно, можно узнать с помощью запроса anchor#link="адрес"[слова]
Например, по запросу '
найдётся +всё' вылезает сайт yandex-rambler.ru с примечанием «найден по ссылке». Почему? Запрос
anchor#link="www.yandex-rambler.ru*"[найдётся +всё] подсказывает, что это результат обычного мусорообмена ссылками.
Чуть более забавный случай - наличие yandex.ru в результатах по запросу
русская баня. Видимо, Яндекс
считает, что одна ссылка с narod'ного сайта - это веский повод для попадания в Top-5.
Сохраненная в кеше Яндекса страница сайта
Чтобы докопаться до кеша, обычно нужно в результатах перейти по ссылке «показать найденные слова», а на открывшейся странице - по ссылке «сохраненная копия». Увы, Яндекс пытается загрузить страницу с найденными словами до последнего (дурная привычка), поэтому если страница не выдает ошибку, но и не загружается, то ждать ссылки на «сохраненную копию» вы будете очень-очень долго.
В такой ситуации нужно к адресу страницы с «найденными словами» приписать '&isu=1' (
пример).
Этот параметр, кстати, добавляет сам Яндекс, когда вы жмете по ссылке «сохраненная копия». Иногда приходится делать это за него.
Зачем. Особенно полезно в национальной русской забаве «
Кубок Яндекса», когда 1000 человек ломятся в течение трех минут на одну страницу.
Примечание. Правда, гораздо лучше просто вбивать адрес страницы в поисковую строку Гугля и смотреть 'Google's cache'. Кеши у Гугля
посимпатичнее будут.
Региональный поиск
Вариант 1 - страница расширенного поиска.
Вариант 2 - через параметр в адресной строке. За регион отвечает параметр '&rstr=-N', где N - номер региона.
Вариант 3 - через оператор в запросе. Оператор вида 'cat=(N)', где N = 11000000 + номер региона. Например, для Таганрога (номер региона 971) запрос будет '
достопримечательности && cat=(11000971)'
Вот
база номеров регионов. Москва и Санкт-Петербург почему-то встречаются в ней дважды. Так вот, номера 243 и 244 - не работают.
Пример: вот только что вы были в
Таганроге, сейчас вы в
Объединенных Арабских Эмиратах, а через секунду окажетесь в
прочих ближневосточных городах.
Примечания. Региональный поиск ищет только по сайтам, включенным в каталог, плюс некоторым региональным доменам (например, регион "Санкт-Петербург" присвоен сайтам с адресом *.spb.ru).
Лично я вообще не понимаю, зачем нужен этот региональный поиск и чем он лучше старого доброго '&& чукотка'. Но людям нравится.
Синтаксис
Иногда я иду в Гугль только потому что его синтаксис проще: 'site:', 'inurl:', 'allintitle:'… У Яндекса - разнобой: #url="значение*", #hint=(значение), $title (значение)… Очень сложно запомнить, когда ставить скобки, а когда кавычки. Попытаюсь хоть немного упростить это нагромождение.
'#' - не нужен. '
#abstract=("скачать реферат")' и '
abstract=("скачать реферат")' дают одинаковый результат.
'<<' в Яндекс.Блогах
успешно заменяется на '&&'.
Безопасный поиск
Чтобы пореже натыкаться на «Искомая комбинация слов нигде не встречается», «нестрогие соответствия» и просто уменьшение количества результатов, вызванные неверным синтаксисом, используйте несколько нехитрых правил.
1. Всегда ставьте перед стоп-словами '+' (
а не то).
2. Отделяйте операторы поиска в элементах от слов запроса символами '&&' (
а не то,
или даже).
3. По возможности, используйте в навороченных запросах '/+1' вместо кавычек (
а не то или
вот еще).
Дисклеймер
Нет, я не работаю в Яндексе (с чего вы взяли?) и понятия не имею, что у него внутре, хотя подозреваю, что без неонки и думателя таки не обошлось.
Яндекс - отличный поисковик.
Написание поисковика - задача куда более сложная, чем кажется большинству. Гуглю придется очень постараться, чтобы сделать русскоязычный поиск с нормальным учетом морфологии.
Пример вполне себе типичного моего запроса в Яндекс: '
$title ("англо русский") && (domain="forum*" | $title (форум|forum))'
Глюки действительны по состоянию на 29 ноября 2005 г. Каждую неделю какие-то глюки исправляются, какие-то появляются.
Еще раз, документация ни в коем случае не заменяет имеющуюся, а призвана ее исправить и дополнить.
Приведенная документация не является истиной в последней инстанции. «Истину вам предстоит найти самому» ©