日期:2009-11-26  浏览次数:21014 次

作者:ASP精品屋 探索者

事件起因:

  好几个月前,我制作的某个网站觉得有必要采用全文索引擎,简单地自己的电脑上测试了一下全文索引,搜索一些英文字符没有问题,但搜索中文时就出现“查询子句只包含被忽略的词”的错误,任何中文都是如此。由于此网站不是很急,也就过去了。近几天,我原来制作好的一个网站需要转移,它使用了全文索引。突然发现新的专业服务器不能搜索中文,由于事情很急,我必须是几天内解决此问题。


错误信息:

  服务器: 消息 7619,级别 16,状态 1,行 2
  查询子句只包含被忽略的词。


错误疑点:

  全文索引在原来的服务器上运行一切正常,新的服务器则在搜索中文时出现上述错误。经过比较,我发现除了硬件条件不一样外,其它的运行环境都相同:
  1. 操作系统均采用Win2000 Server + SP2 简体中文版
  2. 数据库均采用Microsoft SQL Server 2000 + SP1 简体中文版
  3. SQL数据库安装时均采用默认设置,其中默认的排序方式为Chinese_RPC
  4. 数据完全一致,我通过直接附加.mdf数据库和导入数据功能,移植网站均不能正常进行中文全文检索
  5. 数据库的各种排序方式均一样,使用的全文索引语言都是“中文(中国)”,代号兼为2052

  以上的相同点构成了他们在软件上完全的一致性,但为何会出现移植后的网站不能运行呢?

解决过程:

  首先,还是自己来试试各种可能的方法吧

  在两天时间里,我用了以下各种不同的方法。
  1. 删除移植目标服务器上的全部全文索引,然后重做。我发现在重做索引时所花的时间让我不敢相信的短,虽然硬件性能可能有上倍的提高,但全文索引大部分是靠硬盘的性能,竟然只花了一个上午就完成了(原先的重建全文索引需要3 天3夜)。
  2. 我试着将所有的“单词段字符的语言”改为Neutral,既无语言状态,中文总算可以搜索了,但这很让人失望,它将所有没用符号隔开的字母和中文作为一个字儿来看待(比如有一句话“This中dk要我的在顺楞”,只有用搜索词“This 中dk要我的在顺楞”才能检索到,单用“this”或“顺”等字符连个影儿都找不着,这当然不是我的目的)。
  3. 后来我将数据库排序方式改为Chinese_PRC_bin,结果更糟,原来的数据库根本不适合这种方式。
  4. 使用数据库附加和导入方式重建数据库,仍未能成功
  5. 看来只能重装SQL Server软件来试试了。但安装完成后仍不能运行。后来我怀疑是不是跟安装了新版的SP1有关,经测试,与此无关。

  自己不会,还可以问人

  我立即到ChinaASP论坛注册了一个会员“真的很重要”,分别在Joy ASP和“数据库探讨”发了一个同样帖子询问。呆了一会儿,看我帖子的人倒是不少,但没有一人回答。
  几个小时后,我重新登陆论坛,Joy ASP人气太高,帖子挤得太后了,仍然无任何人跟帖,倒是在“数据库探讨”中有人给了一些提示,问我些条件和问题。但都是多余,对我毫无帮助。最后斑主_Rambo言自己亦无能为力,到时问问正斑主再说。一个名为萧湘剑公子的会员要我在搜索字符串前加上N如N'str',我试过了,当然也不行。

  最后还是自己想到了

  我记得有部电视剧“快嘴李翠莲”,其中的案件通过“顺藤摸瓜”最终都水落石出,我冲着这四个字,总算让我摸到了想要的“瓜”-产生中文全文索引不正常的真正原因。
  这里的藤的起点当然就是SQL语句执行所提示的错误“查询子句只包含被忽略的词。 ”,核心词儿是“忽略的词”,我知道忽略的词是指全文索引屏蔽搜索的词儿,比如中文的“的”等。从“忽略的词”这根藤延伸出去,可以有很多:
  1. 所使用的搜索词就是忽略词,当然,我使用的搜索词肯定也就是在目前系统看来正是忽略词无疑。但平时根本不是忽略词的词都成了忽略词就不正常了。
  2. 忽略词包含在名为noise.*的文件中,他们放置在MSSQL的安装目录的“MSSQL\FTDATA\SQLServer\Config”目录下面,比如中文的忽略词放在noise.chs中。
  3. 我突然发现我的电脑上中没有noise.chs,我的电脑也正不能正常使用中文全文索引。
  4. 由于服务器现在不方便连上,我在边上的一台为没安装SQL的电脑上安装了MSSQL,但很失望,安装后没有产生 noise.chs
  5. 我抱着试一试的心情,没想到在C盘的system32目录下找到了一大段的名为noise的文件,我将它们全部复制到MSSQL的安装目录的“MSSQL\FTDATA\SQLServer\Config”下面,期待的奇迹终于出现,中文可以正常使用全文索引了!最后附上一个zip文件,如果你没有此类noise文件,可以在此下载。

  Well, 大家以后多试试“顺藤摸瓜”吧,不过要是不知道连接着瓜的那根藤就惨了:)