web-dev-qa-db-ja.com

LDAP検索フィルター/クエリでのワイルドカードの使用

ADおよびLDAPクエリの知識は非常に限られているため、ワイルドカードの使用方法について簡単な質問があります。

「ITSM-問題管理」のdisplayNameを持つオブジェクトがあると仮定します

現在のワイルドカードを使用したフィルターの実装は次のとおりです。

(displayName=SEARCHKEYWORD*)

ユーザーが「問題」というキーワードを入力すると、名前の最初の部分、つまり「ITSM-」が必要になるため、ユーザーはオブジェクトを見つけることができません。

以下のように両端にワイルドカードを実装したいと思います。

(displayName=*SEARCHKEYWORD*)

理想的には、これにより「問題」を入力し、「ITSM-問題管理」を検索できるようになります。しかし、ワイルドカードは最初に配置したときに機能しないようです。試したところ、ハングアップして、結果が返されなかったようです。

これを解決する方法に関するアイデアや考えはありますか?どんな入力でも大歓迎です。ありがとう!

20
AnimaSola

末尾が*のフィルター引数は、インデックスルックアップを介してほぼ瞬時に評価できます。先頭の*は、インデックス全体の順次検索を意味するため、O(N)です。それには時間がかかります。

要件を再検討することをお勧めします。

26
user207421

あなたの最善の策は、プレフィックスを予測することです。

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

不器用ですが、組織内で同様のことをしています。

7
Rich

これは少なくとも、MSDNネットワークの 検索フィルター構文 の記事に従って動作するはずです。

気付いた「ハングアップ」は、おそらく単なる遅延です。すべてのADオブジェクトに対して実行すると処理に非常に長い時間がかかる場合があるため、同じクエリを狭いスコープ(テストオブジェクトが配置されている特定のOUなど)で実行してください。

また、フィルターを2つの部分に分けてみることもできます。

(|(displayName=*searchstring)(displayName=searchstring*))
1
ShaMan-H_Fel