20 SQL Server全文檢索搜尋 20-1 SQL Server全文檢索搜尋 20-2 全文檢索目錄的建立 20-3 建立全文檢索索引

Slides:



Advertisements
Similar presentations
第二章 简单的 SQL 语句. 本章要点  创建一个简单的表  SQL 语句介绍  最简单的查询语句 select  带有限制条件的查询  查询结果的排序显示.
Advertisements

2010 年 6 月课件制作人:王亚楠 1 模块 2 项目开发概论 教学课件 年 6 月课件制作人:王亚楠 2 目录 目标 了解:数据库技术的基本概念与结构 理解:数据模型的分类与结构组成 掌握:关系数据库及 SQL 的基本理论 知识 掌握:数据库设计的方法与步骤 内容 2.1 数据库技术基础.
第 7 章 数据库 1. Overview  数据库概述  数据库管理系统  数据库的体系结构和数据库模型  SQL 语言  数据库技术  构建数据库系统 2.
第八单元 数据库MySQL应用基础 MySQL数据库应用基础 MySQ数据库操作使用 Mysql管理工具 第25章 数据库的增加/删除操作
第6章 数据库管理软件Access 年秋.
第四章 数据库管理和使用.
目 录 第 1 章 数据库技术基础 第 2 章 SQL Server基础 第 3 章 数据库管理 第 4 章 查询和视图
SQL的简单查询.
第5章 关系数据库标准语言SQL 主讲:张丽芳.
十一 ASP对数据库的访问.
第2讲 Transact-SQL语言.
第5章 索引及视图操作 数据库原理应用与实践 SQL SERver2014(第2版) 主编 贾铁军 科学出版社 编著 陈国秦 万程 邢一鸣
第8章 SELECT敘述的基本查詢 8-1 SELECT查詢指令 8-2 SELECT子句 8-3 FROM子句 8-4 WHERE子句
数据库原理及应用 《数据库原理及应用》课程组 荆楚理工学院.
第14章 預存程序 14-1 預存程序的基礎 14-2 建立與執行預存程序 14-3 預存程序的參數傳遞 14-4 預存程序的傳回值
第4章 关系数据库标准语言SQL 4.1 SQL语言概述 4.2 SQL数据查询功能 4.3 SQL数据操作功能 4.4 SQL数据定义功能.
第3章 SQL的基础知识 数据库管理及应用 3.1 SQL简介 3.2 SQL的数据模型 3.3 标识符 3.4 使用SQL语句管理数据库
数据库概述 简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server、MySQL等诸多优秀的数据库。在这一章中将讲解的内容包括。
第一讲 数据查询优化.
创建数据库 MySql创建数据库的语法: CREATE DATABASE 数据库名; 例: CREATE DATABASE mydb;
第三章 管理信息系统的技术基础 主要内容: 数据处理 数据组织 数据库技术 4. 计算机网络.
计算机应用基础 上海大学计算中心.
第3章 数据查询与SQL命令.
第7章 建立資料表與完整性限制條件 7-1 資料型別 7-2 資料表的建立 7-3 建立完整性限制條件 7-4 修改與刪除資料表
第五讲 利用视图进行查询优化.
第六章 學習SQL語言.
9 SELECT敘述的進階查詢 9-1 SQL的多資料表查詢 9-2 合併查詢 9-3 集合運算查詢 9-4 子查詢
資料庫系統專題課程 期末報告 --- 全文檢索搜尋
第 8 章 資料的 新增、修改與刪除.
課程名稱:資料庫系統 授課老師:李春雄 博士
第4章 SQL语言基础及数据库定义 4.1 基本概念 4.2 SQL Server 提供的主要数据类型 4.3 数据定义.
Chapter 12 T-SQL 語法與 ASP.NET.
Chap 10 SQL定義、操作與控制指令.
第 11 章 建立檢視表.
第 14 章 預存程序.
第 7 章 建立資料表與 資料庫圖表.
彰化縣政府補助辦理網頁設計資料庫應用班 ASP與資料庫介紹 建國技術學院資管系 饒瑞佶.
第 16 章 觸發程序.
建立/修改/刪除資料表 建立資料表 使用Enterprise Manager工具
实验 2:MS Access QBE Query使用
MySQL数据库基础与实例教程 之 MySQL表结构的管理 郭水泉.
医院职工公费医疗系统.
Ch4.SQL Server 2005資料庫組成員元件介紹
iRepor报表设计基础 IReport安装 普通实体报表 数据结果集报表 工作流主从报表 饼状图报表 柱状图,曲线图报表 条形码报表
SQL Injection (資料隱碼) 學生:a 吳倩瑜 指導教授:梁明章.
数据库技术.
数据库应用技术 SQL Server 2005.
第20章 MySQL数据库.
数据库技术与应用.
ORACLE 第九讲 触发器.
第18章 SQL結構化查詢語言 18-1 SQL語言的基礎 18-2 SQL的查詢指令 18-3 SQL子查詢與合併查詢.
4.2 视图 (1) 视图是一个虚拟表,其内容来自对表查询的基础上。
CS, ZJU 4/18/2019 Chapter 7 数据库.
3.2 Mysql 命令行 1 查看数据库 SHOW DATABASES; 2 创建一个数据库test1 CREATE DATABASE test1; 3 选择你所创建的数据库 USE test1; (按回车键出现Database changed 时说明操作成功!) 4 查看现在的数据库中存在什么表.
6 SQL語言與資料庫建置 6-1 SQL語言的基礎 6-2 SQL Server的資料庫結構 6-3 建立使用者資料庫
3. SQL语言的应用 3.1 SQL历史和优点 3.2 数据查询 3.3 数据操纵.
学习目标 1、什么是表连接 2、表连接类型 3、表连接区别.
查询与视图 蔡海洋.
第14章 SQL数据查询与操纵 内容提要 本章知识点
SQL查询语句 蔡海洋.
本讲内容 SQL 概述 SQL 的查询功能 SQL 的操作功能 SQL 的定义功能.
第三章 SQL Server数据管理.
Chapter8 搜尋引擎之使用 網路應用入門(一) Chapter8 搜尋引擎之使用
第4章 表的创建与维护 4.1 数据类型 4.2 数据完整性约束 4.3 创建数据表 4.4 修改数据表 4.5 删除数据表.
第9章 存储过程的创建和使用 9.1 存储过程简介 9.2 创建存储过程 9.3 修改存储过程 9.4 删除存储过程 9.5 执行存储过程.
8 SELECT敘述的基本查詢 8-1 SELECT查詢指令 8-2 SELECT子句 8-3 FROM子句 8-4 WHERE子句
第9章 视 图 教学提示:用户在查询数据库中的数据时,除了直接查看数据库中的表中的数据以外,还可以通过视图来查看表中的数据,也就是说,视图为用户提供了另外一种查看表中的数据的方式。 视图是一种虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自于定义视图的查询所引用的表,并且在引用视图时动态生成。
11 檢視表的建立 11-1 檢視表的基礎 11-2 建立檢視表 11-3 修改與刪除檢視表 11-4 編輯檢視表的內容.
第4章 数据查询.
第 9 章 查詢資料- 善用 SELECT 敘述.
Presentation transcript:

