Поиск в пользовательских профилях не работает на локализованных значениях в SharePoint 2013
-
10-12-2019 - |
Вопрос
Поиск в профилях пользователей не работает над локализованными значениями на SharePoint 2013
привет! Я из России и вчера я пытался поиск пользовательских профилей русским языком. Например, моя фамилия - Мурадов и имя учетной записи - Демо \ Мурадов. Я могу найти себя путем поиска «демонстрация», «Мурадов», но я не могу найти себя «Мурадов».
Для поиска я использовал страницу управления профилями пользователя из центра администрирования и userprofilemanager.search () метода из кода. Я решил выяснить, почему это происходит.
Я был декомпилировал microsoft.office.server.userprofiles Сборка и увидела, что UserProfileManager.search () метод использует сохраненную процедуру
Управление профилями пользователей, используемых этой процедуры тоже (я проверял его с помощью SQL Server Profiler). Я использовал SQL Server Profiler и нашел вызов процедуры, кажется, что
.
exec dbo.proc_Profile_SearchUser @partitionID='0c37852b-34d0-418e-91c6-2ac25af4be5b',@correlationId='00000000-0000-0000-0000-000000000000',@Term1=N'demo'
И было интересно, потому что
.
exec dbo.proc_Profile_SearchUser @partitionID='0c37852b-34d0-418e-91c6-2ac25af4be5b',@correlationId='00000000-0000-0000-0000-000000000000',@Term1=N'muradov' - retrieved my profile
exec dbo.proc_Profile_SearchUser @partitionID='0c37852b-34d0-418e-91c6-2ac25af4be5b',@correlationId='00000000-0000-0000-0000-000000000000',@Term1=N'Мурадов' - my profile not found
Я открываю код для dbo.proc_profile_searchuser и начните расследовать ... и нашел, что есть таблица dbo.profile_searchusertermstats , который хранит мою фамилию как <сильный > «У? Я изменил ценность "???????? Для «Мурадов» в
Я думал, что проблема в сопоставлении SQL Server (она была latin1_general_ci_as_ks_ws), а я удаляю sqlserver и установку с сопоставлением cyrillic_general_ci_as. Но все базы данных SharePoint были созданы с помощью latin1_general_ci_as_ks_ws collation.
Теперь я застрял. Я понятия не имею, что именно я должен сделать с этим, и мне нужна помощь.
conf2. я нашел таблицу userprofilevalue, который хранит значения профиля как sql_variant и когда этот столбец конвертирует в nvarchar (4000) - есть правильные значения («муадов»). ???? '). Даже если я попробую пройти следующее: Выберите «Мурадов» - результат как «??????», но Выберите N'MuRADOV '- результат как «мудав» Проблема еще не решена.
Решение
I have found bug related with this behavior. Steps to fix them:
- Open
[dbo].[proc_Profile_SetSearchUserTerms]
procedure - Check
@changedValues
declaration (varchar) - Alter procedure with
DECLARE @changedValues TABLE (PropertyValue nvarchar(255), Direction int)
- Be happy.