Яndex.Server 3.8 Free Edition : Документация для разработчиков и администраторов | ||
---|---|---|
Пред. | Глава 5. Настройка и использование поискового сервера | След. |
Язык запросов Яndex.Server 3.8 Free Edition совпадает с языком запросов www.yandex.ru.
Пользователи могут задавать запросы и на естественном языке, и с использованием логических операторов. В данном разделе мы подробно остановимся на втором варианте построения поискового выражения и на примерах покажем нюансы, которые следует учитывать для достижения максимальной эффективности поиска.
Независимо от того, в какой форме вы употребили слово в запросе, поиск учитывает все его формы по правилам русского языка
Например, если задан запрос 'идти', то в результате поиска будут найдены ссылки на документы, содержащие слова 'идти', 'идет', 'шел', 'шла' и т.д. На запрос 'окно' будет выдана информация, содержащая и слово 'окон', а на запрос 'отзывали' - документы, содержащие слово 'отозвали'.
По умолчанию поиск учитывает все формы заданного слова согласно правилам русского языка. Однако существуют возможности поиска по точной словоформе, для этого перед словоформой надо поставить один восклицательный знак. Кроме того, можно искать только формы, производные от заданной, то есть рассматривать слово как лемму. Для этого перед словом нужно поставить два восклицательных знака.
Так, по запросу 'лужков' будут найдены все документы содержащие формы слов 'лужков' и 'лужок' ≈ 'лужкову', 'лужки', 'лужкам' и т.п. По запросу '!лужков' будут найдены только те документы, что содержат словоформу 'лужков' (но не 'лужковым' и 'лужки'). А по запросу '!!лужков' найдутся документы, содержащие любые формы слова 'лужков', но не слова 'лужок', т.е. найдутся слова 'лужкову', 'лужкова' и т.п., но не 'лужки' и 'лужок').
Слова с большой и маленькой буквы считаются разными формами одного слова, поэтому всеравно, какой регистр использовать в запросе. Исключением является оператор точной формы. По запросу '!лужков' будут найдены все документы, содержащие эту словоформу в любом регистре, а по запросу '!Лужков' - только документы, в которых имеется форма 'Лужков' с большой буквы.
Самый простой способ задать запрос - просто написать в строке запроса то, что нужно найти. Язык запросов и понятие релевантности в Яndex'е настолько развиты, что позволяют успешно работать с неформальными запросами. Для этого запрос надо заключить в фигурные скобки.
Например, запрос {компьютеры типа башня или tower}, выдаст список документов, относящихся к данной теме, часть которых в свою очередь даст дальнейшие ссылки. В начале списка окажутся документы, где слова запроса встречаются наибольшее количество раз и стоят как можно ближе друг другу.
Итак, если можно продумать запрос, выделить ключевые слова, определить возможные синонимы, имеет смысл использовать язык запросов. Если же проще описать словами область интересов в общем виде, удобно задавать естественно-языковый зарос. Этот запрос всегда будет обработан, как бы он ни был задан, какие бы символы в нем не использовались.
Если вам необходимо найти только какую-то фразу, заключите ее в двойные кавычки, если хотите искать по точной словоформе, поставьте перед словом восклицательный знак. Однако последнее будет работать только в том случае, если индекс был создан с сохранением точных словоформ.
Если Вы хотите, чтобы слова из запроса обязательно были найдены, поставьте перед каждым из них "+". Если Вы хотите исключить какие-либо слова из результата поиска, поставьте перед каждым из них "-".
Например, запрос 'частные объявления продажа велосипедов', выдаст много ссылок на сайты с разнообразными частными объявлениями. А запрос с "+" 'частные объявления продажа +велосипедов' покажет объявления о продаже именно велосипедов.
Если вам нужно описание Парижа, а не предложения многочисленных турагентств, имеет смысл задать такой запрос: 'путеводитель по Парижу -агентство -тур'
Замечание: Обратите внимание на знак '-'. Это именно минус, а не тире и не дефис. Знак '-' надо писать через пробел от предыдущего и слитно с последующим словом, вот так: 'рак -гороскоп'. Если написать 'рак-гороскоп' или 'рак - гороскоп', то знак '-' будет проигнорирован.
Несколько набранных в запросе слов, разделенных пробелами, означают, что все они должны входить в одно предложение искомого документа. Тот же самый эффект произведет употребление символа '&'.
Например, при запросе 'лечебная физкультура' или 'лечебная & физкультура', результатом поиска будет список документов, в которых в одном предложении содержатся и слово 'лечебная', и слово 'физкультура'. (Эквивалентно запросу '+лечебная +физкультура').
Между словами можно поставить знак '|', чтобы найти документы, содержащие любое из этих слов. (Удобно при поиске синонимов).
Например, запрос вида 'фото | фотография | фотоснимок | снимок | фотоизображение' задает поиск документов, содержащих хотя бы одно из перечисленных слов.
Еще один знак, тильда '~', позволит найти документы с предложением, содержащим первое слово, но не содержащим второе.
Так, по запросу 'банки ~ закон' будут найдены все документы, содержащие слово 'банки', рядом с которым (в пределах предложения) нет слова 'закон'.
Чтобы подняться на ступеньку выше, от уровня предложения до уровня документа, просто удвойте соответствующий знак. Одинарный оператор (&, ~) ищет в пределах предложения, двойной (&&, ~~) - в пределах документа.
Например, по запросу 'рецепты && (плавленый сыр)' будут найдены документы, в которых есть и слово 'рецепты' и словосочетание '(плавленый сыр)' (причем '(плавленый сыр)' должен быть в одном предложении. А запрос 'руководство Visual C ~~ цена' выдаст все документы со словами 'руководство Visual C', но без слова 'цена'
Часто в запросах ищут устойчивые словосочетания. Если поставить их в кавычки, то будут найдены те документы, в которых эти слова идут строго подряд.
Например, по запросу 'красная шапочка' будут найдены документы с это фразой. (При этом контекст "а шапочка у нее была красная" найден не будет.)
Как Яndex адресует слова? Если все слова в тексте перенумеровать по порядку их следования, то расстояние между словами 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 налоги' означает, что слово 'налоги' должно находиться в том же самом, либо в соседнем со словом 'банк' предложении.
Вместо одного слова в запросе можно подставить целое выражение. Для этого его надо взять в скобки.
Например, запрос '(история, технология, изготовление) /+1 (сыра, творога)' задает поиск документов, которые содержат любую из фраз 'история сыра', 'технология творога', 'изготовление сыра', 'история творога'.
Поисковые зоны и атрибуты подробно обсуждались в разделе Документы, зоны и атрибуты. Здесь мы приведем список синтаксических правил языка запросов, которые используются для зонно-атрибутивного поиска. В отличие от других синтаксических правил, изложенных в данной главе, операторы зонно-атрибутивного поиска зависят от настроек, использованных при создании индексных файлов. А именно, в них используются имена поисковых зон и атрибутов, заданные в конфигурационных файлах интерпретаторов документных форматов (парсеров). Имена документных атрибутов также могут быть заданы в конфигурационном файле источника данных.
Ниже в качестве имени зоны мы будем использовать zone, а в качестве имени атрибута - attr. Вместо zone и attr следует подставить одно из значений, определенных в конфигурации парсера. Например, если используется конфигурация HTML-парсера по умолчанию, можно использовать title или anchor вместо zone и link, image или keywords вместо attr. В примерах данного раздела мы будем предполагать, что документы проиндексированы с использованием конфигурации HTML-парсера по умолчанию.
Операторы зонно-атрибутивного поиска могут составлять подзапрос более сложного запроса. В этом случае они комбинируются с другими частями запроса с помощью операторов языка запросов, описанных в этой главе.
Синтаксические правила зонно-атрибутивного поиска
Ищет текст-в-зоне в зонах с именем zone. В подзапросе текст-в-зоне могут употребляться любые языковые конструкции, описанные ранее в данной главе.
Ищет документы, в которых существуют зоны (в том числе типов doc и empty), имеющие атрибут типа LITERAL, URL или DATE с именем attr и значением значение-атрибута. В случае атрибута типа DATE нужно использовать формат значения атрибута в виде строки "YYYYMMDD". Чтобы найти не точное значение-атрибута, а значение, начинающееся с заданной подстроки, нужно использовать символ *.
Пример: Найти документы, в которых есть картинки, расположенные в файле apple.gif:
image = "apple.gif"В этом примере использован атрибут специальной зоны нулевой длины.
Пример: Найти документы, созданные 14 мая 1999 года:
date="19990514"В этом примере использован документный атрибут.
Пример: Найти все документы, которые ссылаются на сайт www.site.ru:
link="www.site.ru/*"В этом примере использован атрибут зоны anchor.
Таким образом, поиск документов с зонным атрибутом, встречающимся где угодно в тесте, ничем синтаксически и по смыслу не отличается от поиска по документным атрибутам.
Однако зонные атрибуты (в том числе и атрибуты пустой зоны) отличаются от документных тем, что имеют координатную привязку к тексту документа. То есть для поисковой системы это такие же объекты для поиска, как и слова, и они могут участвовать во всех допустимых операциях с заданным поисковым контекстом.
Ищет документы, в которых существуют зоны (в том числе типов doc и empty), имеющие атрибут типа LITERAL, URL или DATE с именем attr и значением, большим или меньшим чем значение-атрибута. Строковые значения атрибутов сравниваются лексикографически.
Ищет документы, в которых существуют зоны (в том числе типов doc и empty), имеющие атрибут типа TEXT с именем attr, текст которого удовлетворяет запросу слова-атрибута.
Ищет текст-в-зоне в зонах с именем zone, имеющих атрибут типа LITERAL, URL или DATE с именем attr и значением значение-атрибута. В подзапросе текст-в-зоне могут употребляться любые языковые конструкции, описанные ранее в данной главе.
Ищет текст-в-зоне в зонах с именем zone, имеющих атрибут типа TEXT с именем attr, текст которого удовлетворяет запросу слова-атрибута. В подзапросе текст-в-зоне могут употребляться любые языковые конструкции, описанные ранее в данной главе.
Ищет текст-в-зоне во всех зонах, имеющих атрибут с именем attr, текст которого удовлетворяет запросу слова-атрибута (для текстовых атрибутов) или совпадает с значение-атрибута (для литеральных атрибутов).
Ищет документы, в которых есть зоны с именем zone, имеющие атрибут с именем attr, текст которого удовлетворяет запросу слова-атрибута (для текстовых атрибутов) или совпадает с значение-атрибута (для литеральных атрибутов).
Ограничение по документам (a << b). Из левого множества словопозиций удаляются словопозиции с документами, отсутствующими в правом множестве. Оставшиеся словопозиции переносятся без изменения релевантности и приоритета.
Оператор очень похож на документное "И" (&&), с той лишь разницей, что правый операнд влияет на возможность документов попасть в результаты поиска, но не влияет на ранжирование. Этот оператор следует использовать при ограничении результатов поиска атрибутивным выражением.
Интервальное ограничение по позициям ([[a,, lo,, hi]]). Из каждого документа удаляются словопозиции вне указанного интервала. Оставшиеся словопозиции переносятся без изменения релевантности и приоритета.
Оператор полезен для точного поиска по дате. Например, запрос
[[#date="20060514",, 60,, 120]]найдет документы, созданные 14 мая 2006 года с часу до двух ночи.
"Нестрогий поиск" может быть задан в терминах языка запросов Яндекса конструкцией (поисковое_выражение)//число, где поисковое_выражение допускает операторы языка запросов яндекса и они имеют смысл, а число от 0 до 100 задает степень "нестрогости пересечения терминов" (если оно имеет место в поисковом_выражении). При этом значение 0 соответствует оператору пересечения, а значение 100 соответствует оператору объединения.
При поиске для каждого найденного документа Яндекс вычисляет величину релевантности (соответствия) содержания этого документа поисковому запросу. Список найденных документов перед выдачей пользователю сортируется по этой величине в порядке убывания. Релевантность документа зависит от ряда факторов, в том числе от частотных характеристик искомых слов, веса слова или выражения, близости искомых слов в тексте документа друг к другу и т.д.
Пользователь может повлиять на порядок сортировки, используя операторы веса и уточнения запроса.
Задание веса слова или выражения применяется для того, чтобы увеличить релевантность документов, cодержащих "взвешенное" выражение.
Синтаксис: слово:число или (поисковое_выражение):число
Например, по запросу 'поисковые механизмы:5' будут найдены те же документы, что и по запросу 'поисковые механизмы'. Разница состоит в том, что наверху списка найденного окажутся документы, где чаще встречается именно слово 'механизмы'. Запрос 'поисковые (механизмы | машины | аппараты):5' равнозначен запросу 'поисковые (механизмы:5 | машины:5 | аппараты:5)'.
Задание уточняющего слова или выражения применяется для того, чтобы увеличить релевантность документов, cодержащих уточняющее выражение.
Синтаксис: <- слово или <- (уточняющее_выражение)
Например, по запросу 'компьютер <- телефон' будут найдены все документы, содержащие слово 'компьютер', при этом первыми будут выданы документы, содержащие слово 'телефон'. Если ни в одном документе со словом 'компьютер' нет слова 'телефон', результат запроса будет эквивалентен запросу 'компьютер'.
В заключение сведем все вышесказанное в таблицу. Данным сжатым описанием языка запросов Яndex.Server 3.8 Free Edition удобно пользоваться при составлении сложных поисковых выражений и всегда полезно иметь под рукой.
Таблица 5-1. Краткое описание языка запросов
Синтаксис | Что означает оператор | Пример запроса |
---|---|---|
Пробел или & | Логическое И (в пределах предложения) | Лечебная физкультура |
&& | Логическое И (в пределах документа) | рецепты && (плавленый сыр) |
| | логическое ИЛИ | фото | фотография | снимок | фотоизображение |
( ) | группирование слов | (технология | изготовление) (сыра | творога) |
~ | бинарный оператор И НЕ (в пределах предложения) | банки ~ закон |
~~ | бинарный оператор И НЕ (в пределах документа) | путеводитель по парижу ~~ (агентство | тур) |
/(n m) | расстояние в словах (-назад +вперед) | поставщики /2 кофе
музыкальное /(-2 4) образование вакансии ~ /+1 студентов |
" " | поиск фразы | "красная шапочка" (эквивалентно красная /+1 шапочка) |
&&/(n m) | расстояние в предложениях (-назад +вперед) | банк && /1 налоги |
Таблица 5-2. Поиск в зонах и элементах
Синтаксис | Что означает оператор | Пример запроса |
---|---|---|
title [выражение] | поиск в заголовке | title [CompTek] |
anchor [выражение] | поиск в тексте ссылок | anchor [CompTek | Dialogic] |
address [выражение] | поиск в тексте адреса | address [Иванов] |
#keywords=(выражение) | поиск в ключевых словах | #keywords=(поисковая система) |
#abstract=(выражение) | поиск в описании | #abstract=(искалка | поиск) |
#hint=(выражение) | поиск в подписях к изображениям | #hint=(lenin | ленин) |
#image="имя файла" | поиск файла изображения | #image="tort*" |
#applet="имя файла" | поиск файла java-апплета | #applet="pref.class" |
#style="имя файла" | поиск документа в данном стиле | #style="mitsu.css" |
#url="значение" | поиск на заданном сайте (странице) | #url="www.comptek.ru*" |
#link="значение" | поиск ссылок на заданный URL | #link="www.yandex.ru*" |
#anchor.link="значение" | поиск ссылок на заданный URL из обычной ссылки | #anchor.link="www.yandex.ru*" |
#date="значение" | дата создания документа 14.05.1997 | #date="19970514" |
#date<"значение" | дата создания документа до 14.05.1997 | #date<"19970514" |
#date>"значение" | дата создания документа после 14.05.1997 | #date>"19970514" |
#date<="значение" | дата создания документа до 14.05.1997 включительно | #date<="19970514" |
#date>="значение" | дата создания документа после 14.05.1997 включительно | #date>>="19970514" |
#<имя_раздела>="значение" | поиск в разделах, заданных при индексировании | #contents="gogol" |
Пред. | Начало | След. |
Формирование страниц с результатами поиска | Уровень выше | Вспомогательные утилиты |