Я думаю, что это ваша проблема:
user.Anr = String.Format("*{0}*", searchterm)
В частности, вы ставите звездочки вокруг вашего поискового запроса. Согласно документации , поисковый запрос будет выглядеть как (anr=Smith)
примерно так:
(|(displayName=smith*)(givenName=smith*)(legacyExchangeDN=smith)(physicalDeliveryOfficeName=smith*)(proxyAddresses=smith*)(Name=smith*)(sAMAccountName=smith*)(sn=smith*))
Обратите внимание, что он уже выполняет поиск типа «начинается с». Помещение ваших собственных символов подстановки приводит их в замешательство.
Точнее, это звездочка в начале. Я проверил это в нашей собственной среде AD. Если я ищу (anr=*Gabriel*)
или (anr=*Gabriel)
, я не получаю результатов. Если я ищу (anr=Gabriel*)
, я получаю результаты, но это действительно не влияет на результаты (результаты такие же, как если бы я искал (anr=Gabriel)
).
Решение состоит в том, чтобы изменить эту строкуна это:
user.Anr = searchterm
Это не совсем эквивалентно поиску «содержит», который, как вам кажется, нужен, но в любом случае размещение подстановочного знака в начале любого поиска действительно снижает производительность. Он больше не может использовать индексы для завершения поиска, поэтому вынужден просматривать каждую учетную запись пользователя в вашем домене.