Мы используем SharePoint Server 2007, чтобы позволить сотрудникам выполнять поиск в общих сетевых папках, но кажется, что подчеркивание в именах файлов не обрабатывается как разделители слов при индексировании файлов.
В результате поиск шоколад воля:
(Конечно, это упрощенный пример; на практике содержание второго файла может включать слово «шоколад» и совпадать с ним вместо имени файла. Но сама проблема достаточно реальна, потому что распространенный сценарий в корпоративной среде состоит в том, что пользователь знает частичное имя файла, который он ищет, и ожидает увидеть совпадающие имена файлов в верхней части результатов поиска. И использование подчеркивания в именах файлов - широко используемое соглашение в нашей компании).
Подчеркивание также не рассматривается как разделитель слов в содержимом файла, хотя нас это не беспокоит. Основная причина этой проблемы - возможно связанных с поведением средств разбиения по словам, используемых SharePoint (то есть языковых библиотек DLL, реализующих интерфейс IWorkBreaker), хотя я еще не подтвердил это.
Кто-нибудь знает способ решения этой проблемы? Я также тестировал Search Server 2008 Express (который основан на той же технологии), и он тоже пострадал. Не знаю, исправлена ли проблема в SharePoint 2010 или нет.
Я подтвердил, что средство разбиения по словам определяет обработку подчеркивания как для содержимого документа, так и для имен файлов. Средства разбиения по словам настраиваются в реестре для каждого языка.
Средства разбиения по словам реализованы в виде элементов управления ActiveX, и теоретически должно быть возможно написать свои собственные (Microsoft Platform SDK для Windows XP включает пример «lrsample»), но у меня нет инструментов для этого. Кажется, что многие средства разбиения по словам, поставляемые Microsoft, рассматривают символы подчеркивания как часть слова, но я нашел один, который разбивает символы подчеркивания: версия 2 средства разбиения по словам для упрощенного китайского языка (chsbrkr.dll - 1,677 824 байта). Обратите внимание, что это поведение отличается от версии 3 средства разбиения по словам на упрощенном китайском, которое поставляется с Search Server 2008 Express и, вероятно, с SharePoint 2007 тоже.
Итак, чтобы получить желаемое поведение при поиске, я настроил поиск SharePoint для использования этого средства разбиения по словам:
"WBDLLPathOverride" = "C:\PROGRA~1\MI54E7~1\12.0\Bin\ChsBrkr2.dll"
(ваш путь может быть другим) и "WBreakerClass" = "{9717fc70-c1bc-11d0-9692-00a0c908146e}"
net stop osearch
с последующим net start osearch
).Помимо обработки символов подчеркивания как разрыва слова, я не уверен, есть ли какие-либо другие существенные различия между chsbrkr.dll и стандартным английским средством разбиения по словам, но пока это не вызвало у меня никаких проблем. Было бы замечательно, если бы существовал способ применить настраиваемое средство разбиения по словам к определенным управляемым свойствам (в данном случае Path), но я не знаю, возможно ли это. В таблице MSSManagedProperties базы данных есть столбец с многообещающим названием «WordBreakerOverride», но я не знаю, какова его цель.
НОТА: В SharePoint 2010 управляемые свойства, по-видимому, имеют дополнительный параметр SplitStringCharacters, который вполне может сделать этот обходной путь устаревшим.
Я не думаю, что символы подчеркивания рассматриваются как разделители, и небольшой трафик на social.technet, кажется, подтверждает это. Если (с тех пор) это так, вам понадобится частичный поиск или поиск с подстановочными знаками, чтобы найти «шоколад» из «chocolate_cake.doc», чего не будет делать основная веб-часть результатов. Однако есть кодовый комплекс веб-часть в 2007 году это именно так.
К вашему сведению, Версия 2010 г. этой же веб-части отмечает, что SharePoint 2010 добавляет поиск с использованием подстановочных знаков при условии, что пользователь вводит звездочку.