2012-03-05 175 views
15

我對AD和LDAP查詢的知識非常有限,所以我對如何使用通配符有一個簡單的問題。在LDAP搜索過濾器/查詢中使用通配符

應該有物體的顯示名「ITSM - 問題管理」

我目前的實施情況,通配符的過濾器是這樣的:

(displayName=SEARCHKEYWORD*) 

如果用戶將輸入的關鍵字「問題」,他將無法找到該對象,因爲它需要名稱的第一部分,即「ITSM-」

我想在兩端實施通配符,如下所示:

(displayName=*SEARCHKEYWORD*) 

理想情況下,這將允許輸入「問題」並讓它搜索「ITSM - 問題管理」。但是,當你在開始時使用通配符似乎不起作用。當我嘗試它時,它似乎只是掛斷而不返回任何結果。

關於如何解決此問題的任何想法或想法?任何意見將不勝感激。謝謝!

+1

您應該通知目錄管理員您打算使用子字符串過濾器來確保目錄服務器已正確配置。另請參閱[LDAP:編程實踐](http://ff1959.wordpress.com/2011/10/27/ldap-programming-best-practices/)。 – 2012-03-05 15:51:19

+0

出於好奇,「ITSM」代表什麼?我知道一個特定的ITSM,但我懷疑它和你的一樣...... – ErikE 2012-10-22 21:29:11

+0

@ErikE對於我的回覆中延遲的ITSM = IT服務管理抱歉。適用於IT運營的政策和流程:) – AnimaSola 2012-11-22 00:17:00

回答

21

的濾波器參數與尾隨*可以幾乎在瞬間經由索引查找來評價。主導*意味着通過索引進行順序搜索,因此它是O(N)。這將需要很長時間。

我建議你重新考慮這個要求。

+0

看起來你是正確的與領先的通配符年齡,我搜索了一個特定的對象,它的全名,它仍然沒有解決搜索,我不認爲它會永遠。謝謝! – AnimaSola 2012-03-06 02:26:41

+0

我一直都在使用這種搜索方式,並且沒問題,只需要像ObjectClass這樣過濾:'(&(ObjectClass = Person)(cn = * KEYWORD *))' – 2014-02-28 15:05:32

+0

@ManuelGutierrez時間仍然是* O(N )*,但由於額外的'objectClass'過濾器,您現在正在處理更小的* N. * – EJP 2014-04-24 07:07:35

1

這應該工作,至少根據MSDN網絡上的Search Filter Syntax文章。

您注意到的「掛斷」可能只是一個延遲。嘗試運行範圍較窄的相同查詢(例如測試對象所在的特定OU),因爲如果針對所有AD對象運行它,可能需要很長時間才能處理。

你也可以嘗試過濾器分離成兩個部分:

(|(displayName=*searchstring)(displayName=searchstring*)) 
+0

我試過上面的過濾器來搜索一個特定的對象,因爲我輸入了整個名稱,並且搜索需要很長時間。我認爲它永遠不會解決。 EJP評論說領先的通配符可能需要很長時間纔是正確的。 雖然感謝您的回覆,謝謝! :) – AnimaSola 2012-03-06 02:23:34

6

你最好的選擇將是預期的前綴,所以:

"(|(displayName=SEARCHKEY*)(displayName=ITSM - SEARCHKEY*)(displayName=alt prefix - SEARCHKEY*))" 

麻煩,但是我做我的組織內類似的事情。

相關問題