亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

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

2024-08-31 00:58:01
字體:
來源:轉載
供稿:網友
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補丁下載:
    ?displaylang=zh-cn&FamilyID=9032f608-160a-4537-a2b6-4cb265b80766

    注意下載后,執行的時候是解壓,要在解壓后的目錄中執行setup.bat才是真正的安裝

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

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

  d.如果在全文檢索時,你能正常修改干擾詞文件,說明你的全文檢索沒有使用上這個文件
    如果你配置的全文檢索應該要用到這個文件,那就在
    企業管理器--展開你的數據庫--右鍵全文目錄--重建全部全文目錄

3.表中的數據改變后,檢索不到
  方法1. 右鍵你的表--全文索引表--啟用增量填充
  方法2. 右鍵你的表--全文索引表--更改跟蹤,這樣以后的修改會自動填充(有一定延遲)

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美色欧美亚洲高清在线视频| 91在线视频免费| 欧美成人免费在线观看| 久久精品国产99国产精品澳门| 国产又爽又黄的激情精品视频| 国产精品91在线| 亚洲高清色综合| 国产精品高潮呻吟视频| 亚洲第一级黄色片| 日韩欧美一区二区在线| 美日韩在线视频| 久久天天躁狠狠躁夜夜躁2014| 91国在线精品国内播放| 亚洲精品久久久久久久久久久久| 亚洲第一福利网站| 欧美一区二区大胆人体摄影专业网站| 97视频在线观看免费高清完整版在线观看| 欧美日韩在线视频一区二区| 久久精品色欧美aⅴ一区二区| 欧美激情国产日韩精品一区18| 成人av在线天堂| 成人性生交大片免费观看嘿嘿视频| 美女视频黄免费的亚洲男人天堂| 日本a级片电影一区二区| 蜜臀久久99精品久久久久久宅男| 欧美猛男性生活免费| 亚洲91av视频| 久久久999精品视频| 亚洲国产成人一区| 搡老女人一区二区三区视频tv| 日韩av综合网站| 欧美视频免费在线观看| 91精品久久久久久| 亚洲人成电影网站色www| 精品久久久久久中文字幕大豆网| 国产日韩精品电影| 91精品国产综合久久香蕉最新版| 在线观看欧美www| 成人激情视频小说免费下载| 中日韩午夜理伦电影免费| 午夜精品三级视频福利| 有码中文亚洲精品| 在线观看日韩欧美| 亚洲欧美日韩区| 欧美大片免费看| 九九热精品视频国产| 国产精品日本精品| 精品日韩中文字幕| 精品在线欧美视频| 国产丝袜一区二区三区免费视频| 久久中文字幕视频| 在线视频国产日韩| 在线视频日本亚洲性| 亚洲欧美一区二区三区情侣bbw| 国产精品视频中文字幕91| 精品久久久久久久久久久| 亚洲国产精品人久久电影| 伊人亚洲福利一区二区三区| 亚洲第一精品久久忘忧草社区| 精品久久久久久久中文字幕| 1769国内精品视频在线播放| 日韩av影片在线观看| 亚洲免费人成在线视频观看| 亚洲第一国产精品| 97国产精品视频人人做人人爱| 国产亚洲xxx| 疯狂蹂躏欧美一区二区精品| 欧美国产日韩一区二区在线观看| 日韩综合视频在线观看| 一区二区欧美久久| 91在线免费网站| 亚洲欧美中文日韩在线| 九九热这里只有精品免费看| 欧美精品第一页在线播放| 国产亚洲美女精品久久久| 日韩在线免费视频观看| 亚洲老板91色精品久久| 久久亚洲精品网站| 欧美性xxxxx极品| 中文字幕在线国产精品| 亚洲欧美福利视频| 久久99精品久久久久久青青91| 亚洲人成电影在线观看天堂色| 久久久电影免费观看完整版| 日韩一区二区三区国产| 国内精品久久久久久久久| 日韩免费av一区二区| 黑人巨大精品欧美一区二区免费| 成人黄色免费看| 国产亚洲欧美日韩一区二区| 97超级碰碰人国产在线观看| 欧美日韩亚洲视频| 国产成人鲁鲁免费视频a| 久久九九精品99国产精品| 亚洲www在线观看| 日本久久中文字幕| 亚洲一区亚洲二区亚洲三区| 久久天天躁狠狠躁夜夜躁2014| 欧洲亚洲免费在线| 国产午夜精品理论片a级探花| 欧美日韩爱爱视频| 日韩毛片在线观看| 日韩av毛片网| 中文日韩在线观看| 亚洲人成网在线播放| 亚洲国产精久久久久久| 69av在线播放| 欧美老少配视频| 秋霞成人午夜鲁丝一区二区三区| 国产欧亚日韩视频| 成人在线视频福利| 欧美日韩中文字幕在线| 亚洲aⅴ男人的天堂在线观看| 粉嫩老牛aⅴ一区二区三区| 色偷偷av一区二区三区| 久久av在线播放| 超碰精品一区二区三区乱码| 中文字幕九色91在线| 亚洲mm色国产网站| 久久久亚洲福利精品午夜| 国语自产精品视频在线看抢先版图片| 日韩欧美在线视频观看| 欧美寡妇偷汉性猛交| 亚洲欧美国产视频| 久久久精品视频在线观看| 亚洲成色www8888| 一区二区三区美女xx视频| 欧美尤物巨大精品爽| 亚洲女人被黑人巨大进入| 欧美性jizz18性欧美| 91精品久久久久久久久中文字幕| 国产91对白在线播放| 欧美精品在线免费观看| 日韩av免费在线观看| 亚洲国产美女精品久久久久∴| 国产精品2018| 国产精品精品视频一区二区三区| 亚洲伊人成综合成人网| 色爱精品视频一区| 国产精品视频网| 国产欧美日韩精品专区| 日韩av综合网站| 亚洲精品大尺度| 综合欧美国产视频二区| 国产盗摄xxxx视频xxx69| 久久香蕉国产线看观看网| 欧美大片免费观看在线观看网站推荐| 久久国产精品久久国产精品| 91精品久久久久久久久| 国产欧美婷婷中文| 136fldh精品导航福利| 国产一区私人高清影院| 国产在线拍揄自揄视频不卡99| 久久精品国产久精国产一老狼| 亚洲美女激情视频| 欧美激情亚洲自拍| 国产精品毛片a∨一区二区三区|国| xxxx欧美18另类的高清| 国产91精品视频在线观看| 精品精品国产国产自在线| 91免费欧美精品| 全球成人中文在线| 成人国产亚洲精品a区天堂华泰| 日韩欧美在线免费|