Spec-Zone .ru
спецификации, руководства, описания, API
|
В дополнение к определению поиска, используя ряд атрибутов, можно определить поиск в форме фильтра поиска. Фильтр поиска является запросом поиска, выраженным в форме логического выражения. Синтаксис фильтров поиска, принятых DirContext.search(), описывается в
Следующий фильтр поиска определяет, что у записей квалификации должны быть атрибут "sn" со значением "Geisel" и атрибут "mail" с любым значением:
(&(sn=Geisel)(mail=*))
Следующий код создает фильтр и значение по умолчанию
// 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.
Предыдущий пример, возвращенный все атрибуты, связанные с записями, которые удовлетворяют указанный фильтр. Можно выбрать атрибуты, чтобы возвратиться, устанавливая параметр средств управления поиском. Вы создаете массив идентификаторов атрибута, которые Вы хотите включать в результат и передать его к
// 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