FullText Search 全文檢索筆記

FullText Search 全文檢索筆記

嗯…還在跟SharePoint的Search奮鬥,為什麼 "平台" 找得到 "平" 或 "台" 找不到,為什麼圖檔 eSATA.png 使用 "eSATA" 找得到, "SATA" 卻找不到… 諸如此類的疑問…

本想說,應該是客製化可以解決吧,所以試了KeywordQuery這類的Class,寫完後發現,問題的根本好像不在此喔…就這樣,往SQL Server 2005全文檢索 (FullText Search) 撩下去吧…

對於此篇如果有共鳴的朋友,歡迎任何的回應與討論(特別是對SharePoint搜尋詞與字的問題)不勝感激…

本篇僅對FullText Search的學習過程做一個記錄…免得自己忘記了… XD

本篇您將瞭解:

1. 全文檢索的限制

2. 了解SQL Server FullText Search

3. 全文檢索概念與同義字

4. 一些關於全文檢索的T-SQL

1. 全文檢索的限制

昨晚,看到了這個篇問題 SQL Server 2005 => 全文檢索 => 同義字 問題請教~~ 讓小弟才比較能意會為什麼會有前述的情況,找到了下面幾篇關於FullText的架構

2. 了解SQL Server FullText Search

Understanding SQL Server Full-Text Indexing

這篇從SQL Server 2000講起,算是一篇很不錯的概觀,其中講到使用FullText Search架構在Microsoft Search Service上…什麼是Microsoft Search Service? 服務裡面找不到阿…

Making Sense of SharePoint Search

也提到Microsoft Search Service (MSSearch)是SQL Server、Exchange、SharePoint搜尋的基礎,到底是甚麼阿… = =

後來,在: 基于Microsoft Search Service????自建?据??建Web全文?索系? 找到了,原來是SQL Server 2000的全文檢索服務,也難怪(感謝經理不辭辛勞的幫小弟空運來台… T.T )

不過,SQL Server 2005還叫做Microsoft Search Service嗎?

3. 全文檢索與同義字

截至目前為止,還沒真正解決問題,所以,回到資料庫去玩FullText Search,自己建立了一個資料表,隨便key了幾筆資料,測試FullText的T-SQL,其中找到同義字的設定,記錄一下這些資訊

1. 如果要定義同意字,同義字檔案路徑:C: \Program Files \Microsoft SQL Server\MSSQL.1\MSSQL\FTData\tsenu.xml

http://support.microsoft.com/kb/923317/zh-tw

同義字檔內容

<XML ID="Microsoft Search Thesaurus">

<!-- Commented out

<thesaurus xmlns="x-schema:tsSchema.xml">

<diacritics_sensitive>0</diacritics_sensitive>

<expansion>

<sub>Internet Explorer</sub>

<sub>IE</sub>

<sub>IE5</sub>

</expansion>

<replacement>

<pat>NT5</pat>

<pat>W2K</pat>

<sub>Windows 2000</sub>

</replacement>

<expansion>

<sub>run</sub>

<sub>jog</sub>

</expansion>

<expansion>

<sub>平台</sub>

<sub>平坦</sub>

</expansion>

</thesaurus>

-->

</XML>

2. 透過以 CONTAINS 或 CONTAINSTABLE 搜尋條件指定 FORMSOF THESAURUS,即可在搜尋的資料行中找出所有與搜尋詞彙相關聯的同義字。

http://technet.microsoft.com/zh-tw/library/ms142491.aspx

3. CONTAINS (Transact-SQL)

這是一個用來搜尋資料行的述語,這些資料行包含以字元為基礎的資料類型,用來進行下列各種比對:單字或片語完全或部分 (較不精確) 相符、各字相距在一定距離內,或加權相符。

測試範例…

select * from angi

WHERE contains(context,'"平"')

select * from angi

WHERE contains(context,'"*平"')

select * from angi

WHERE contains(context,'"平*"')

select * from angi

WHERE contains(context,'"平台" OR "平"')

select * from angi

WHERE contains(context,' FORMSOF ( THESAURUS, 平) ')

select * from angi

WHERE contains(context,' FORMSOF ( INFLECTIONAL, *平*) ')

其他資源

全文檢索搜尋架構

全文檢索搜尋

同義字

CONTAINS (Transact-SQL)
FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL)

沒頭沒腦的記錄下來…回家… XD