CS 2.0 中文搜尋修正

Saturday, 24 June 2006 02:10 by admin
CS 從 1.0 開始就對中文搜尋有問題,當搜尋兩個字時,結果為空,搜尋很多字時找不到任何資料,除了一個地方可以正常搜尋,就是 CS.ORG

為何CS.org 可以,但大家安裝後都不行,因為CS.org 有安裝 Enterprise Search Add-on,如果您有相當的財力,可以以買來裝(不過要先升級為 Standard version 才能用),不然就繼續看下文吧

在 cs.org 上 darkthread 兄提供了一個方法給大家修改,請參考 http://darkthread.blogspot.com/2006/04/community-server-20.html ,不過我修改後,除了變成搜尋幾個字都顯示找不到資料,好像沒啥幫助

失望之餘,就想到架一個CS SDK test site來做source code分析,我就開始從頭分析,首先是看資料庫,CS搜尋的暫存都是存在 cs_SearchBarrel ,開啟 cs_SearchBarrel 後可以看到下圖


就出現大家說的CS利用 Hash 搜尋資料,經過測試分析後,其實 Hash 值並沒有任何錯誤與中文相容的問題,那 Hash 的問題在哪裡,您只要多看幾次圖就會發現,中文一次是存一串,Yes,只要您沒打到剛剛好那一串就找不到資料,因為在英文中 This is a book ,CS會分割為 "This" "is" "a" "Book" 存進去,但中文因為中間沒有空格,只會存 "這是一本書" 進去,這樣一看就可知道想利用 Hash 查中文沒希望了,下面是原本 CS Hash 搜尋法的T-SQL指令


再來是分析 darkthread 的程式,其實他的程式並沒有啥大問題,只是有些地方可以再修改
1.判斷有沒有中文利用 System.Text.Encoding.GetEncoding("big5").GetBytesCount(t) 其實可以改成用 System.Text.Encoding.UTF8.GetByteCount(t) ,這樣就不用煩惱繁簡中和日文了

2.用 Like 搜尋時,其實依然可以利用 cs_SearchBarrel ,一來程式碼改的少,二來 cs_SearchBarrel 資料量比較少,搜尋會快一點點(不過用Like 搜尋都是很花資源很慢就是了)

3.原 LIKE '%{0}%' 語法有個 Bug ,少了一個 N 所以我才找不到資料,正確應該是要寫 LIKE N'%{0}%'

完成後語法就變成下方,不過還是有個問題,如果英文不用 Like 查,可能有些還是會找不到就是了



我把我修改好的檔案放在 http://www.ruri.com.tw/cs/files/7/communityserver/entry278.aspx ,有興趣的人可以下載回去研究

新增Community Server專區

Thursday, 8 June 2006 02:05 by admin
為了推廣Community Server中文市場,本站開設Community Server專區,並提供中文Community Server之消息與討論,歡迎您加入討論