Язык запросов Яндекса - Хозяйке на заметку
Поскольку старая документация синтаксиса запросов Яндекса весьма устарела, а новую все никак не могут написать, постараюсь восполнить этот пробел. Материал рассчитан на подготовленного читателя, знающего, что такое стоп-слова и операнды, чем '~~' отличается от '&&' и зачем их использовать. То есть на очень небольшую аудиторию. Полагаю, до конца дочитают только редкие энтузиасты и не менее редкие разработчики Яндекса. :-) Документация ни в коем случае не заменяет имеющуюся, а призвана ее исправить и дополнить. В отличие от официальной, она включает также разбор глюков и особенностей поиска, что поможет вам наконец-то ответить на вопрос «Бля, ну почему он не находит?» и найти несмотря ни на что.
Словоформы
Независимо от того, в какой форме вы употребили слово в запросе, поиск учитывает все его формы по правилам русского языка. Глюки. Неприменимо к большинству стоп-слов: я, мы, ты, вы, он, она, оно, они, это, тот, наш, свой, себя, быть, мочь, весь, который, один, такой… Т. е. ' мальчик пошла' сработает, а ' мальчик которая' — нет. Чтобы искать все формы стоп-слова, нужно поставить '+' перед ним: ' мальчик +которая'.
Точная словоформа
Перед словом поставить '!'. Например, ' !лужкову'. Глюки. Почему-то не работает в Яндекс.Блогах, но обещают скоро сделать.
Наличие заданного слова в результатах
Исключение слова
'~' и '~~' перед словом. Первый оператор следит, чтобы слова не было в пределах предложения, второй — чтобы его не было во всем документе. Ошибки в документации. Яндекс предлагает использовать '-'. Ради бога, не слушайте его! Этот оператор исключает слова только из всего документа, нелогично выглядит в паре с '~', значительно (больше чем '~~') влияет на ранжирование результатов и исключает не все стоп-слова (сравните, например: ' пройдите регистрацию -на' и ' пройдите регистрацию ~ на'). Особенности. Исключая стоп-слова, не забудьте ставить перед ними '+': ' маркс энгельс ~ +и', иначе можете наткнуться на глюк. Глюки. Отдельная печальная песня про сортировку результатов. В идеале, сортировка результатов по запросу ' компьютер ~ intel' должна быть такой же, как и по запросу ' компьютер'. Но это, увы, совсем не так. Если в запросе есть оператор исключения, порядок результатов тут же значительно изменится, даже если исключается несуществующее слово: сравните ' компьютер ~ пывпывзпоцзукшпо' и ' компьютер' Интересно, что оператор исключения создаст новый принцип сортировки, другой, но внутренне очень хорошо организованный — некую новую точку отсчета. Так, результаты ' компьютер ~ пывпывзпоцзукшпо' и ' компьютер ~~ кракозебра' идентичны, а запрос ' компьютер ~~ #url="www.compress.ru*"' действует идеально, убирая этот сайт с третьей позиции и оставляя в сохранности порядок всех остальных. Но! только относительно уже нового принципа сортировки. Отдельно замечу, что оператор '-' тоже создает новый (отличающийся от первых двух) принцип сортировки и тоже внутренне логичный: ' компьютер -фусуишвсонре', ' компьютер -кракозебра' и ' компьютер -vmware'. Почему вдруг результаты начинаются сортироваться по-новому, не знает даже Яндекс: «Оба запроса (с '-' и '~~') приводят к одному и тому же набору документов с точностью до ответов серверов в кластере. Другое дело, списки отранжированы по-разному. Однако в документации ничего не говорится об упорядочивании документов».
Любое из слов
Решение проблемы омонимии
Слово употребить в начальной форме и поставить перед ним '!!'. Например, ' !!дело рыбака'. Зачем. Яндекс сознательно «путает», например, существительные 'дело' и 'день' (из-за глагола 'деть', который может принимать обе эти формы). Поэтому на запрос ' дело рыбака' вы получите сплошной «день рыбака». А вот на ' !!дело рыбака' — все формы именно этих слов. Особенности. 1. Хитрый механизм при исключении форм слова. Например, по запросу ' лужков ~~ !!лужков' Яндекс все-таки найдет слово «Лужков», но при этом обязательно на странице будет присутствовать и другая форма слова «лужок». 2. Если одна из форм нужного слова одновременно является формой другого, приходится действовать исключением. Например, поискав ' женить', вы найдете также множество «Женю», «Женя» и «Жени». Запрос ' !!женить', понятно, не поможет от них избавиться. Поэтому исключать Евгения придется буквально: все формы слова «женить», кроме всех форм слова «женя» — ' женить ~~ !!женя'. Глюки. Увы, небольшой беспорядок в словаре Яндекса. Например, слово «режим» Яндекс почему-то считает формой слова «резать»: ' !!резать монитор'. И если наличие «режим» еще как-то можно оправдать безграмотностью создателей страниц, которые иногда именно так и пишут, то наличие «режимы» как формы слова «резать» — целиком на совести Яндекса. Примечания. 1. Если слово употреблено не в начальной форме и тем более не образует производных, то '!!' будет примерно равно '!'. Пример: ' !!выдавала' и ' !выдавала'. 2. Реализовать мою заветную мечту: отделить «путину» (сезон интенсивного рыболовства) от Путина — этим методом все равно не удастся.
Имя собственное
Если первая буква слова в запросе прописная (а остальные строчные), то и найдены будут результаты с прописной буквы. Глюки. Большей частью, систематизации не поддаются: иногда Яндекс игнорирует запрос на прописную букву, иногда теряет подходящие под запрос сайты, иногда, наоборот, находит сайты, которых нет со строчной. Кроме того, Яндекс дополнительно выдает документы, найденные по ссылке, при этом регистр букв игнорирует ( пример).
Поиск слов в одном предложении
'&' между словами. Пример: ' фотография & андерсон & джоли'. Ошибки в документации. Яндекс уверяет, что «несколько набранных в запросе слов, разделенных пробелами, означают, что все они должны входить в одно предложение». Увы. Слова, разделенные пробелами, необязательно находятся в одном предложении: ' фотография андерсон джоли' — хотя обычно и расположены достаточно близко на странице (точный алгоритм неизвестен).
Поиск слов на одной странице
'&&' между словами. Пример: ' фотография && андерсон && джоли'. Обеспечивает максимальное количество результатов, поэтому применяется весьма часто. В смысле, теми, кто понимает. :-)
Расстояние между словами
В общем виде — оператор вида '/(n m)' (n — минимальное, m — максимальное расстояние между словами). На практике в общем виде почти не используется. Вместо него используются запросы вида ' поставщики /2 кофе' (= слова либо идут подряд, либо через одно, неважно в каком порядке) — находит «поставщиков кофе», «поставщики пьют кофе», «кофе для поставщиков» и т. п. Кроме того, весьма распространены запросы вида ' !надеемся +на /+2 !сотрудничество' (= «надеемся на какое-то_слово сотрудничество»). Основное их предназначение — превращение Яндекса в самый полный словарь синонимов. Этому вопросу я посвятил отдельную страницу. Глюки. ' владимир /+0 путин' и иже с ним. Глюк, впрочем, представляет чисто теоретический интерес — сам запрос некорректен.
Устойчивые словосочетания
Словосочетание в кавычках. Пример: ' "красная шапочка"'. Особенности. Яндекс предполагает, что слова в кавычках нужны вам именно в таком порядке и именно в такой словоформе. Поэтому «красными шапочками» вы таким запросом не найдете. Глюки. А вот при исключении словосочетания в кавычках Яндекс забывает про точность словоформы. Поэтому запросом ' красная шапочка ~ "красную шапочек"' вы найдете близко стоящие слова «красная» и «шапочка», кроме всех форм «красных шапочек».
Устойчивые словосочетания с разными словоформами
'/+1' между словами (это частный случай использования оператора расстояния между словами). Так, ' "одна хорошая мальчики"' — 0 результатов, а ' +одна /+1 хорошая /+1 мальчики' ищет все формы этих слов и находит множество страниц со словосочетанием «один хороший мальчик».
Поиск цифр
Глюки. Поведение Яндекса в этом вопросе описывается одним словом: «Позор!». С какого-то перепугу Яндекс вдруг решил «склеивать» числа. Т.е. вы ему говорите: ' 3 000 000', а он ищет «3000000» (а новости, к слову, предлагает с «0,3»). Общее правило такое: Яндекс склеивает три цифры с цифрами, стоящими перед ними. Например, вместо ' 8 302 404 75' он будет искать «8302404 75». Шансов найти описания веб-ошибок, скажем так, немного: ' 403 404 301 && ошибки'. Яндекс пытается смягчить этот позор заплаткой под названием «или все-таки номер телефона»? Но, во-первых, заплатка далеко не исчерпывает все потребности в раздельном написании цифр, а во-вторых, еще и сделана коряво. То есть ' 7 095 974 3555' он не склеивает совсем, а ' 7 095 974 35 55' — еще как, по всем своим правилам. Решение. Используйте ближайшие заменители: скобки, ' &' или дефисы между цифрами, не забывая каждый раз ругать программистов Яндекса и вспоминать, что раньше, вроде, он искал цифры нормально.
Нафиг не надо
Лично мне лет за 5 не пригодились ни разу:
- Общий случай оператора расстояния между словами: '/(n m)'.
- Исключение порядка слов: 'вакансии ~ /+1 студентов'.
- Расстояние между предложениями: 'банк && /1 налоги'.
Заявлено, но не работает
Операторы веса и уточнения запроса: 'поисковые механизмы:5', 'компьютер <- телефон'.
Звучит заманчиво, но первое не работает, а принцип действия второго непонятен. Поэтому не использую.
Поиск спецсимволов
Нет, 'C#' и 'C++' Яндекс не ищет и искать в ближайшее время не собирается. Google is your friend. Символ '№' Яндекс то игнорирует, то автоматически переводит в 'N'. Поэтому лучше '№' вообще не использовать.
Транслитерация
(спасибо maksa) Какая разница между словами «хоровод» и «xopoвog»? Она почти не видна, но первое слово написано по-русски, а во втором только одна русская буква — 'в', остальные же написаны латинским шрифтом. Яндекс учитывает «взаимозаменяемость» некоторых английских и русских букв, поэтому: 1. Оба запроса дадут почти на 100% одинаковые результаты: 'хоровод' и 'xopoвog' 2. Оба запроса найдут страницы как с русским «хороводом», так и составленным частично из английских букв.
Следующие буквы взаимозаменяемы (полужирным выделены английские): 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. Извращений Яндекс не принимает: '?', '?ндекс', 'Aлина' (копируйте сами в строку запроса, если не верите)
Поиск в элементах
Читайте оригинальную документацию. К ней есть только несколько замечаний.
Поиск на заданном сайте
Отдельно. Есть три основных способа поиска на сайте:
-
оператор '#url="адрес*"' в строке поиска (или аналогичный #host="адрес*");
-
страница расширенного поиска (или аналогичный по действию параметр 'surl=адрес' в адресной строке);
-
параметр 'serverurl=адрес' в адресной строке.
Как ни смешно, все три приводят к разным результатам. Главное отличие — это отношение каждого способа к поддоменам, редиректам и адресу сайта с / без 'www'. Где будет искать Яндекс, если указать 'www.artlebedev.ru'? А если 'artlebedev.ru'? а если 'design.ru'? А если vilka.ru?
Иллюстрирующая табличка.
Вдобавок, для другого сайта плюсы и минусы могут стоять совершенно в других местах. Поэтому часто приходится перебирать все три варианта.
Кроме того, в первом случае каждый раз нужно переходить по ссылке «еще с сайта» (удобно при поиске картинок, неудобно при обычном поиске). Во втором и в третьем при каждом новом поиске нужно не забывать ставить галочку «на сайте: таком-то» — Яндекс по принципиальным соображениям каждый раз ее сбрасывает.
Особенности и глюки про поиске картинок. Поведение Яндекса здесь весьма оригинальное. Можно предположить, что по запросу '#url="www.toster.ru*"' вы получите все картинки, размещенные на этом сайте. Это не совсем так. Т. е. картинки эти вы получите, но с небольшим довеском.
В качестве одного из аспектов отсечения дубликатов Яндекс для каждой картинки хранит список URL’ов, по которым она доступна. Когда вы требуете картинки с определенным URL’ом, то Яндекс ищет его по этому списку, но забывает учесть при выдаче результатов. Это приводит к тому, что Яндекс может найти картинки, которые и не расположены на toster.ru, и не загружаются с toster.ru. А находит он картинки, скопированные с него и размещенные на других сайтах (или наоборот, картинки, которые «Тостер» скопировал с других сайтов).
Поиск в заданной доменной зоне
Недокументированный и очень полезный оператор 'rhost'.
Пример использования: '#rhost="ru.narod*"' (обратите внимание на обратный порядок слов) — все сайты с адресом вида имя_сайта.narod.ru.
Параметры адресной строки
В дополнение к уже упомянутому 'serverurl' могут понадобиться 2 штуки.
Сохраненная в кеше Яндекса страница сайта
Чтобы докопаться до кеша, обычно нужно в результатах перейти по ссылке «показать найденные слова», а на открывшейся странице — по ссылке «сохраненная копия». Увы, Яндекс пытается загрузить страницу с найденными словами до последнего (дурная привычка), поэтому если страница не выдает ошибку, но и не загружается, то ждать ссылки на «сохраненную копию» вы будете очень-очень долго. В такой ситуации нужно к адресу страницы с «найденными словами» приписать '&isu=1' (пример). Этот параметр, кстати, добавляет сам Яндекс, когда вы жмете по ссылке «сохраненная копия». Иногда приходится делать это за него. Зачем. Особенно полезно в национальной русской забаве «Кубок Яндекса», когда 1000 человек ломятся в течение трех минут на одну страницу. Примечание. Правда, гораздо лучше просто вбивать адрес страницы в поисковую строку Гугля и смотреть 'Google's cache'. Кеши у Гугля посимпатичнее будут.
Региональный поиск
За регион отвечает параметр '&rstr=0-0.N', где N — номер региона. База номеров регионов (narod.ru, вы уж простите) выглядит… м-м-м… странно. Даже термин «лоскутное одеяло» будет только комплиментом.
Пример: вот только что вы были в Таганроге, сейчас вы в Объединенных Арабских Эмиратах, а через секунду окажетесь в «Прочих» регионах. Глюки. Не исключены. Зачем. Сколько ни указывай свой регион в настройках Яндекса, он все равно при поиске определяет его автоматически. А если вам нужен другой регион? А если Яндекс определяет его неправильно? Примечание. Лично я вообще не понимаю, зачем нужен этот региональный поиск и чем он лучше старого доброго '&& чукотка'. Но людям нравится.
Дисклеймер
Нет, я не работаю в Яндексе (с чего вы взяли?) и понятия не имею, что у него внутре, хотя подозреваю, что без неонки и думателя таки не обошлось. Яндекс — отличный поисковик. Написание поисковика — задача куда более сложная, чем кажется большинству. Гуглю придется очень постараться, чтобы сделать русскоязычный поиск с нормальным учетом морфологии. Пример вполне себе типичного моего запроса в Яндекс: '$title (англо русский) && (#url="forum*" | $title (форум|forum))' Яндекс извещен о большей части упомянутых глюков. К сожалению, они практически не исправляются. Яндекс можно понять: доля пользователей, использующих язык запросов, составляет менее 1%. Только грустно все это… «Создайте систему, которой сможет пользоваться даже домохозяйка — и только домохозяйка захочет ею пользоваться». Еще раз, документация ни в коем случае не заменяет имеющуюся, а призвана ее исправить и дополнить. Приведенная документация не является истиной в последней инстанции. «Истину вам предстоит найти самому» ©
Я поставил в закладки, чего и Вам желаю. Автору уважуха ;-)
Оригинал: http://www.livejournal.com/community/kubok/45852.html |