SharePoint 搜尋:處理包含底線的檔案名稱

SharePoint 搜尋:處理包含底線的檔案名稱

我們使用 SharePoint Server 2007 來允許員工搜尋網路檔案共用,但在對檔案進行索引時,檔案名稱中的底線似乎不會被視為單字分隔符號。

結果,搜尋巧克力將要:

  • 匹配 ”巧克力奶昔.doc"
  • 但不符合“chocolate_cake.doc”

(當然,這是一個簡化的例子;在實踐中內容第二個檔案的可能包含單字「chocolate」並與其匹配,而不是檔案名稱。但問題本身是很現實的,因為企業環境中的常見情況是用戶知道他們正在尋找的文件的部分名稱,並希望在搜尋結果的頂部看到匹配的文件名。在檔案名稱中使用下劃線是我們公司內廣泛使用的約定)。

下劃線也不被視為文件內容中的單字分隔符,儘管我們對此不太在意。這個問題的根本原因是可能與 SharePoint 使用的斷字系統(即實作 IWorkBreaker 介面的特定於語言的 DLL)的行為有關,儘管我還沒有證實這一點。

有誰知道這個問題的解決方法?我也用Search Server 2008 Express(基於相同的技術)進行了測試,它也受到了影響。我不知道該問題是否在SharePoint 2010中解決。

答案1

我不認為下劃線被視為分隔符,social.technet 上的一些流量似乎證實了這一點。如果(因為)是這種情況,您將需要部分/通配符搜尋來匹配“chocolate_cake.doc”中的“chocolate”,而核心結果 Web 元件不會執行此操作。然而,有一個codeplex網頁部分2007 年的情況正是如此。

僅供參考,2010版該 Web 元件的註解指出,如果使用者鍵入星號,SharePoint 2010 會新增通配符搜尋。

答案2

我已確認分詞系統決定了文件內容和文件名的底線處理方式。斷字系統是在註冊表中根據每種語言進行配置的。

分詞系統是作為 ActiveX 控制項實現的,理論上應該可以編寫您自己的分詞系統(適用於 Windows XP 的 Microsoft Platform SDK 包括一個範例「lrsample」),但我手邊沒有工具來執行此操作。似乎微軟提供的許多分詞器都將下劃線視為單字的一部分,但我確實找到了一個可以在下劃線上斷開的分詞器:簡體中文分詞器的版本 2(chsbrkr.dll - 1,677,824 位元組)。請注意,此行為與簡體中文分詞系統的版本 3 不同,後者是隨 Search Server 2008 Express 提供的,也可能是 SharePoint 2007 提供的。

因此,為了獲得我想要的搜尋行為,我已將 SharePoint 搜尋配置為使用此分詞系統:

  1. 將 DLL 複製到 C:\Program Files\Microsoft Office Servers\12.0\Bin\chsbrkr2.dll
  2. 使用 regedit 瀏覽至 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office Server\12.0\Search\Setup\ContentIndexCommon\LanguageResources\Default
  3. 對於相關語言,在我的例子中為“英語(英國)”和“英語(美國)”,修改以下鍵:( "WBDLLPathOverride" = "C:\PROGRA~1\MI54E7~1\12.0\Bin\ChsBrkr2.dll"您的路徑可能不同)和 "WBreakerClass" = "{9717fc70-c1bc-11d0-9692-00a0c908146e}"
  4. 重新啟動「Office SharePoint Server 搜尋」服務(可以透過命令列執行,net stop osearch然後執行net start osearch)。
  5. 前往搜尋管理頁面並啟動完整的爬網。

除了將下劃線視為斷字之外,我不確定 chsbrkr.dll 和預設的英文斷字系統之間是否還有其他顯著差異,但到目前為止它還沒有給我帶來任何問題。如果有一種方法可以將自訂分詞器應用於特定的託管屬性(在本例中為路徑),那就太好了,但我不知道這是否可行。資料庫的 MSSManagedProperties 表中有一個名稱很有希望的列,名為“WordBreakerOverride”,但我不知道它的用途是什麼。

筆記:在 SharePoint 2010 中,託管屬性顯然有一個名為 SplitStringCharacters 的附加設置,這很可能會使此解決方法過時。

相關內容