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