- 類(lèi)型:數(shù)據(jù)庫(kù)類(lèi)大。594KB語(yǔ)言:中文 評(píng)分:7.7
- 標(biāo)簽:
最近在做全文搜索的內(nèi)容,google了一下全文檢索,發(fā)現(xiàn)了一些問(wèn)題,現(xiàn)在總結(jié)如下:
全文索引和查詢(xún)概念(摘自SQL 聯(lián)機(jī)幫助)
SQL Server 2008 為應(yīng)用程序和用戶(hù)提供了對(duì) SQL Server 表中基于字符的數(shù)據(jù)發(fā)出全文查詢(xún)的功能。在可以對(duì)給定表運(yùn)行全文查詢(xún)之前,數(shù)據(jù)庫(kù)管理員必須對(duì)表創(chuàng)建全文索引。全文索引包括表中一個(gè)或多個(gè)基于字符的列。這些列可以具有下列任何一種數(shù)據(jù)類(lèi)型:char、varchar、nchar、nvarchar、text、ntext、image、xml、varbinary 或 varbinary(max)。每個(gè)全文索引都對(duì)基表中的一個(gè)或多個(gè)列創(chuàng)建索引,并且每個(gè)列都可以具有一種特定語(yǔ)言。從 SQL Server 2008 開(kāi)始,全文搜索支持 50 多種不同語(yǔ)言,比如英語(yǔ)、西班牙語(yǔ)、中文、日語(yǔ)、阿拉伯語(yǔ)、孟加拉語(yǔ)和印地語(yǔ)。有關(guān)支持的全文語(yǔ)言的完整列表,請(qǐng)參閱 sys.fulltext_languages (Transact-SQL)。
對(duì)于每種支持的語(yǔ)言,SQL Server 都提供了特定于語(yǔ)言的語(yǔ)言組件,包括斷字符和詞干分析器以及一個(gè)空同義詞庫(kù)文件。對(duì)于每種全文語(yǔ)言,SQL Server 也提供了一個(gè)文件(“同義詞庫(kù)文件”),您可以在該文件中有選擇地定義特定于語(yǔ)言的同義詞以擴(kuò)展搜索查詢(xún)的范圍。另外,從 SQL Server 2008 開(kāi)始提供系統(tǒng)非索引字表。若要支持特定語(yǔ)言或商業(yè)應(yīng)用場(chǎng)景,您可以通過(guò)添加和刪除非索引字(也稱(chēng)為干擾詞)更改系統(tǒng)非索引字表,并且您可以根據(jù)需要?jiǎng)?chuàng)建附加的非索引字表。
SQL Server 為編寫(xiě)全文查詢(xún)提供了一組全文謂詞(CONTAINS 和 FREETEXT)和行集值函數(shù)(CONTAINSTABLE 和 FREETEXTTABLE)。使用這些全文謂詞和行集值函數(shù),應(yīng)用程序和用戶(hù)可以執(zhí)行各種類(lèi)型的全文搜索,例如搜索單個(gè)單詞或短語(yǔ)(并可以選擇對(duì)結(jié)果集排名),搜索與其他單詞或短語(yǔ)接近的單詞或短語(yǔ),或者搜索特定單詞的同義詞形式。
全文索引、查詢(xún)和同步化最主要的設(shè)計(jì)要求是,在注冊(cè)進(jìn)行全文檢索的所有表上都有一個(gè)唯一的全文鍵列(或者單列主鍵)。全文索引對(duì)使用的重要字及其所在位置進(jìn)行跟蹤。
全文查詢(xún)根據(jù)特定語(yǔ)言(例如,英語(yǔ)或日語(yǔ))的規(guī)則對(duì)詞和短語(yǔ)進(jìn)行操作,從而對(duì)全文索引中的文本數(shù)據(jù)執(zhí)行語(yǔ)言搜索。全文查詢(xún)可以包括簡(jiǎn)單的詞和短語(yǔ),或者詞或短語(yǔ)的多種形式。
全文搜索適用于多種商業(yè)應(yīng)用場(chǎng)景:例如,電子商務(wù)(在網(wǎng)站上搜索項(xiàng)目)、律師事務(wù)所(在法律數(shù)據(jù)庫(kù)中搜索案例記錄)或人力資源部門(mén)(從所存儲(chǔ)的個(gè)人簡(jiǎn)歷中找到符合職位描述的簡(jiǎn)歷)。不管是什么樣的商業(yè)應(yīng)用場(chǎng)景,全文搜索的基本管理任務(wù)和開(kāi)發(fā)任務(wù)是相同的。然而,在給定的商業(yè)應(yīng)用場(chǎng)景中,可以對(duì)全文索引和查詢(xún)進(jìn)行優(yōu)化以使其滿(mǎn)足業(yè)務(wù)目標(biāo)。例如,對(duì)于電子商務(wù)來(lái)說(shuō),最大限度地提高性能可能比對(duì)結(jié)果進(jìn)行排序、檢索的準(zhǔn)確性(實(shí)際上有多少個(gè)現(xiàn)有匹配項(xiàng)是由全文查詢(xún)返回的)或支持多種語(yǔ)言更重要。對(duì)于律師事務(wù)所來(lái)說(shuō),首先需要考慮的可能是返回所有可能存在的匹配項(xiàng)(“返回全部”信息)。
例如,假定有一個(gè)對(duì) DevTools 表的全文索引。全文索引可能指出在 Abstract 列的第 423 個(gè)和第 982 個(gè)單詞處找到了單詞 Microsoft,所在的行與 ProductID 6 關(guān)聯(lián)。該索引結(jié)構(gòu)支持對(duì)所有包含被索引單詞的項(xiàng)進(jìn)行有效檢索,以及高級(jí)檢索操作,如短語(yǔ)檢索和鄰近檢索。
為防止全文索引因包含很多對(duì)檢索沒(méi)有幫助的詞而變得臃腫,a、and、is 或 the 這類(lèi)額外的詞都忽略不計(jì)。例如,指定"the products ordered during these summer months"與指定"products ordered during summer months"是一樣的。有這兩個(gè)字符串的行都會(huì)被返回。
目錄 \Mssql\Ftdata\Sqlserver\Config 下提供了多種語(yǔ)言的干擾詞列表。在安裝帶有全文檢索支持的 Microsoft® SQL Server™ 時(shí)會(huì)創(chuàng)建這個(gè)目錄,并同時(shí)安裝干擾詞文件。干擾詞文件可以編輯。例如,高技術(shù)公司的系統(tǒng)管理員可以把單詞 computer 添加到他們的干擾詞表中去。(如果編輯干擾詞文件,則必須在更改生效之前重新填充全文目錄。)下表顯示了干擾詞文件及其相應(yīng)的語(yǔ)言。
干擾詞文件 語(yǔ)言
-------------- ---------
Noise.chs 簡(jiǎn)體中文
Noise.cht 繁體中文
Noise.dat 語(yǔ)言中性
Noise.deu 德語(yǔ)
Noise.eng 英語(yǔ)(英國(guó))
Noise.enu 英語(yǔ)(美國(guó))
Noise.esn 西班牙語(yǔ)
Noise.fra 法語(yǔ)
Noise.ita 意大利語(yǔ)
Noise.jpn 日語(yǔ)
Noise.kor 韓文
Noise.nld 荷蘭語(yǔ)
Noise.sve 瑞典語(yǔ)
在處理全文查詢(xún)時(shí),檢索引擎將滿(mǎn)足檢條件的行的鍵值返回給 Microsoft SQL Server。比如有一個(gè) SciFi 表,其中 Book_No 列是主鍵列。
Book_No Writer Title
-------- ----------- --------------------------
A025 Asimov Foundation's Edge
A027 Asimov Foundation and Empire
C011 Clarke Childhood's End
V109 Verne Mysterious Island
假定想使用一個(gè)全文檢索查詢(xún)來(lái)查找包含單詞 Foundation 的書(shū)名。在本例中,將從全文索引獲得值 A025 和 A027。然后 SQL Server 用這些鍵值和其它欄的信息響應(yīng)該查詢(xún)。
下表顯示了存儲(chǔ)全文索引數(shù)據(jù)所使用的語(yǔ)言。這些語(yǔ)言基于 SQL Server 安裝期間選擇的 Unicode 排序規(guī)則區(qū)域設(shè)置標(biāo)識(shí)符。
Unicode 排序規(guī)則區(qū)域設(shè)置標(biāo)識(shí)符 全文數(shù)據(jù)存儲(chǔ)所用的語(yǔ)言
------------------------------- -----------------------
中文注音符號(hào)(臺(tái)灣) 繁體中文
漢語(yǔ)拼音 簡(jiǎn)體中文
中文筆畫(huà) 簡(jiǎn)體中文
中文筆畫(huà)(臺(tái)灣) 繁體中文
荷蘭語(yǔ) 荷蘭語(yǔ)
英語(yǔ)(英國(guó)) 英語(yǔ)(英國(guó))
法語(yǔ) 法語(yǔ)
通用 Unicode 英語(yǔ)(美國(guó))
德語(yǔ) 德語(yǔ)
德文電話簿 德語(yǔ)
意大利語(yǔ) 意大利語(yǔ)
日語(yǔ) 日語(yǔ)
日語(yǔ) Unicode 日語(yǔ)
韓文 韓文
韓文 Unicode 韓文
西班牙語(yǔ)(現(xiàn)代) 西班牙語(yǔ)
瑞典/芬蘭語(yǔ) 瑞典語(yǔ)
此列表中沒(méi)有的其它所有 Unicode 排序規(guī)則區(qū)域設(shè)置標(biāo)識(shí)符值都映射到使用空格分隔單詞的中性語(yǔ)言單詞的斷字符和詞干分隔符。
說(shuō)明 Unicode 排序規(guī)則區(qū)域設(shè)置標(biāo)識(shí)符設(shè)置用于所有可進(jìn)行全文索引的數(shù)據(jù)類(lèi)型(如 char、nchar 等)。如果為 char、varchar 或 text 類(lèi)型列的排序次序設(shè)置的語(yǔ)言類(lèi)型,不是 Unicode 排序規(guī)則區(qū)域設(shè)置標(biāo)識(shí)符語(yǔ)言,那么在對(duì) char、varchar 和 text 類(lèi)型的列進(jìn)行全文索引和查詢(xún)時(shí),仍然使用 Unicode 排序規(guī)則區(qū)域設(shè)置標(biāo)識(shí)符值。
本文導(dǎo)航
- 第1頁(yè): 首頁(yè)
- 第2頁(yè): 創(chuàng)建全文索引
- 第3頁(yè): 全文索引中的幾個(gè)問(wèn)題