20 SQL Server全文檢索搜尋 20-1 SQL Server全文檢索搜尋 20-2 全文檢索目錄的建立 20-3 建立全文檢索索引 20-4 修改與刪除全文檢索目錄與索引 20-5 母體擴展的使用 20-6 使用全文檢索搜尋

20-1 SQL Server全文檢索搜尋 20-1-1 全文檢索搜尋的基礎 20-1-2 下載與安裝SQL Server範例資料庫

20-1-1 全文檢索搜尋的基礎-說明 全文檢索搜尋(Full-text Search)可以使用關鍵字尋找SQL Server資料庫中的文字內容資料,一種以特定語言規則為基礎(指分析過濾出文字資料中單字或片語的規則)的單字或片語搜尋。例如:Yahoo!或Google搜尋引擎的搜尋,就屬於一種全文檢索搜尋,可以執行特定單字或單字組合的快速搜尋。 全文檢索搜尋特別適用在各種商務案例,可以用來查詢大量非結構化文字資料。

20-1-1 全文檢索搜尋的基礎- 全文檢索目錄和索引 全文檢索目錄(Full-text Catalogs):在全文檢索目錄包含0至多個全文檢索索引,這些索引資料從2008版開始是儲存在SQL Server資料庫。全文檢索目錄可以方便管理執行全文檢索搜尋所需的眾多全文檢索索引。 全文檢索索引(Full-text Indexes):我們可以針對資料庫的資料表建立全文檢索索引,其內容是儲存單字或片語在指定記錄的位置資訊。簡單的說,SQL Server就是使用這些索引資訊來執行全文檢索搜尋。

