Tag Archives: FTS

SQL 2008 的 iFTS 對於中文的字詞較容易 debug 了

CREATE DATABASE iFTS
GO
USE iFTS
GO

CREATE TABLE tbNews (PK INT IDENTITY NOT NULL,News NVARCHAR(MAX))
ALTER TABLE tbNews ADD CONSTRAINT pk PRIMARY KEY(PK)
GO
CREATE FULLTEXT CATALOG iFTS_News_FTCat;

CREATE FULLTEXT INDEX ON dbo.tbNews
(
        News                         –全文檢索欄位名稱
)
    KEY INDEX pk
    ON iFTS_News_FTCat
    WITH CHANGE_TRACKING AUTO
GO

INSERT tbNews VALUES
(N’海軍陸戰隊中被稱為「黑衣部隊」的特勤部隊,在高雄縣那瑪夏鄉受創最重的民族村救災,因挖土機無法挺進,他們以鼻嗅聞,拿鏟子、臉盆,一鏟一鏟地接力開挖,先後找到三具遺體。民族村有五人死亡,尚有廿一人失蹤。「黑衣部隊」的九名官兵,十日即進駐那瑪夏鄉救災,近日更深入災情嚴重的民族村搜尋罹難者,由於民族村道路中斷,挖土機無法挺進,所有開挖全賴徒手完成。九名官兵前天起,天亮即自民權村渡溪前進民族村,在烈日及大雨交織的天氣下,協助開挖罹難者大體。那瑪夏民族村很多房子,土石流埋到一樓高,當時逃不出的鄉民,多數在一樓,徒手搜尋開挖作業難度倍增。因為已經無法判定遺體的位置,黑衣部隊憑自己的嗅覺來定位挖掘。「看他們拿著鏟子、臉盆,一鏟一鏟地接力開挖,又以鼻子嗅聞罹難者可能方位,辛勞的背影,令人動容。」高雄長庚醫療隊成員之一的王文志感動地說。鄉公所技士也說:「這兩天,這支訓練有素的部隊,中午都是升柴火煮泡麵果腹,操勞數日,從不喊累。」邱技士說,連日來,黑衣部隊天一亮就出發,由北往南挨家挨戶逐樓層搜索,前天找到兩具遺體,昨天一具,本來認為還可找到一具,開挖時因大雨作罷。’),
(N’研究發現,美國首都華盛頓流通的美元紙鈔最毒,95%含有微量古柯鹼毒品,比兩年前提高20%,原因可能和全球經濟衰退,大家壓力升高,增加吸毒有關。達特茅斯麻州大學針對五個國家、30多個都市使用的美元現鈔,進行歷來最大規模的研究,發現美國和加拿大都市使用的紙鈔古柯鹼含量都提高,高達85至90%的紙鈔都含少量古柯鹼。巴西排名第三,80%紙鈔含毒,其後為日本的20%,中國大陸紙鈔含毒量最低,只有12%鈔票受到古柯鹼污染。美鈔含微量古柯鹼,和吸毒的人把古柯鹼放在捲成圓筒狀的紙鈔中,再用鼻子吸進去有關,也和鈔票疊在一起有關。除了華盛頓,美國其他城市如巴爾的摩、波士頓和底特律的紙鈔古柯鹼含量也特別高。主持研究的左躍剛博士說:「我很驚訝的發現鈔票上的古柯鹼愈來愈多。我不知道為什麼增加會這麼明顯,但可能跟經濟衰退有關係,碰到壓力的人求助古柯鹼。」鹽湖城收集到的鈔票是美國最乾淨的紙鈔,鹽湖城是摩門教總部所在地。左躍剛兩年前做過類似研究,當時發現67%的美國紙鈔含微量古柯鹼。左躍剛和報告共同作者認為,紙鈔古柯鹼含量增加,代表吸食毒品的人增加。研究人員估計,美國古柯鹼年銷售額高達700億美元,每年大約有600萬美國人吸食古柯鹼,每年消耗的古柯鹼介於259至447公噸間。癮君子喜歡用5美元、10美元、20美元和50美元的鈔票吸毒,不喜歡用1美元和100美元鈔票,癮君子用過的鈔票有很多管道傳到其他鈔票上,例如,收銀機、自動提款機、點鈔機和日常交易。鈔票上的毒品含量介於0.006毫克到1,240毫克間,如果拿到含有1,240毫克古柯鹼的鈔票,或許會有感覺,因為這樣大約等於50粒砂子的重量。’)

SELECT * FROM tbNews WHERE CONTAINS(News,N’高雄’)
SELECT * FROM tbNews WHERE CONTAINS(News,N’陸戰’)  –找不到,因為拆字詞時,是"陸戰隊",而非"陸戰"

–呈現所有的字詞
SELECT * FROM sys.dm_fts_index_keywords(db_id(‘iFTS’), object_id(‘dbo.tbNews’))

–呈現搜尋時如何拆字
SELECT * FROM sys.syslanguages WHERE name=N’繁體中文’
SELECT * FROM sys.dm_fts_parser(N’海軍陸戰隊中被稱為「黑衣部隊」的特勤部隊,在高雄縣那瑪夏鄉受創最重的民族村救災’,1028,0,0)

CREATE FULLTEXT STOPLIST myStopList;
ALTER FULLTEXT STOPLIST myStopList ADD N’了’ LANGUAGE ‘Traditional Chinese’;

