程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQLServer 全文檢索(full-text)語法

SQLServer 全文檢索(full-text)語法

編輯:MSSQL

SQLServer 全文檢索(full-text)語法。本站提示廣大學習愛好者:(SQLServer 全文檢索(full-text)語法)文章只能為提供參考,不一定能成為您想要的結果。以下是SQLServer 全文檢索(full-text)語法正文


sql server 全文檢索有兩種搜刮方法,一種是contains,另外一種是freetext。前者是包括,相似於

like '%症結詞%',後者則是將一段文字分詞今後對每一個詞停止搜刮。

詳細語法:
contains:

SELECT 字段1,字段2
FROM 表名
WHERE contains(字段,'"詞一" or "詞二"')

依據查找成果的類似度排序
SELECT 字段1,字段2
FROM 表名
inner join containstable(表名, 字段,'"詞一" or "詞二"',10) as k
on 表名.id = k.[key]
order by k.RANK DESC


freetext:

SELECT 字段1,字段2
FROM 表名
WHERE freetext(字段,'詞一詞二')

依據查找成果的類似度排序
SELECT 字段1,字段2
FROM 表名
inner join freetexttable(表名, 字段,'詞一詞二',10) as k
on 表名.id = k.[key]
order by k.RANK DESC

上文中freetexttable或containstable的10表現取10條數據

比來搜刮了一下全文檢索,發明了一些成績,如今總結以下:

全文索引和查詢概念(摘自SQL 聯機贊助)

全文索引、查詢和同步化最重要的設計請求是,在注冊停止全文檢索的一切表上都有一個獨一的全文鍵列(或許單列主鍵)。全文索引對應用的主要字及其地點地位停止跟蹤。

例如,假定有一個對 DevTools 表的全文索引。全文索引能夠指出在 Abstract 列的第 423 個和第 982 個單詞處找到了單詞 Microsoft,地點的行與 ProductID 6 聯系關系。該索引構造支撐對一切包括被索引單詞的項停止有用檢索,和高等檢索操作,如短語檢索和臨近檢索。

為避免全文索引因包括許多對檢索沒有贊助的詞而變得癡肥,a、and、is 或 the 這類額定的詞都疏忽不計。例如,指定"the products ordered during these summer months"與指定"products ordered during summer months"是一樣的。有這兩個字符串的行都邑被前往。

目次 \Mssql\Ftdata\Sqlserver\Config 下供給了多種說話的攪擾詞列表。在裝置帶有全文檢索支撐的 Microsoft® SQL Server™ 時會創立這個目次,並同時裝置攪擾詞文件。攪擾詞文件可以編纂。例如,高技巧公司的體系治理員可以把單詞 computer 添加到他們的攪擾詞表中去。(假如編纂攪擾詞文件,則必需在更改失效之前從新填充全文目次。)下表顯示了攪擾詞文件及其響應的說話。

攪擾詞文件      說話 
-------------- ---------
Noise.chs      簡體中文 
Noise.cht      繁體中文 
Noise.dat      說話中性 
Noise.deu      德語 
Noise.eng      英語(英國) 
Noise.enu      英語(美國) 
Noise.esn      西班牙語 
Noise.fra      法語 
Noise.ita      意年夜利語 
Noise.jpn      日語 
Noise.kor      韓文 
Noise.nld      荷蘭語 
Noise.sve      瑞典語 


在處置全文查詢時,檢索引擎將知足檢前提的行的鍵值前往給 Microsoft SQL Server。好比有一個 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 


假定想應用一個全文檢索查詢來查找包括單詞 Foundation 的書名。在本例中,將從全文索引取得值 A025 和 A027。然後 SQL Server 用這些鍵值和其它欄的信息呼應該查詢。

下表顯示了存儲全文索引數據所應用的說話。這些說話基於 SQL Server 裝置時代選擇的 Unicode 排序規矩區域設置標識符。