20-1-1 全文檢索搜尋的基礎- 架構說明 SQL Server從7.0版開始支援全文檢索搜尋,2005版的全文檢索搜尋和SQL Server資料庫引擎是完全兩個不同的服務,換句話說,舊版全文檢索搜尋架構中,SQL Server資料庫引擎不負責處理全文檢索搜尋,它是由全文檢索搜尋引擎來執行搜尋,然後將結果傳送給資料庫引擎。 目前的「全文檢索搜尋引擎」(Full-text Query Engine)已經整合至SQL Server資料庫引擎,如此可以大幅減少服務之間的資料交換,使用更有效率的最佳化方式來執行全文檢索搜尋。

20-1-1 全文檢索搜尋的基礎-架構圖例

20-1-2 下載與安裝SQL Server範例資料庫 SQL Server安裝程式並不包含AdventureWorks範例資料庫,微軟已經將這些範例資料庫放在GitHub,使用者如果需要,可以自行從GitHub下載和安裝範例資料庫。 本章內容是使用SQL Server的AdventureWorks範例資料庫為例,我們需要先下載和安裝SQL Server範例資料庫。請啟動瀏覽器進入GitHub來下載範例資料庫,如下所示: https://github.com/Microsoft/sql-server-samples/releases/tag/adventureworks

20-1-3 啟用SQL Server的全文檢索搜尋-SQL Server組態管理員 SQL Server需要在SQL Server組態管理員執行「篩選背景程式啟動器服務」(SQL Full-text Filter Daemon Launcher),才能啟動篩選背景程式主機來啟用SQL Server的全文檢索搜尋,如下圖所示:

20-1-3 啟用SQL Server的全文檢索搜尋-系統預存程序(語法) 當啟用SQL Server全文檢索搜尋後,SQL Server資料庫預設啟用全文檢索搜尋,如果發現資料庫沒有啟用用全文檢索搜尋,例如:附加舊版資料庫時,我們可以使用系統預存程序來啟用資料庫的全文檢索搜尋,其基本語法如下所示: EXEC sp_fulltext_database {'enable' | 'disable'} 上述系統預存程序的參數為enable,表示啟用全文檢索搜尋;disable是取消全文檢索搜尋。

20-1-3 啟用SQL Server的全文檢索搜尋-系統預存程序(範例) SQL指令碼檔:Ch20_1_3.sql 使用系統預存程序來啟用【教務系統】資料庫的全文檢索搜尋,如下所示: USE 教務系統 GO EXEC sp_fulltext_database 'enable'

20-2 全文檢索目錄的建立 20-2-1 使用Management Studio建立全文檢索目錄 20-2-2 使用T-SQL指令建立全文檢索目錄

20-2-1 使用Management Studio 建立全文檢索目錄 在「物件總管」視窗展開【資料庫】下【教務系統】資料庫的【儲存體】項目,可以看到【全文檢索目錄】項目。