SELECT * FROM sys.fulltext_stoplists
SELECT * FROM sys.fulltext_stopwords
ALTER FULLTEXT INDEX ON tbNews SET STOPLIST myStopList
ALTER FULLTEXT INDEX ON [dbo].[tbNews] START FULL POPULATION
–加入了 stop list 後,既有的索引值不受影響,但查詢時,自動跳過含有 stop list 的值
SELECT * FROM tbNews WHERE CONTAINS(News,N’了’)
SELECT * FROM sys.dm_fts_index_keywords(db_id(‘iFTS’), object_id(‘dbo.tbNews’)) WHERE display_term=N’了’

–重新 population 時,會參考 stop list
TRUNCATE TABLE tbNews
INSERT tbNews VALUES
(N’海軍陸戰隊中被稱為「黑衣部隊」的特勤部隊,在高雄縣那瑪夏鄉受創最重的民族村救災,因挖土機無法挺進,他們以鼻嗅聞,拿鏟子、臉盆,一鏟一鏟地接力開挖,先後找到三具遺體。民族村有五人死亡,尚有廿一人失蹤。「黑衣部隊」的九名官兵,十日即進駐那瑪夏鄉救災,近日更深入災情嚴重的民族村搜尋罹難者,由於民族村道路中斷,挖土機無法挺進,所有開挖全賴徒手完成。九名官兵前天起,天亮即自民權村渡溪前進民族村,在烈日及大雨交織的天氣下,協助開挖罹難者大體。那瑪夏民族村很多房子,土石流埋到一樓高,當時逃不出的鄉民,多數在一樓,徒手搜尋開挖作業難度倍增。因為已經無法判定遺體的位置,黑衣部隊憑自己的嗅覺來定位挖掘。「看他們拿著鏟子、臉盆,一鏟一鏟地接力開挖,又以鼻子嗅聞罹難者可能方位,辛勞的背影,令人動容。」高雄長庚醫療隊成員之一的王文志感動地說。鄉公所技士也說:「這兩天,這支訓練有素的部隊,中午都是升柴火煮泡麵果腹,操勞數日,從不喊累。」邱技士說,連日來,黑衣部隊天一亮就出發,由北往南挨家挨戶逐樓層搜索,前天找到兩具遺體,昨天一具,本來認為還可找到一具,開挖時因大雨作罷。’),
(N’研究發現,美國首都華盛頓流通的美元紙鈔最毒,95%含有微量古柯鹼毒品,比兩年前提高20%,原因可能和全球經濟衰退,大家壓力升高,增加吸毒有關。達特茅斯麻州大學針對五個國家、30多個都市使用的美元現鈔,進行歷來最大規模的研究,發現美國和加拿大都市使用的紙鈔古柯鹼含量都提高,高達85至90%的紙鈔都含少量古柯鹼。巴西排名第三,80%紙鈔含毒,其後為日本的20%,中國大陸紙鈔含毒量最低,只有12%鈔票受到古柯鹼污染。美鈔含微量古柯鹼,和吸毒的人把古柯鹼放在捲成圓筒狀的紙鈔中,再用鼻子吸進去有關,也和鈔票疊在一起有關。除了華盛頓,美國其他城市如巴爾的摩、波士頓和底特律的紙鈔古柯鹼含量也特別高。主持研究的左躍剛博士說:「我很驚訝的發現鈔票上的古柯鹼愈來愈多。我不知道為什麼增加會這麼明顯,但可能跟經濟衰退有關係,碰到壓力的人求助古柯鹼。」鹽湖城收集到的鈔票是美國最乾淨的紙鈔,鹽湖城是摩門教總部所在地。左躍剛兩年前做過類似研究,當時發現67%的美國紙鈔含微量古柯鹼。左躍剛和報告共同作者認為,紙鈔古柯鹼含量增加,代表吸食毒品的人增加。研究人員估計,美國古柯鹼年銷售額高達700億美元,每年大約有600萬美國人吸食古柯鹼,每年消耗的古柯鹼介於259至447公噸間。癮君子喜歡用5美元、10美元、20美元和50美元的鈔票吸毒,不喜歡用1美元和100美元鈔票,癮君子用過的鈔票有很多管道傳到其他鈔票上,例如,收銀機、自動提款機、點鈔機和日常交易。鈔票上的毒品含量介於0.006毫克到1,240毫克間,如果拿到含有1,240毫克古柯鹼的鈔票,或許會有感覺,因為這樣大約等於50粒砂子的重量。’)
SELECT * FROM sys.dm_fts_index_keywords(db_id(‘iFTS’), object_id(‘dbo.tbNews’)) WHERE display_term=N’了’

若要逐字拆,而不要有詞,可參考另外一篇 blog:http://byronhu.spaces.live.com/blog/cns!BF14192BD27975CB!1119.entry

SQL Server 2005/2008 斷字詞 DLL

Windows 2000 後,微軟的全文檢索為了效率,將斷字辭的程式 CHTBRKR.DLL 附上了辭庫,與以往 NT 4 的不同:

  • NT 4 時,是以 “字" 為單位,精準但效率較低,適用在需要精準結果,例如搜尋合約、法規
  • Win 2000 後是以"辭"為單位,效率高,但有些 “字" 的組合會找不到,適用在粗略搜尋,例如提供網站內容的全文檢索

現今 SQL Server 2005/2008 全文檢索會有以下的現象:

  • 文章包含"王建民",搜尋 “建民" 會找不到,因為預設的 CHTBRKR.DLL 會自動判別"王建民"是人名,不個別拆成獨立的字。
  • 文章包含"基隆市長",搜尋 “基隆市" 會找不到,因為會自動拆成 “基隆" 和"市長"二辭。

若想要更換,可以透過以下的網址下載另一個 CHTBRKR.DLL

https://skydrive.live.com/redir.aspx?cid=bf14192bd27975cb&resid=BF14192BD27975CB!1118&parid=BF14192BD27975CB!671