1. 程式人生 > >Sqlserver2008及以上使用全文索引排除干擾詞 (轉載)

Sqlserver2008及以上使用全文索引排除干擾詞 (轉載)

關於SQLServer2008全文索引干擾詞
使用SQL SERVER 2008全文索引
進行搜尋 contains(Keywords, '"xx of xx*"') (注意是後面有包含"*"號的查詢),由於包含了類似"of","and","or"等這類預設的全文索引干擾詞,導致查詢不到結果。
可以按如下方法解決:
1.自定自己的干擾詞庫

可以按如下方法解決:1.自定自己的干擾詞庫

--建立全文非索引字表(干擾詞表)
CREATE FULLTEXT STOPLIST T_FULLTEXT_STOPLIST_TableName --全文非索引字表表名
FROM SYSTEM STOPLIST; --
從系統全文非索引字表匯入 --刪除我們不需要的干擾詞,如"of"字 ALTER FULLTEXT STOPLIST [T_FULLTEXT_STOPLIST_TableName] DROP 'of' LANGUAGE 'Simplified Chinese'; --增加我們需要的干擾詞,如"of"字 ALTER FULLTEXT STOPLIST [T_FULLTEXT_STOPLIST_TableName] ADD 'of' LANGUAGE 'Simplified Chinese'; 由於此方法有點麻煩,所以我就沒去具體測試了。

2.直接關閉干擾詞功能

-
設定關閉全文索引干擾詞 ALTER FULLTEXT INDEX ON [TableName] SET stoplist OFF --如果要再開啟,可以這樣設定開啟全文索引干擾詞 ALTER FULLTEXT INDEX ON [TableName] SET stoplist SYSTEM 如果執行以上語句出現瞭如下錯誤: 'stoplist' 附近有語法錯誤。 或 Incorrect syntax near 'STOPLIST'. 那是因為SQL Server相容級別的問題,解決方法為,執行以下語句: --改變SQL相容性版本80 = SQL Server 2000, 90 = SQL Server 2005, 100 = SQL Server 2008...
ALTER DATABASE DatabaseName SET COMPATIBILITY_LEVEL = 100

 

在網上查了很多關於全文索引查不到資料的問題。
上面說是干擾詞的問題,需要修改相應的檔案,但是SQL2008的檔案又和SQL2005版本的位置什麼的不一樣,需要用SQL語句進行修改,但是用SQL語句提示沒有許可權,或乾脆找不到這些檔案,改了也不管用等,所以SQL2008干擾詞的問題很令人頭疼。而且很難找到一個好的解決辦法。
 
在這裡,有一個新的辦法,可以解決或避開這些麻煩的問題。
 
關鍵:你所建立的全文索引,如果是手動建立的,沒有給他指定干擾詞表,那麼他就會自動的指定系統的干擾詞表。
 
所以,要手動建立一個屬於自己的干擾詞表,不用系統的了,因為上面提到過,它很麻煩。
 
語句:
CREATE FULLTEXT STOPLIST MyFsyTable --全文非索引字表表名(也就是干擾詞表)
FROM SYSTEM STOPLIST; --從系統全文非索引字表匯入
 
--下面是刪除你想刪除的干擾詞
ALTER FULLTEXT STOPLIST MyFsyTable 
DROP '' LANGUAGE 'Simplified Chinese';
 
最後,在你建立的表上右鍵-全文索引-屬性-常規-全文索引非索引字表(也就是干擾詞表)-下拉框選擇你剛才建立的干擾詞表
 
好了,如果你的全文索引是自動填充的,等待它填充完畢,或者手工重新完全填充。
 
最後,查詢,大功告成了!

 

原文連結