Unicode 排序規矩區域設置標識符    全文數據存儲所用的說話 
------------------------------- -----------------------
中文注音符號(台灣)              繁體中文  
漢語拼音                         簡體中文  
中文筆劃                         簡體中文  
中文筆劃(台灣)                 繁體中文  
荷蘭語                           荷蘭語  
英語(英國)                     英語(英國)  
法語                            法語  
通用 Unicode                    英語(美國)  
德語                            德語  
德文德律風簿                       德語  
意年夜利語                         意年夜利語  
日語                            日語  
日語 Unicode                    日語  
韓文                            韓文  
韓文 Unicode                    韓文  
西班牙語(古代)                 西班牙語  
瑞典/芬蘭語                      瑞典語  



此列表中沒有的其它一切 Unicode 排序規矩區域設置標識符值都映照到應用空格分隔單詞的中性說話單詞的斷字符和詞干分隔符。

解釋  Unicode 排序規矩區域設置標識符設置用於一切可停止全文索引的數據類型(如 char、nchar 等)。假如為 char、varchar 或 text 類型列的排次序序設置的說話類型,不是 Unicode 排序規矩區域設置標識符說話,那末在對 char、varchar 和 text 類型的列停止全文索引和查詢時,依然應用 Unicode 排序規矩區域設置標識符值。



創立全文索引(以索引image列為例,其他類型字段年夜致一樣)

題目     全文索引image列,全攻略!
作者     pengdali [原作]  
症結字   全文索引 image 


明天“千載難逢”的停電了,看了一天書。早晨弄了一下全文索引,決議把心得貼出來,我盡可能寫的具體,年夜家配合進修,迎接斧正!

1、啟動 Microsoft Search 辦事
   開端菜單-->SQL法式組-->辦事治理器-->下拉筐-->Microsoft Search 辦事-->啟動它

2、
  ..\Microsoft SQL Server\MSSQL\FTDATA\SQLServer\Config\目次裡建一個非空noise.chs文件
  非空noise.chs文件,也有人說是空的noise.chs文件,但我每次都往裡寫幾個沒用的字母。

3、樹立情況
   翻開查詢剖析器-->履行以下劇本:
--------------------------------------------
create database test ---創立test數據庫
use test             ---選擇test數據庫
create table  dali (ID int not null primary key,MyImage image,FileType varchar(255),FileNmae varchar(255)) ---創立dali表
--dali表中 Id,MyImage,FileType 三列是必需的,由於要對image列索引的話,必需要有一個主鍵列,一個image列,一個寄存文件類型的列
--我們曉得在windows體系中文件類型是靠擴大名來辨別的所以FileType列也就是用來放 文件的擴大名
--------------------------------------------

sp_fulltext_database 'enable' --為全文索引啟用數據庫
sp_fulltext_catalog 'My_FullDir', 'create'  ---創立一個叫My_FullDif的全文目次

declare @Key sysname ; select @Key=c.name from syscolumns a,sysconstraints b,sysobjects c where a.id=object_id('dali') and a.name='ID' and a.id=b.id and b.constid=c.id and c.name like 'PK%'
exec sp_fulltext_table 'dali','create','My_FullDir',@Key  ----這兩句是為全文索引,對表停止標志

sp_fulltext_column 'dali','MyImage','add',0x0804,'FileType'  ---這句是指定MyImage列為全文索引列,FileType是類型列
------------------------------------------------
4、在c盤下放一個擴大名為doc的word文件,一個擴大名為xls的excel文件,一個擴大名為htm的網頁文件,個擴大名為bmp的圖片
   共4個,年夜家可依據現實情形放入!

5、拔出數據
  樹立上面這個存儲進程
--------------------------------------------------
CREATE PROCEDURE sp_textcopy 
  @srvname    varchar (30), 
  @login      varchar (30), 
  @password    varchar (30), 
  @dbname      varchar (30), 
  @tbname      varchar (30), 
  @colname    varchar (30), 
  @filename    varchar (30), 
  @whereclause varchar (40), 
  @direction  char(1) 