20-2-2 使用T-SQL指令建立全文檢索目錄-語法 T-SQL語言是使用CREATE FULLTEXT CATALOG指令來建立全文檢索目錄,其基本語法如下所示: CREATE FULLTEXT CATALOG 全文檢索目錄名稱 [ AUHTORIZATION 擁有者名稱] [ AS DEFAULT ] [ WITH ACCENT_SENSITIVITY = { ON | OFF }]

20-2-2 使用T-SQL指令建立全文檢索目錄-範例 SQL指令碼檔:Ch20_2_2.sql 請在【AdventureWorks】資料庫建立名為【產品文件_全文檢索目錄】的全文檢索目錄,並且指定它為預設目錄,如下所示: USE AdventureWorks GO CREATE FULLTEXT CATALOG 產品文件_全文檢索目錄 AS DEFAULT

20-3 建立全文檢索索引 20-3-1 使用Management Studio建立全文檢索索引 20-3-2 使用T-SQL指令建立全文檢索索引

20-3 建立全文檢索索引 在資料庫建立全文檢索目錄後,就可以建立指定資料表的全文檢索索引,我們可以將資料庫中的一至多個資料表建立全文檢索索引。在資料表建立全文檢索索引需要滿足一些條件,如下所示: 資料表需要擁有主索引鍵,或唯一值索引鍵,不過,索引鍵不可以是欄位組合的複合鍵。 每一個資料表只能建立一個全文檢索索引,但是可以包含多個資料表欄位。 建立全文檢索索引的欄位型別只能是:char、varchar、nchar、nvarchar、text、ntext、image、xml和varbinary。

20-3-1 使用Management Studio 建立全文檢索索引 在Management Studio提供SQL Server全文檢索索引精靈來幫助我們建立指定資料表的全文檢索索引,如下圖所示:

20-3-2 使用T-SQL指令建立全文檢索索引-語法 T-SQL語言是使用CREATE FULLTEXT INDEX指令來建立全文檢索索引,其基本語法如下所示: CREATE FULLTEXT INDEX ON 資料表名稱 [ (欄位名稱 [ TYPE COLUMN 型態的欄位名稱] [ LANGUAGE 語言名稱] [, …n ])] KEY INDEX 索引名稱 [ ON 全文檢索目錄名稱 ] [ WITH { CHANGE_TRACKING {MANUAL | AUTO | OFF [, NO POPULATION]}} ]

20-3-2 使用T-SQL指令建立全文檢索索引-範例 SQL指令碼檔:Ch20_3_2.sql 在【AdventureWorks】資料庫的【Product.Document】資料表儲存的是產品文件,我們準備在【產品文件_全文檢索目錄】目錄建立DocumentSummary和Document欄位的全文檢索索引,如下所示: USE AdventureWorks GO CREATE FULLTEXT INDEX ON Production.Document (DocumentSummary, Document TYPE COLUMN FileExtension) KEY INDEX PK_Document_DocumentNode ON 產品文件_全文檢索目錄 WITH CHANGE_TRACKING AUTO

20-4 修改與刪除全文檢索目錄與索引 20-4-1 修改全文檢索目錄 20-4-2 修改與停用全文檢索索引 20-4-3 刪除全文檢索索引 20-4-4 刪除全文檢索目錄

20-4-1 修改全文檢索目錄- 使用Management Studio

20-4-1 修改全文檢索目錄- 使用T-SQL指令(語法) T-SQL語言是使用ALTER FULLTEXT CATALOG指令來修改全文檢索目錄,其語法如下所示: ALTER FULLTEXT CATALOG 全文檢索目錄名稱 { REBUILD [WITH ACCENT_SENSITIVITY = {ON | OFF}] | REORGANIZE | AS DEFAULT }

20-4-1 修改全文檢索目錄- 使用T-SQL指令(範例) SQL指令碼檔:Ch20_4_1.sql 在【教務系統】資料庫重建名為【教務_全文檢索目錄】的全文檢索目錄,如下所示: USE 教務系統 GO ALTER FULLTEXT CATALOG 教務_全文檢索目錄 REBUILD WITH ACCENT_SENSITIVITY = OFF

