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 部件不会这样做。但是,有一个 codeplexWeb 部件2007 年正是如此。

仅供参考,2010 版同一 Web 部件指出,SharePoint 2010 添加了通配符搜索,只要用户输入星号。

答案2

我已经确认,分词器决定了文档内容和文件名的下划线处理方式。分词器是在注册表中根据每种语言进行配置的。

分词器以 ActiveX 控件的形式实现,理论上应该可以编写自己的分词器(Microsoft Platform SDK for Windows XP 包含一个示例“lrsample”),但我手头没有工具可以这样做。似乎 Microsoft 提供的许多分词器都将下划线视为单词的一部分,但我确实找到了一个在下划线处分词的分词器:简体中文分词器版本 2(chsbrkr.dll - 1,677,824 字节)。请注意,此行为与简体中文分词器版本 3 不同,后者是 Search Server 2008 Express 和 SharePoint 2007 中提供的分词器。

因此,为了获得我想要的搜索行为,我已将 SharePoint Search 配置为使用此分词器:

  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 Search”服务(可以通过命令行运行,net stop osearch然后执行 来完成net start osearch)。
  5. 转到搜索管理页面并启动完整爬网。

除了将下划线视为分词符之外,我不确定 chsbrkr.dll 和默认英语分词器之间是否存在其他重大差异,但到目前为止,它没有给我带来任何问题。如果有一种方法可以将自定义分词器应用于特定的托管属性(在本例中为 Path),那就太好了,但我不知道这是否可行。数据库的 MSSManagedProperties 表中有一个名称很有希望的列,名为“WordBreakerOverride”,但我不知道它的用途是什么。

笔记:在 SharePoint 2010 中,托管属性显然有一个名为 SplitStringCharacters 的附加设置,这很可能使这种解决方法过时。

相关内容