| | Поиск в зонах и атрибутах
В операторах зонно-атрибутивного поиска используются имена поисковых зон
и атрибутов, заданные во время индексирования и описанные в специальном конфигурационном
файле (см. раздел Конфигурирование). Если имя зоны или атрибута не описано в
конфигурационном файле или значение атрибута не соответствует его типу, как
описано в разделе Типизация поисковых атрибутов, вся конструкция преобразуется в набор слов. Также во всех
конструкциях должны отсутствовать пробелы с обеих сторон двоеточия.
Ниже в качестве имени зоны мы будем использовать zone, а в качестве имени
атрибута — attr. Вместо zone и attr следует подставить одно из действительных
значений.
ПримерВ веб-поиске Яндекса (www.yandex.ru) можно использовать title или anchor вместо zone и link, image или date вместо attr.
Операторы зонно-атрибутивного поиска могут составлять подзапрос более сложного запроса. В этом случае они комбинируются с другими частями запроса с
помощью операторов языка запросов, описанных в разделе Основные операторы.
Синтаксические правила зонно-атрибутивного поиска
- zone:слово - ищет слово в зонах с именем zone. Токен (слово) не может содержать пробелы.
ПримерНайти документы, в тексте которых встречается слово ошибка, но это слово не встречается в тексте ссылок на другие документы: ошибка ~~ anchor:ошибка
- zone:(текст-в-зоне) - ищет текст-в-зоне в зонах с именем zone. В подзапросе текст-в-зоне могут употребляться любые языковые конструкции, описанные ранее, в частности, он может состоять из нескольких слов.
-
zone:"текст-в-зоне"
-
zone:’текст-в-зоне’
- zone:‘текст-в-зоне‘ - ищет запрос в кавычках "текст-в-зоне" (то есть точные формы подряд идущих слов) в зонах с именем zone.
- zone:((текст-в-зоне)) В отличие от варианта с одной парой скобок, ищет текст-в-зоне целиком в одной зоне с именем zone. Имеет смысл, когда в документе есть несколько разных одноименных зон, а текст-в-зоне состоит из нескольких слов.
-
attr:значение
-
attr:"значение"
-
attr:’значение’
-
attr:‘значение‘
- attr:(значение) - все формы записи эквивалентны, за исключением того, что в первом случае значение не может включать пробелы.
Ищет документы, в которых существуют зоны (в том числе документ как
целое и зона нулевой длины), имеющие атрибут с именем attr и значением
значение. Возможный формат значения зависит от типа атрибута, подробности описаны
в разделе Типизация поисковых атрибутов. Для всех типов атрибутов, кроме логических, возможно указывать операторы сравнения >, >=, <, <= после двоеточия: date:<20090101 или
size:>=1024
ПримерНайти документы, в которых есть картинки, расположенные в файле apple.gif: image:apple.gif В этом примере использован атрибут специальной зоны нулевой длины.
ПримерНайти документы, созданные 14 мая 1999 года: date:19990514 В этом примере использован документный атрибут.
ПримерНайти все документы, которые ссылаются на сайт www.site.ru: link:www.site.ru/* В этом примере использован атрибут зоны anchor.
Таким образом, поиск документов с зонным атрибутом, встречающимся где
угодно в тексте, ничем синтаксически и по смыслу не отличается от поиска
по документным атрибутам.
Однако зонные атрибуты (в том числе и атрибуты пустой зоны) отличаются
от документных тем, что имеют координатную привязку к тексту документа.
То есть для поисковой системы это такие же объекты для поиска, как и
слова, и они могут участвовать во всех допустимых операциях с заданным
поисковым контекстом.
ПримерНайти все документы, в которых картинки из файла apple.gif находятся рядом со словом яблоко: image:apple.gif &/1 яблоко
- zone:(attr:значение текст) - ищет текст в зонах с именем zone, имеющих атрибут с именем attr и значением значение. В подзапросе текст могут употребляться любые языковые конструкции, описанные ранее, в том числе и другие атрибуты. Отличие атрибута, стоящего на первом месте, в том, что он привязан к указанной зоне.
ПримерНайти документы, которые ссылаются на сайт www.site.ru словами мягкая мебель: anchor:(link:www.site.ru/* мягкая мебель)
Типизация поисковых атрибутов
Поисковые атрибуты различаются по способам распознавания и обработки. В
зависимости от типа возможны также некоторые вариации синтаксиса задания
значения атрибута.
- Встроенные зоны и атрибуты
- Несколько зон и атрибутов изначально встроены в язык запросов и имеют зарезервированные имена.
- intext - специальное имя зоны для поиска только в текстах документов.
- inlink - специальное имя зоны для поиска только в ссылках на документы.
- softness - специальное имя атрибута для указания мягкости многоместного оператора AND верхнего уровня. Имеет синтаксис softness:N, где N - целое число от 0 до 100 включительно. Следует задавать не более одного softness-атрибута в запросе, так как будет использовано только последнее заданное значение.
- prevreq - специальное имя атрибута для указания идентификатора предварительно сохраненного запроса. Имеет синтаксис prevreq:ID, где ID может содержать буквы и цифры, а также может быть отрицательным целым числом.
- inpos - специальное имя атрибута для указания точного диапазона позиций, в которых должен находиться предыдущий лист или скобка. Имеет синтаксис inpos:N1..N2, где N1 и N2 — целые положительные числа.
- Литеральные атрибуты
-
Значение атрибута распознается как неделимая последовательность символов,
участвующая в индексировании и поиске как целое. Может быть документным
или зонным.
Возможен поиск по префиксу, в этом случае значение атрибута (требуемый
префикс) должно заканчиваться звездочкой (*).
- Даты
-
Значение атрибута распознается как дата или время. Этот тип атрибута может
быть только документным, при этом в ключах хранится дата с точностью до
дня, аналогично литеральному атрибуту, а в словопозициях хранятся секунды
от полуночи.
Поддерживаются несколько вариантов задания даты: YYYYMMDD, или YYYY-MM-DD, или YYYY-MM-DDTHH:MM:SS. В первом варианте можно использовать
символ * для поиска диапазона, в последнем можно не задавать секунды или секунды и минуты,
в этом случае поиск также будет выполнен по диапазону.
Поддерживается также интервальный поиск: date:20080101..20080212
Пример
date:20080119 — найти документы, созданные 19 января 2008 года
date:2008* — найти документы, созданные в 2008 году
date:2009-01-19T19:23:45 - найти документы, созданные 19 января 2008 года в 19 часов 23
минуты 45 секунд, тот же результат достигается запросом date:20090119 inpos:69825..69826
date:2009-01-19T19:23 преобразуется в date:2009-01-19 inpos:69780..69840
date:2009-01-19T19 преобразуется в date:2009-01-19 inpos:68400..72000
- URL
-
Значение атрибута распознается как Uniform Resource Locator.
Значения атрибутов данного типа имеют дополнительную обработку: из них
удаляется протокол - http:// или https://, а также все русские символы преобразуются
в utf-8 и кодируются в соответствии с RFC1738.
Пример
url:http://ru.wikipedia.org/wiki/Уткин_Иосиф_Павлович работает как
url:ru.wikipedia.org/wiki/%D0%A3%D1%82%D0%BA%D0%B8%D0%BD_%D0%98%D0%BE%D1%81%D0%B8%D1%84_%D0%9F%D0%B0%D0%B2%D0%BB%D0%BE%D0%B2%D0%B8%D1%87
(Искусственный перевод строки в действительности отсутствует.)
url:https://www.telebank.ru/web/front/login.x работает как
url:www.telebank.ru/web/front/login.x
- Целочисленные атрибуты
-
Значение атрибута распознается как целое десятичное число.
Поддерживается также интервальный поиск: cat:100004..1000010
Пример
cat:100004, size:200
Запрос size:0xFFFF будет обработан как запрос size 0xFFFF из двух слов.
- Логические атрибуты
-
В качестве значений атрибута могут использоваться:
1/0, true/false, yes/no, on/off
Примерnew:yes, cyrillic:false
Конфигурирование
Для каждой коллекции документов в конфигурационном файле может быть
задан список зон и атрибутов. Секция Collection может содержать одну подсекцию
QueryLanguage.
В секции QueryLanguage указываются зоны и атрибуты в формате имя: тип.
Имя может состоять из латинских букв в нижнем регистре и цифр,
а также может содержать подчеркивания. Имя может начинаться только с буквы. Имена атрибутов не проверяются при загрузке конфигурации.
При неверном
указании типа будет выдано сообщение об ошибке и данный атрибут будет пропущен. Поддерживаемые типы: ZONE, ATTR_LITERAL, ATTR_INTEGER, ATTR_URL,
ATTR_DATE, ATTR_BOOLEAN. Названия типов могут быть заданы в любом
регистре.
Пример
<Collection id="work">
IndexDir /yandex/db/workindex/
<QueryLanguage>
title : ZONE
address : ZONE
anchor : ZONE
mime : ATTR\_LITERAL
cat : ATTR\_INTEGER
url : ATTR\_URL
date : ATTR\_DATE
new : ATTR\_BOOLEAN
cyrillic : ATTR\_BOOLEAN
</QueryLanguage>
</Collection>
Зоны и атрибуты по умолчанию
Ниже приведены имена зон и атрибутов, которые будут использованы по умолчанию,
в случае отсутствия конфигурационного файла. Эти имена и типы используются на веб-поиске
Яндекса.
- Зоны: title, address, anchor, anchorint, anchormus, quote, del, ins
- Литеральные: charset, language, robots, style, profile, script, image, applet, object, action, domain, host, hostip, lang, mime, rhost, upath, whois
- URL: base, refresh, link, linkint, linkmus, url
- Даты: date, idate
- Логические: cyrillic, new
- Целочисленные: cat, size
Сравнение с синтаксисом версии 3.10.8
| Версия 3.10.8 |
Новая версия |
| a|b&&c |
a | b && c |
| (!a | !A) /+1 !b |
"a * b" |
| title[слово] |
title:слово |
| title[слово]$$$ |
title–>слово |
| keyword=(слово) |
не поддерживается |
| date="20080101" |
date:20080101 |
| [[date="20060514"„60„120]] |
date:20060514 inpos:60..120 |
| size<="1024" |
size:<=1024 |
| anchor#link="www.site.ru/*" [мебель] |
anchor:(link:www.site.ru/* мягкая мебель) |
| |