20-4-2 修改與停用全文檢索索引- 使用Management Studio(修改) 修改全文檢索索引 請啟動Management Studio,在「物件總管」視窗指定全文檢索目錄上,執行【右】鍵快顯功能表的【屬性】指令,可以看到「全文檢索目錄」對話方塊。選【資料表/檢視】頁面,就可以修改全文檢索索引。 換一種方式,我們也可以在指定資料表上,執行【右】鍵快顯功能表的「全文檢索索引>屬性」指令來修改全文檢索索引。

20-4-2 修改與停用全文檢索索引- 使用Management Studio(停用) 對於已經停用的全文檢索索引,在資料表上執行【右】鍵快顯功能表的「全文檢索索引>啟用全文檢索索引」指令即可再度啟用全文檢索索引。

20-4-2 修改與停用全文檢索索引- 使用T-SQL指令(語法) T-SQL語言是使用ALTER FULLTEXT INDEX指令修改與停用全文檢索索引,其語法如下所示: ALTER FULLTEXT INDEX ON 資料表名稱 { ENABLE | DISABLE | SET CHANGE_TRACKING {MANUAL | AUTO | OFF} | ADD (欄位名稱 [ TYPE COLUMN 型態的欄位名稱] [ LANGUAGE 語言名稱] [, …n ]) [ WITH NO POPULATION] | DROP (欄位名稱 [, …n]) }

20-4-2 修改與停用全文檢索索引- 使用T-SQL指令(範例) SQL指令碼檔:Ch20_4_2.sql 修改【員工】資料表的全文檢索索引,新增索引的欄位【身份證字號】,如下所示: USE 教務系統 GO ALTER FULLTEXT INDEX ON 員工 ADD (身份證字號)

20-4-3 刪除全文檢索索引- 使用Management Studio

20-4-3 刪除全文檢索索引- 使用T-SQL指令 T-SQL語言是使用DROP FULLTEXT INDEX指令來刪除全文檢索索引,其基本語法如下所示: DROP FULLTEXT INDEX ON 資料表名稱 SQL指令碼檔:Ch20_4_3.sql 在【教務系統】資料庫刪除【員工】資料表的全文檢索索引,如下所示: USE 教務系統 GO DROP FULLTEXT INDEX ON 員工

20-4-4 刪除全文檢索目錄- 使用Management Studio

20-4-4 刪除全文檢索目錄- 使用T-SQL指令 T-SQL語言是使用DROP FULLTEXT CATALOG指令來刪除全文檢索目錄,其語法如下所示: DROP FULLTEXT CATALOG 全文檢索目錄名稱 SQL指令碼檔:Ch20_4_4.sql 刪除【教務系統】資料庫名為【教務_全文檢索目錄】的全文檢索目錄,如下所示: USE 教務系統 GO DROP FULLTEXT CATALOG 教務_全文檢索目錄

20-5 母體擴展的使用 20-5-1 在SQL Server執行母體擴展 20-5-2 建立母體擴展排程

20-5 母體擴展的使用-說明 母體擴展(Population)就是將資料加入全文檢索索引的程序,換句話說,就是維護全文檢索索引的程序,即在新增或更新記錄後,維護全文檢索索引資料的方式。

20-5 母體擴展的使用-種類 完整母體擴展(Full Population):全部更新重建全文檢索索引。當建立過完整母體擴展後,就可以只執行遞增母體擴展或變更追蹤母體擴展來更新全文檢索索引。 遞增母體擴展(Incremental Population):只更新上一次執行母體擴展後記錄有變動的部分,不過,當使用此類型的母體擴展,建立索引的資料表需要擁有timestamp型別的欄位,以判斷記錄是否更新。 變更追蹤母體擴展(Update Population):使用全文檢索服務的自動追蹤變更功能執行母體擴展,它會自動追蹤資料表的變更,並且將它記錄下來,我們只需執行指令套用變更記錄,即可執行全文檢索索引的變更追蹤母體擴展。

