Sqlserver2008及以上使用全文索引排除干擾詞

關於SQLServer2008全文索引干擾詞

使用SQL SERVER 2008全文索引

進行搜索 contains(Keywords, '"xx of xx*"') (注意是後面有包含"*"號的查詢),由於包含了類似"of","and","or"等這類默認的全文索引干擾詞,導致查詢不到結果。

可以按如下方法解決:

1.自定自己的干擾詞庫

複製代碼
可以按如下方法解決:1.自定自己的干擾詞庫
  1. --創建全文非索引字表(干擾詞表)
  2. CREATE FULLTEXT STOPLIST T_FULLTEXT_STOPLIST_TableName --全文非索引字表表名
  3. FROM SYSTEM STOPLIST--從系統全文非索引字表導入
  4. --刪除我們不需要的干擾詞,如"of"字
  5. ALTER FULLTEXT STOPLIST [T_FULLTEXT_STOPLIST_TableName]
  6. DROP 'of' LANGUAGE 'Simplified Chinese';
  7. --增加我們需要的干擾詞,如"of"字
  8. ALTER FULLTEXT STOPLIST [T_FULLTEXT_STOPLIST_TableName]
  9. ADD 'of' LANGUAGE 'Simplified Chinese';
  10. 由於此方法有點麻煩,所以我就沒去具體測試了。
複製代碼

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
複製代碼

 

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

轉自:https://www.cnblogs.com/jiuge/p/9321321.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章