2010-01-15 17 views
1

我正在嘗試檢索有關LDAP上的組的數據。由於我需要分頁結果,我需要運行範圍查詢。我的設置使用JNDI連接到LDAP。我試圖運行此查詢如何在LDAP上運行範圍查詢

(&(objectclass=group)(range=1-500)) 

我在做什麼錯?我知道有基於範圍的LDAP查詢,我如何修改此查詢以獲得相同的?

回答

4

好的分頁是一回事,範圍是另一回事。如果有超過1000個條目(至少這是Active Directory中的默認設置),那麼您將從LDAP服務器獲得的結果進行分頁。

MSDN has an article on how to do paged searches in .NET;希望你可以把它翻譯成你的環境。

範圍是something different。當具有多值屬性(通常爲組的屬性member)具有大量值時,可以使用範圍。所以你不能在查詢中有範圍。您需要在訪問多值屬性時指定範圍(然後在訪問指定member;range=1-500的屬性值的代碼中指定member以從該多值屬性中獲取前500個值)。

+0

我使用這種方法來運行範圍查詢嘗試,但似乎無法讓過去的1000個記錄限制屏障。有什麼建議嗎? – 2010-02-16 15:34:31

+0

@RiteshMNayak,據我所知,你需要指定「attr +範圍」的事情,當對LDAP進行查詢而不是真正的屬性。見拉維馬查的答案 – Alexey 2016-07-18 12:29:33

2

而不是簡單分頁控制,如果您的AD是2003版或更高版本,您可以考慮使用虛擬列表視圖控件。虛擬列表視圖提供了高級結果排序選項,併爲您控制搜索結果集的子集提供了更多的權力。

2

這就是你需要查詢得到的結果

int start = 0; 
int step = 1500; 
int finish = 1499; 
boolean finished = false; 
String range; 

String returnedAtts[] = {"member;Range=" + range}; 
searchCtls.setReturningAttributes(returnedAtts); 
NamingEnumeration answer = readableDirContext.search(searchDN, searchFilter, searchCtls);