20-5-1 在SQL Server執行母體擴展- 使用Management Studio

20-5-1 在SQL Server執行母體擴展- 使用T-SQL指令(語法) T-SQL語言是使用ALTER FULLTEXT INDEX指令來執行母體擴展,其基本語法如下所示: ALTER FULLTEXT INDEX ON 資料表名稱 { START {FULL | INCREMENTAL | UPDATE} POPULATION | STOP POPULATION }

20-5-1 在SQL Server執行母體擴展- 使用T-SQL指令(範例) SQL指令碼檔:Ch20_5_1.sql 請在【AdventureWorks】資料庫的【Production.Document】資料表啟動完整母體擴展(因為有啟用自動變更追蹤功能,我們需要先停用變更追蹤,才能成功執行完整母體擴展),如下所示: USE AdventureWorks GO ALTER FULLTEXT INDEX ON Production.Document START FULL POPULATION

20-5-2 建立母體擴展排程 SQL Server除了可以自行執行T-SQL指令來手動母體擴展全文檢索索引外,也可以在全文檢索目錄建立母體擴展排程,使用排程在排程到達時,自動執行此目錄下所有全文檢索索引的母體擴展,例如:建立排程在下班時間來母體擴展全文檢索索引。

20-6 使用全文檢索搜尋 20-6-1 使用FREETEXT執行搜尋 20-6-2 使用CONTAINS執行單字搜尋 20-6-3 全文檢索的符合程度搜尋

20-6 使用全文檢索搜尋-說明 當建立好全文檢索目錄與索引後,我們就可以使用T-SQL語言的SELECT指令來執行全文檢索搜尋,主要是在HAVING或WHERE子句建立全文檢索的搜尋條件,或在FROM子句取得合併查詢所需的記錄。 在本節範例的全文檢索搜尋是搜尋英文字,因為英文字搜尋包含衍生字,例如:單複數和不同時式等,但是中文字並沒有衍生字,因為之前建立全文檢索索引時,並沒有指定斷詞工具的語言,所以預設是繁體中文,此時需要將它改為English,才能執行衍生字搜尋。

20-6 使用全文檢索搜尋-指定斷詞工具 請在Management Studio開啟【產品文件_全文檢索目錄】的屬性對話方塊,如右圖所示:

20-6-1 使用FREETEXT執行搜尋-語法 FREETEXT指令敘述可以在指定搜尋條件的句子中,分開執行句子中每一個單字的搜尋,包含完全符合和衍生字,其基本語法如下所示: FREETEXT ({欄位名稱 | 欄位名稱清單 | *}, '搜尋字串') 上述語法的第1個參數是欲搜尋的欄位名稱、欄位名稱清單,「*」代表全文檢索索引的所有欄位。第2個參數是使用單引號括起的搜尋字串,可以是完整句子或空白分隔的多個單字。

20-6-1 使用FREETEXT執行搜尋-範例 SQL指令碼檔:Ch20_6_1.sql 請在【AdventureWorks】資料庫的【Production.Document】資料表使用全文檢索搜尋來搜尋包含'replace pedal'各別單字和衍生字的記錄,如下所示: USE AdventureWorks GO SELECT DocumentNode, DocumentSummary FROM Production.Document WHERE FREETEXT (DocumentSummary, 'replace pedal')

20-6-2 使用CONTAINS執行單字搜尋-語法 上述語法的第1個參數是欲搜尋的欄位名稱、欄位名稱清單,「*」代表全文檢索索引的所有欄位。第2個參數是使用單引號括起的搜尋條件。

20-6-2 使用CONTAINS執行單字搜尋-範例 SQL指令碼檔:Ch20_6_2_01.sql 請在【AdventureWorks】資料庫的【Production.Document】資料表使用全文檢索搜尋來搜尋包含單字bicycle的記錄,如下所示: USE AdventureWorks GO SELECT DocumentNode, DocumentSummary FROM Production.Document WHERE CONTAINS (DocumentSummary, 'bicycle')

