作者: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, 大家以后多試試“順藤摸瓜”吧,不過要是不知道連接著瓜的那根藤就慘了:)
|