Я надеюсь, что это простой вопрос для любого эксперта по LDAP.
Я использую Java, SearchDirContext's и построитель строк, чтобы собрать запрос, который выглядит следующим образом:
(|(givenName=smith*)(sn=smith*)(middleName=smith*)(mail=smith*)(telephoneNumber=smith*)(buildingName=smith*)(department=smith*)(major=smith*)(minor=smith*))
. Идея состоит в том, чтобы позволить пользователю выполнять поиск по одной строке и получать результаты, соответствующие любому из этих атрибутов.
Запрос завершается успешно, но с неточными результатами. Например, если я ищу себя (я знаю, что моя запись существует) ...
- по фамилии я не получаю результатов
- по имени (для которого должно быть сотни результатов) Я получаю небольшое подмножество (9), которое не включает мою запись.
Я хотел бы сначала устранить любую возможность для проблем с моим запросом, если вы хотите получить дополнительную информацию / фрагменты кода выполнения кода, дайте мне знать, и я могу предоставить его.
Также имейте в виду, что я решительный сторонник правильного поведения и готов изменить любую часть моего кода, чтобы сделать ее более эффективной.
------------------- (РЕДАКТИРОВАТЬ) Таким образом, синтаксис правильный .... (РЕДАКТИРОВАТЬ) ------------- -------
Вот код вокруг моего запроса, возможно, это может определить, обрезаются ли мои результаты.
try {
context = ldapPooler.getContext(); // Returns a custom SearchDirContext object wrapping a javax.naming.DirContext.
SearchControls controls = new SearchControls();
controls.setCountLimit(maxResultCount);
Integer resultCount = 0;
// They try block is from an example found at
// http://www.java2s.com/Code/Java/JNDI-LDAP/howtoperformasearchandlimitthenumberofresultsreturned.htm
// The goal was to limit the results.
try {
logger.debug("Finished w/the search string: " + ldapSearchString);
@SuppressWarnings("unchecked")
NamingEnumeration<SearchResult> result = context.search("ou=People", ldapSearchString, controls);
// SearchDirContext.search simply calls DirContext.search with the passed attributes.
while (result.hasMore()) {
searchResults.add(result.next());
resultCount++;
}
logger.debug("Found results: " + resultCount);
} catch (LimitExceededException lee) {
logger.debug("Caught LimitExceededException w/resultCount: " + resultCount);
if (resultCount == maxResultCount) {
logger.debug("Found " + resultCount + " results.");
} else {
logger.debug("In the else....not throwing an exception. Found " + resultCount + " results.");
}
} finally {
context.close();
}
} catch (NamingException ne) {
logger.error("Caught a NamingException while gettingContactCardsBySearchString(" + searchString + ")");
throw new LdapLookupFailedException(ne);
} catch (Exception e) {
logger.error("Caught Exception while gettingContactCardsBySearchString(" + searchString + ")");
throw new LdapLookupFailedException(e);
}