20-6-2 使用CONTAINS執行單字搜尋- 使用邏輯運算子(說明) 如果CONTAINS指令敘述搜尋的單字不只一個,我們可以使用AND或OR邏輯運算子來連接,其連接的每一個單字都需要使用雙引號括起。

20-6-2 使用CONTAINS執行單字搜尋- 使用邏輯運算子(範例) SQL指令碼檔:Ch20_6_2_02.sql 請在【AdventureWorks】資料庫的【Production.Document】資料表使用全文檢索搜尋來搜尋包含單字bicycle和pedals的記錄,如下所示: USE AdventureWorks GO SELECT DocumentNode, DocumentSummary FROM Production.Document WHERE CONTAINS (DocumentSummary, '"bicycle" AND "pedals"')

20-6-2 使用CONTAINS執行單字搜尋- 使用萬用字元執行搜尋(說明) 在CONTAINS指令敘述的搜尋條件也可以在英文字首後使用萬用字元「*」來代表任何以此字首開始的單字。例如:pa*表示所有pa字首的單字。

20-6-2 使用CONTAINS執行單字搜尋- 使用萬用字元執行搜尋(範例) SQL指令碼檔:Ch20_6_2_03.sql 請在【AdventureWorks】資料庫的【Production.Document】資料表使用全文檢索搜尋來搜尋包含pa字首單字的記錄,如下所示: USE AdventureWorks GO SELECT DocumentNode, DocumentSummary FROM Production.Document WHERE CONTAINS (DocumentSummary, '"pa*"')

20-6-2 使用CONTAINS執行單字搜尋- 執行衍生字搜尋(說明) 對於英文單字來說,單字擁有現在式、過去式、未來式和單複數等多種衍生字,CONTAINS指令敘述如果需要同時搜尋所有的衍生字,我們需在搜尋條件使用FORMSOF來執行衍生字搜尋,如下所示: CONTAINS (DocumentSummary, 'FORMSOF (INFLECTIONAL, replace)')

20-6-2 使用CONTAINS執行單字搜尋- 執行衍生字搜尋(範例) SQL指令碼檔:Ch20_6_2_04.sql 請在【AdventureWorks】資料庫的【Production.Document】資料表使用全文檢索搜尋來搜尋包含replace衍生字的記錄,如下所示: USE AdventureWorks GO SELECT DocumentNode, DocumentSummary FROM Production.Document WHERE CONTAINS (DocumentSummary, 'FORMSOF (INFLECTIONAL, replace)')

20-6-2 使用CONTAINS執行單字搜尋- 位置接近的字串搜尋(說明) CONTAINS指令敘述的搜尋條件可以搜尋位置接近的兩個單字,例如:在oil單字附近有grease單字,此時是使用NEAR運算子。

20-6-2 使用CONTAINS執行單字搜尋- 位置接近的字串搜尋(範例) SQL指令碼檔:Ch20_6_2_05.sql 請在【AdventureWorks】資料庫的【Production.Document】資料表使用全文檢索搜尋來搜尋包含guidelines單字附近有recommendations單字的記錄,如下所示: USE AdventureWorks GO SELECT DocumentNode, DocumentSummary FROM Production.Document WHERE CONTAINS (DocumentSummary, 'guidelines NEAR recommendations')

20-6-3 全文檢索的符合程度搜尋-說明 符合程度搜尋(Ranked Searching)的搜尋結果會傳回系統自動產生的符合程度等級。在SQL Server可以使用FREETEXTTABLE()和CONTAINSTABLE()函數來建立全文檢索的符合程度搜尋。 不同於本節前的全文檢索搜尋是在WHERE子句建立搜尋條件,FREETEXTTABLE()和CONTAINSTABLE()函數是使用在FROM子句,可以取回滿足搜尋條件的記錄資料。

