全文索引
全文索引是基於要編制索引的文字中的各個標記來生成倒排序、堆積且壓縮的索引結構。
每個表或索引檢視只允許有乙個全文索引。該索引最多可包含 1024 列。,該物件中必須有一唯一並且非空的列。
全文索引大小受執行sql server例項的計算機的可用記憶體資源限制。
對全文索引的建立和維護過程 稱為 「索引填充」。索引填充分為:完全填充、基於時間戳的增量式填充、基於更改跟蹤的填充
--確定是否安裝了全文元件。如果已經安裝該服務,此語句返回 1,否則返回 0。
select fulltextserviceproperty('isfulltextinstalled');
--確定已分配給全文的資源使用級別 1(後台)到 5(專用)
select fulltextserviceproperty ('resourceusage');
全文目錄
首先第一步:
為資料庫建立全文目錄。乙個全文目錄可以包含多個全文索引,但乙個全文索引只能用於構成乙個全文目錄。每個資料庫可以不包含全文目錄或包含多個全文目錄。
例如 :
create fulltext catalog my_full_catalog with accent_sensitivity =on as default;
-- 可選項 with accent_sensitivity =on|off 指定該目錄的全文索引是否區分重音。在更改此屬性後,必須重新生成索引。預設情況下,將使用資料庫排序規則中所指定的區分重音設定。若要顯示資料庫排序規則,請使用 select * from sys.databases
第二步:
建立索引(來自聯機幫助):
create fulltext index on table_name
[ ( [ ,...n]
) ]key index index_name
[ on ]
[ with [ ( ] [ ,...n] [ ) ] ]
::=::=
| stoplist [ = ]
}註解:
column_name
全文索引中包含的列的名稱。只能對型別為 char、varchar、nchar、nvarchar、text、ntext、image、xml 和 varbinary 的列進行全文索引
若要指定多個列,請按如下方式重複 column_name 子句:
create fulltext index on table_name (column_name1 […], column_name2 […]) …
type column type_column_name
table_name 中列的名稱,用於儲存 column_name 的文件型別。type_column_name 的型別必須為 char、nchar、varchar 或 nvarchar。僅當 column_name 中的乙個或多個列屬於型別 varbinary(max) 或 image 時,才指定 type_column_name;
key index index_name
table_name 的唯一鍵索引的名稱。key index 必須是唯一的單鍵不可為 null 的列。為全文唯一鍵選擇最小的唯一鍵索引。
fulltext_catalog_name
用於全文索引的全文目錄。資料庫中必須已存在該目錄。此子句為可選項。如果未指定,則使用預設目錄。
filegroup filegroup_name
針對指定的檔案組建立指定的全文索引。該檔案組必須已存在。如果未指定 filegroup 子句,則全文索引位於與基表或檢視相同的檔案組中(對於非分割槽表),或者位於主檔案組中(對於分割槽表)。
change_tracking [ = ]
指定 sql server 是否維護對索引資料的所有更改的列表。更改跟蹤不會記錄通過 writetext 和 updatetext 進行的資料更改
manual
指定是使用 sql server **按計畫傳播更改跟蹤日誌,還是由使用者手動進行傳播。
auto
指定在關聯的表中修改了資料時,sql server 自動更新全文索引。預設值為 auto
off [ , no population]
指定 sql server 不保留對索引資料的更改的列表。
僅當 change_tracking 為 off 時,才能使用 no population 選項。如果指定了 no population,則 sql server 在建立索引後不會對其進行填充。只有在使用者使用 start full 或 incremental population 子句執行 alter fulltext index 命令後,才會填充索引。如果未指定 no population,則 sql server 建立索引後將對其進行完全填充。
stoplist [ = ]
將全文非索引字表與索引關聯起來。不使用屬於指定非索引字表的任何標記填充索引。如果未指定 stoplist,則 sql server 會將系統全文非索引字表與索引關聯起來。
off指定沒有與全文索引關聯的非索引字表
system
指定應對此全文索引使用預設的全文系統 stoplist。
stoplist_name
指定要與全文索引關聯的非索引字表的名稱。使用稱為「非索引字表」的物件在資料庫中管理非索引字。非索引字表是乙個由非索引字組成的列表,這些非索引字在與全文索引關聯時會應用於該索引的全文查詢。若要對全文索引使用非索引字表,需要擁有 reference 許可權。
語法:create fulltext stoplist stoplist_name
[ from | system stoplist ]
[ authorization owner_name ]
stoplist_name
非索引字表的名稱。stoplist_name 最多可包含 128 個字元。stoplist_name 在當前資料庫中的所有非索引字表中必須是唯一的.
建立全文索引時將使用 stoplist_name。
database_name
source_stoplist_name 指定的非索引字表所在的資料庫的名稱。如果未指定,則 database_name 預設為當前資料庫。
source_stoplist_name
指定通過複製現有的非索引字表來建立新的非索引字表。如果不存在 source_stoplist_name,或者資料庫使用者不具有正確的許可權,create fulltext stoplist 將失敗,並返回錯誤。如果源非索引字表的非索引字中指定的任何語言未在當前資料庫中註冊,create fulltext stoplist 將成功,但會返回警告且不會新增相應的非索引字。
system stoplist
指定用預設存在於 resource 資料庫中的非索引字表建立新的非索引字表。
authorization owner_name
指定擁有此非索引字表的資料庫主體的名稱。owner_name 必須是當前使用者所屬的主體的名稱,或當前使用者必須對 owner_name 擁有 impersonate 許可權。如果未指定,則所有權授予當前使用者。
--建立全文非索引字表的三種方式;
1、create fulltext stoplist my_stoplist ---建立新的全文非索引字表
2、create fulltext stoplist next_stoplist from test.my_stoplist ---從現有的全文非索引字表複製全文非索引字表
3、create fulltext stoplist from_system_stoplist from system stoplist ---從系統全文非索引字表複製全文非索引字表
例如:select remarks from t_b where contains|freetext (remarks,'testfulltext')
select remarks from t_b where contains|freetext (remarks,'"wenzhong"or "zhongwen"')
select remarks from t_b where contains|freetext (remarks ,'"zhao*"')
goselect a.remarks, a.loop_int,a.name, b.rank
from t_b as a
inner join containstable|freetexttable (t_b, remarks,
'("zhao" ) or
("wenzhong" )') as b on a.id = b.[key]
where b.rank > 5
and a.name <> 'testfulltext'
order by b.rank desc
---全文搜尋體系結構的各元件 ---------來自聯機幫助
全文非索引字表
為了精簡全文索引,sql server 提供了一種機制,用於去掉那些經常出現但對搜尋無益的字串。這些去掉的字串稱為「非索引字」。在索引建立期間,全文引擎將忽略全文索引中的非索引字。也就是說全文查詢將不搜尋非索引字。
非索引字可以是在特定語言中具有含義的詞,也可以是不具有語言含義的「標記」。例如,在英語中,諸如「a」、「and」、「is」和「the」之類的詞將被排除在全文索引之外,這是因為已經知道它們對搜尋沒有用處。
全文索引 非索引字表
在 sql server 2008 中,使用稱為 非索引字表 的物件在資料庫中管理非索引字。非索引字表 是乙個由非索引字組成的列表,這些非索引字在與全文索引關聯時會應用於該索引的全文查詢。可使用下列任一方法建立非索引字表 僅在相容級別為 100 時才支援 create fulltext stopli...
全文目錄和全文索引的關係
1.全文索引儲存關於重要詞和這些詞在特定列中的位置的資訊。全文查詢利用這些資訊,可快速搜尋包含具體某個詞或一組詞的行。2.全文索引包含在全文目錄中。3.每個資料庫可以包含乙個或多個全文目錄。乙個目錄只能屬於乙個資料庫,而每個目錄可以包含乙個或多個表的全文索引。乙個表只能有乙個全文索引,因此每個有全文...
sql server 全文搜尋(全文索引)
參考 按照鏈結方式建立全文索引 使用 全文查詢使用全文謂詞 contains 和 freetext 以及全文函式 containstable 和 freetexttable 它們支援複雜的 transact sql 語法,這種語法支援各種形式的查詢詞。若要編寫全文查詢,必須了解何時以及如何使用這些謂...