AS 
/* 這是應用textcopy對象將文件拔出到數據庫中,假如有前台對象可以用前台開辟對象將文件拔出,這裡為了演示 */
DECLARE @exec_str varchar (255) 
SELECT @exec_str='textcopy /S '+@srvname+' /U '+@login+' /P '+@password+' /D '+@dbname+' /T'+@tbname+' /C '+@colname+' /W"'+@whereclause+'" /F"'+@filename+'" /'+@direction
EXEC master..xp_cmdshell @exec_str
----------------------------------------------------

insert dali values(1,0x,'doc','年夜力的doc') ---個中第二列是 0x 它是一個16進制數對應image列,是必需的,不要寫null,第三列是文件類型,既擴大名

sp_textcopy '你的辦事器名','sa','你的暗碼','test','dali','MyImage','c:\年夜力的doc.doc','where ID=1','I'
-------順次參數是:實例名,用戶名,暗碼,數據庫名,表名,image列名,途徑及文件名,前提(你必需包管它只選擇一行),I
---------------------------------------------------------------------------------------------------------------------
insert dali values(2,0x,'bmp','圖片')
sp_textcopy '你的辦事器名','sa','你的暗碼','test','dali','MyImage','c:\圖片.bmp','where ID=2','I' --留意前提是 ID=2

insert dali values(3,0x,'xls','Excel文件')
sp_textcopy '你的辦事器名','sa','你的暗碼','test','dali','MyImage','c:\Excel文件.xls','where ID=3','I' --留意前提是 ID=3

insert dali values(4,0x,'htm','網頁')
sp_textcopy '你的辦事器名','sa','你的暗碼','test','dali','MyImage','c:\網頁.htm','where ID=4','I' --留意前提是 ID=4

----------下面的語句,要包管類型一樣,途徑准確,前提獨一准確應當便可以了

6、填充全文索引

sp_fulltext_table 'dali','start_full' ---第一個參數是表名,第二個參數是啟動表的全文索引的完整填充

7、可以開端你的試驗了

select * from dali where contains(MyImage,'J先生')

select * from dali where contains(MyImage,'海先生')

------END----------
--調試情況:SQLServer2000企業版、Windows2000高等辦事器

全文索引中的幾個成績:

1.搜刮時湧現毛病:
  辦事器: 新聞 7619,級別 16,狀況 1,行 2
  查詢子句只包括被疏忽的詞

  這類情形修正 \Mssql\Ftdata\Sqlserver\Config 下對應說話的攪擾詞列表文件

2.修正了攪擾詞文件,查詢中文時依然湧現上述成績
  a.起首檢討你的SQL有無裝置最新的補釘,檢討的辦法是在查詢剖析器中運轉:
    select @@version
    假如出來的版本號是8.00.760以下,則注解你未裝置sp3的補釘,要裝上.

    SQL補釘下載:
    http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=9032f608-160a-4537-a2b6-4cb265b80766

    留意下載後,履行的時刻是解壓,要在解壓後的目次中履行setup.bat才是真實的裝置

  b.設置裝備擺設全文索引時,單詞斷字符選擇"中文(中國)"

  c.Noise.chs文件中至多有一個單詞,例如:?

  d.假如在全文檢索時,你能正常修正攪擾詞文件,解釋你的全文檢索沒有應用上這個文件
    假如你設置裝備擺設的全文檢索應當要用到這個文件,那就在
    企業治理器--睜開你的數據庫--右鍵全文目次--重建全體全文目次

3.表中的數據轉變後,檢索不到
  辦法1. 右鍵你的表--全文索引表--啟用增量填充
  辦法2. 右鍵你的表--全文索引表--更改跟蹤,如許今後的修正會主動填充(有必定延遲)

4.sql2000才支撐對image列的全文檢索

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved