Spec-Zone .ru
спецификации, руководства, описания, API
След: Именование Java и Интерфейс Каталога
Урок: Именование и Операции Каталога
Раздел: Поиск
Фильтры
Домашняя страница > Именование Java и Интерфейс Каталога > Именование и Операции Каталога

Фильтры

В дополнение к определению поиска, используя ряд атрибутов, можно определить поиск в форме фильтра поиска. Фильтр поиска является запросом поиска, выраженным в форме логического выражения. Синтаксис фильтров поиска, принятых DirContext.search(), описывается в RFC 2254.

Следующий фильтр поиска определяет, что у записей квалификации должны быть атрибут "sn" со значением "Geisel" и атрибут "mail" с любым значением:

(&(sn=Geisel)(mail=*))

Следующий код создает фильтр и значение по умолчанию SearchControls, и использует их, чтобы выполнить поиск. Поиск эквивалентен тому, представленному в основном примере поиска.

// Create the default search controls
SearchControls ctls = new SearchControls();

// Specify the search filter to match
// Ask for objects that have the attribute "sn" == "Geisel"
// and the "mail" attribute
String filter = "(&(sn=Geisel)(mail=*))";

// Search for objects using the filter
NamingEnumeration answer = ctx.search("ou=People", filter, ctls);

Выполнение this example приводит к следующему результату.

# java SearchWithFilterRetAll
>>>cn=Ted Geisel
attribute: sn
value: Geisel
attribute: objectclass
value: top
value: person
value: organizationalPerson
value: inetOrgPerson
attribute: jpegphoto
value: [B@1dacd75e
attribute: mail
value: Ted.Geisel@JNDITutorial.example.com
attribute: facsimiletelephonenumber
value: +1 408 555 2329
attribute: cn
value: Ted Geisel
attribute: telephonenumber
value: +1 408 555 5252

Быстрый Краткий обзор Синтаксиса Фильтра Поиска

Синтаксис фильтра поиска является в основном логическим выражением в префиксной нотации (то есть, логический оператор появляется перед своими параметрами). Следующая таблица приводит символы, используемые для того, чтобы создать фильтры.

Символ Описание
& соединение (то есть, и - все в списке должны быть истиной),
| дизъюнкция (то есть, или - одна или более альтернатив должны быть истиной),
! отрицание (то есть, не - отрицаемый элемент не должен быть истиной),
= равенство (согласно соответствующему правилу атрибута)
~= приблизительное равенство (согласно соответствующему правилу атрибута)
>= больше чем (согласно соответствующему правилу атрибута)
<= меньше чем (согласно соответствующему правилу атрибута)
=* присутствие (то есть, у записи должен быть атрибут, но его значение не важно),
* подстановочный знак (указывает на нуль или больше символов, может произойти в той позиции); используемый, определяя значения атрибута, чтобы соответствовать
\ escape (для того, чтобы выйти '* ', '(', или')', когда они происходят в значении атрибута),

Каждый элемент в фильтре составляется, используя идентификатор атрибута и или значение атрибута или символы, обозначающие значение атрибута. Например, элемент, "sn=Geisel" означает, что у атрибута "sn" должно быть значение атрибута "Geisel" и элемент "mail=*", указывает, что атрибут "mail" должен присутствовать.

Каждый элемент должен быть включен в пределах ряда круглых скобок, как в "(sn=Geisel)". Эти элементы составляются, используя логические операторы, такие как "&" (соединение), чтобы создать логические выражения, как в "(& (sn=Geisel) (mail=*))".

Каждое логическое выражение может быть далее составлено из других элементов, которые непосредственно являются логическими выражениями, как в "(| (& (sn=Geisel) (mail=*)) (sn=L*))". Этот последний пример запрашивает или записи, у которых есть и атрибут "sn" "Geisel" и атрибут "mail" или записи, атрибут "sn" которых начинается с буквы "L".

Для полного описания синтаксиса см. RFC 2254.

Возврат Выбранных Атрибутов

Предыдущий пример, возвращенный все атрибуты, связанные с записями, которые удовлетворяют указанный фильтр. Можно выбрать атрибуты, чтобы возвратиться, устанавливая параметр средств управления поиском. Вы создаете массив идентификаторов атрибута, которые Вы хотите включать в результат и передать его к SearchControls.setReturningAttributes(). Вот пример.

// Specify the ids of the attributes to return
String[] attrIDs = {"sn", "telephonenumber", "golfhandicap", "mail"};
SearchControls ctls = new SearchControls();
ctls.setReturningAttributes(attrIDs);

Этот пример эквивалентен Возврату Выбранный пример Атрибутов в Основном разделе Поиска. Выполнение this example приводит к следующим результатам. (У записи нет атрибута "golfhandicap", таким образом, она не возвращается.)

# java SearchWithFilter
>>>cn=Ted Geisel
attribute: sn
value: Geisel
attribute: mail
value: Ted.Geisel@JNDITutorial.example.com
attribute: telephonenumber
value: +1 408 555 5252

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Основной Поиск
Следующая страница: Контекст