20-6-3 全文檢索的符合程度搜尋- 建立測試的全文檢索索引 在執行本節的範例前,請先執行Ch20_6_3_01.sql的SQL指令碼檔案,可以建立Production.ProductModel資料表的全文檢索索引,欄位包含Name、CatalogDescription和Instructions,後2個欄位的資料類型是xml。

20-6-3 全文檢索的符合程度搜尋- FREETEXTTABLE()函數(說明) FREETEXTTABLE()函數除了可以傳回滿足搜尋條件的記錄資料外,還會額外傳回KEY和RANK欄位,KEY欄位是全文檢索索引的唯一索引鍵值;RANK欄位則是系統自動產生的符合程度等級(值是0~1000)。其基本語法如下所示: FREETEXTTABLE (資料表名稱, {欄位名稱 | 欄位名稱清單 | *}, '搜尋字串', 語言) 上述語法和FREETEXT類似,只是多了第1個參數的資料表名稱,這就是全文檢索索引所在的資料表,最後一個參數是斷詞工具的語言,以英文來說,就是LANGUAGE 1033。

20-6-3 全文檢索的符合程度搜尋- FREETEXTTABLE()函數(範例1a) SQL指令碼檔:Ch20_6_3_02.sql 請在【AdventureWorks】資料庫【Production.ProductModel】資料表使用合併查詢來進行FREETEXTTABLE()函數的符合程度搜尋,以便搜尋包含'washer weld polish'各別單字的記錄,查詢結果是以RANK欄位進行排序,如下所示: USE AdventureWorks GO SELECT R_Table.RANK,L_Table.ProductModelID, L_Table.Name

20-6-3 全文檢索的符合程度搜尋- FREETEXTTABLE()函數(範例1b) FROM Production.ProductModel L_Table INNER JOIN FREETEXTTABLE(Production.ProductModel, Instructions, 'washer weld polish', LANGUAGE 1033) R_Table ON L_Table.ProductModelID = R_Table.[KEY] ORDER BY R_Table.RANK DESC

20-6-3 全文檢索的符合程度搜尋- CONTAINSTABLE()函數(說明) CONTAINSTABLE()函數的功能和FREETEXTTABLE()函數相當,可以執行符合程度搜尋,其語法和CONTAINS類似,筆者就不重複說明。 不過,CONTAINSTABLE()函數和CONTAINS指令敘述都可以替搜尋條件加上權值(Weight)來執行符合程度搜尋,其指定的權值會影響符合程度的等級,換句話說,CONTAINSTABLE()函數符合程度的搜尋結果是可以透過權值來調整的。

20-6-3 全文檢索的符合程度搜尋- CONTAINSTABLE()函數(語法) 在CONTAINSTABLE()函數和CONTAINS指令敘述替個別單字加上權值是使用ISABOUT指令,其語法如下所示: ISABOUT {搜尋單字} [WEIGHT (權值)] [, …n] 上述語法可以指定各別搜尋單字的權值,權值範圍是在0.0至1.0之間,如果單字不只一個,請使用「,」逗號分隔。

20-6-3 全文檢索的符合程度搜尋- CONTAINSTABLE()函數(範例1a) SQL指令碼檔:Ch20_6_3_03.sql 請在【AdventureWorks】資料庫【Production.ProductModel】資料表使用合併查詢進行CONTAINSTABLE()函數的符合程度搜尋,並且使用ISABOUT來替washer、weld和polish單字加上權值,如下所示: USE AdventureWorks GO SELECT R_Table.RANK,L_Table.ProductModelID, L_Table.Name FROM Production.ProductModel L_Table

20-6-3 全文檢索的符合程度搜尋- CONTAINSTABLE()函數(範例1b) INNER JOIN CONTAINSTABLE(Production.ProductModel, Instructions, 'ISABOUT (washer WEIGHT (1.0), weld WEIGHT (0.5), polish WEIGHT (0.1))') R_Table ON L_Table.ProductModelID = R_Table.[KEY] ORDER BY R_Table.RANK DESC