SQL?Server的全文搜索功能
一、使用SQL Server全文搜索配置
要使用SQL Server的全文搜索服務,需要進行如下配置。
1、開啟全文搜索服務:
2、開啟數(shù)據(jù)庫的全文索引功能:
--開啟數(shù)據(jù)庫的全文搜索功能 EXEC sp_fulltext_database 'enable';
3、創(chuàng)建全文索引目錄:
--創(chuàng)建全文索引目錄 CREATE FULLTEXT CATALOG IndexCatalog ON FILEGROUP [PRIMARY] IN PATH 'E:\SQLServerIndex' AS DEFAULT
4、創(chuàng)建唯一索引:
--創(chuàng)建唯一索引 CREATE UNIQUE NONCLUSTERED INDEX IndexContent ON Article(ArticleContent ASC)
5、創(chuàng)建全文索引:
--創(chuàng)建全文索引 CREATE FULLTEXT INDEX ON Article (ArticleContent) KEY INDEX IndexContent ON IndexCatalog --IndexContent是唯一索引名
二、使用全文搜索
CONTAINS搜索方式
1.簡單詞搜索
- 搜索一個或多個特定的詞或短語。詞可以包括一個或多個字符,中間沒有空格或標點。短語可以由空格分隔的多個詞組成,但詞之間可以有標點也可以沒標點:
--搜索文章內(nèi)容含有張三或者李四的記錄 SELECT * FROM Article WHERE CONTAINS(ArticleContent,'"張三" OR "李四"')
2.前綴詞搜索的方式
- 搜索指定文本開頭的詞或短語,前綴詞的搜索方式主要是用在搜索英文中,例如搜索以“do”開頭的單詞,則可以將doctor、document、download等單詞都搜索出來。
--搜索文章內(nèi)容中含有以'認'開始的詞的記錄 SELECT * FROM Article WHERE CONTAINS(ArticleContent,'"認*"') --認為,認識
3.加權(quán)詞搜索的方式
- 給多個搜索條件加上權(quán)值,加權(quán)值越高的記錄排在越前面,當以多個字符串作為搜索條件搜索記錄時,可以為不同的字符串加上一個加權(quán)值,這個加權(quán)值是介于0和1之間的數(shù)值,加權(quán)值越高的記錄排在越前面。事實上在該SELECT語句的返回結(jié)果集里,并沒有按加權(quán)值的大小來排序,因為WEIGHT不影響CONTAINS查詢的結(jié)果,只會影響CONTAINSTABLE查詢中的排序:
--在CONTAINS搜索中,權(quán)重并不影響排序 SELECT * FROM Article WHERE CONTAINS(ArticleContent,'ISABOUT ("北京" weight(0.9),"上海" weight(0.6),"廣州" weight(0.5))')
4.鄰近詞搜索的方式
- 可以搜索與另一個詞或短語相鄰近的詞或短語:
--搜索文章內(nèi)容中第二個詞在第一個詞附近的記錄 SELECT * FROM Article WHERE CONTAINS(ArticleContent,'"張三" NEAR "李四"')
FREETEXT搜索方式
FREETEXT搜索方式與CONTAINS搜索方式相比,其搜索結(jié)果表現(xiàn)都十分不精確,因為FREETEXT的搜索方式是將一個句子中的每個單字拆分開進行搜索的。使用CONTAINS搜索方式搜索條件為“教育部”的記錄,那么搜索出來的將是記錄里包含“教育部”三個字符串的記錄。
--搜索文章內(nèi)容中包含'程'字和'社'字的記錄 SELECT * FROM Article WHERE FREETEXT(ArticleContent,'程社')
CONTAINSTABLE搜索方式
1、CONTAINSTABLE基本搜索:
--CONTAINSTABLE搜索文章內(nèi)容中含有友誼的記錄 SELECT * FROM CONTAINSTABLE(Article,ArticleContent,'友誼') as table1
留意到返回中指包含了兩個字段:
其實就是CONTAINSTABLE表中的數(shù)據(jù)。
2、CONTAINSTABLE返回所需列:
--CONTAINSTABLE搜索返回所需列 SELECT * FROM Article JOIN CONTAINSTABLE(Article,ArticleContent,'"環(huán)境"',2) as table1 ON Article.ArticleContent = table1.[KEY] ORDER BY table1.RANK DESC
3、CONSTAINSTABLE按符合條件排序
--按符合條件排序 SELECT * FROM Article JOIN CONTAINSTABLE(Article,ArticleContent,' "泰國" NEAR "高鐵" ',10) as table1 ON Article.ArticleContent = table1.[KEY] ORDER BY table1.RANK DESC
看到查詢結(jié)果的確按符合條件進行了排序:
4、CONSTAINSTABLE按按權(quán)值排序
--權(quán)重值排序 SELECT * FROM Article JOIN CONTAINSTABLE(Article,ArticleContent, 'ISABOUT ("泰國" weight(0.9), "高鐵" weight(0.6), "環(huán)境" weight(0.1))') AS TABLE1 ON Article.ArticleContent = TABLE1.[KEY] ORDER BY TABLE1.RANK DESC
結(jié)果按照權(quán)重值排序:
使用FREETEXTTABLE搜索
單個字搜索,但是多了參數(shù)可供使用:語法如下:
FREETEXTTABLE (table , { column_name | (column_list) | * } , 'freetext_string' [ ,LANGUAGE language_term ] [ ,top_n_by_rank ] )
示例:
搜索image字段
在SQL Server 2005的image類型的字段里,不僅僅是可以存儲圖形文件,還可以存儲如可執(zhí)行文件、音樂文件、文本文件等眾多文件類型。SQL Server 2005支持對存儲在image類型的字段里的一些文件的內(nèi)容進行全文搜索,但在創(chuàng)建全文索引時必須指明存儲在image字段里的文件的類型。
SQL Server 2005支持對存儲在image中的純文本文件、網(wǎng)頁文件、Word文件、Excel文件和PowerPoint文件的內(nèi)容進行查詢,其擴展名字段必須分別為txt、htm、doc、xls和ppt。全文索引創(chuàng)建完畢后,對image字段里的文件內(nèi)容進行查詢的方法與其他字段的查詢方法是一樣的:
SELECT 編號,標題,文件,擴展名 FROM 文章 WHERE CONTAINS(文件,'數(shù)據(jù)庫')
三、小結(jié)與評價
下面給出這個SQL Server全文搜索的常用SQL語句:
--開啟數(shù)據(jù)庫的全文搜索功能: EXEC sp_fulltext_database 'enable'; --數(shù)據(jù)庫啟用全文索引 --關閉數(shù)據(jù)庫的全文搜索功能: EXEC sp_fulltext_database 'disable'; --數(shù)據(jù)庫禁用全文索引 --如果你忘記了全文索引的目錄、表、列創(chuàng)建過全文索引 EXEC sp_help_fulltext_catalogs --全文索引目錄 EXEC sp_help_fulltext_columns --全文索引列 EXEC sp_help_fulltext_tables --全文索引表
到此這篇關于SQL Server全文搜索的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
查詢Sqlserver數(shù)據(jù)庫死鎖的一個存儲過程分享
利用sp_who_lock這個存儲過程,可以很方便的知道哪個進程出現(xiàn)了死鎖,出現(xiàn)死鎖的問題在哪里2014-07-07sqlserver exists,not exists的用法
exists,not exists的使用方法示例,需要的朋友可以參考下。2009-12-12SQL Server 2005/2008 用戶數(shù)據(jù)庫文件默認路徑和默認備份路徑修改方法
本環(huán)境是SQL Server 2005 Standard Version 64-bit 和 SQL Server 2008 Standard Version 64-bit 雙實例同時安裝在一個2010-04-04
Windows Server 2008 Standard Version 64-bit OS上限制MSSQL使用內(nèi)存的方法(針對內(nèi)存小的云主機)
使用騰訊云Windows云服務器安裝SQL SERVER數(shù)據(jù)庫,在我們使用的過程中,有時候在任務管理器發(fā)現(xiàn)SQL SERVE的進程占用很高的內(nèi)存和CPU,本文介紹如何限制SQL SERVER內(nèi)存占用2023-08-08SQL SERVER函數(shù)之深入表值函數(shù)的處理分析
本篇文章是對表值函數(shù)進行了詳細的分析介紹,需要的朋友參考下2013-06-06SQLServer中數(shù)據(jù)庫文件的存放方式,文件和文件組
上次我關于索引的文章有幾個園友發(fā)站內(nèi)信問我如何將索引和表存儲在不同的硬盤上。我覺的需要專門寫一篇文章來講述一下文件和文件組應該更容易理解2011-12-12