天天看點

SQLserver2008全文檢索使用方法七、查詢文法及示例附:文檔修改曆史

一、開啟SQL Full-text服務:

SQLserver2008全文檢索使用方法七、查詢文法及示例附:文檔修改曆史

保證 SQL Full-text Filter Daemon Launcher服務處于開啟狀态,不同版本SQLServer全文檢索服務名稱可能稍有不同,如果服務清單中沒有這個服務,請使用SQLServer安裝CD光牒安裝“全文檢索”元件。

二、 啟用全文檢索

執行SQL語句啟用全文檢索:Execute sp_fulltext_database 'enable'

三、設定全文語言為中文

SQLserver2008全文檢索使用方法七、查詢文法及示例附:文檔修改曆史

在伺服器->屬性->進階中,設定預設全文語言為2052(中文)。

四、建立資料表

在需要全文檢索的資料表中,必須有一列字元型的字段存放檔案類型,例如建表語句中的FileType。必須有一列Varbinary(Max)類型的字段存放檔案内容,例如建表語句中的FileContent。

建表SQL語句示例:

CREATE TABLE SampleBlobTable
(
[PKID] int identity(1,1) primary key,
[FileName] Nvarchar(255) null,
[FileType] Nvarchar(32) null,
[FileContent] VARBINARY(MAX) NULL,
[AddTime] datetime default(getdate())
)
           

五、建立全文索引

步驟1 建立全文索引

在需要全文檢索的資料表上點選右鍵->全文索引->定義全文索引。

SQLserver2008全文檢索使用方法七、查詢文法及示例附:文檔修改曆史

步驟2 選擇唯一索引

SQLserver2008全文檢索使用方法七、查詢文法及示例附:文檔修改曆史

步驟3 選擇表列

SQLserver2008全文檢索使用方法七、查詢文法及示例附:文檔修改曆史

選擇表列,本例中以FileType列标明檔案格式,将檔案存入資料庫時須正确填寫此字段,此字段中的資料内容包括“doc”、“txt”、“xls”等。

後續步驟無需更改預設值,點選下一步繼續直至完成。

六、支援PDF檔案

1.      安裝 Adobe iFilter

Adobe iFilter6.0:

http://www.adobe.com/support/downloads/thankyou.jsp?ftpID=2611&fileID=2457

Adobe iFilter9.0for 64bit:

http://www.adobe.com/support/downloads/thankyou.jsp?ftpID=4025&fileID=3941

2.      執行SQL語句

execsp_fulltext_service 'load_os_resources', 1;

exec sp_fulltext_service'verify_signature', 0;

3.      重新啟動SQLSERVER

4.      檢查支援檔案

執行下列語句:

select document_type,path from sys.fulltext_document_types wheredocument_type ='.pdf',如查詢結果為下圖則表示成功,可以進行PDF的全文檢索了。

l

圖3 執行結果

七、查詢文法及示例

5.      文法

CONTAINS

(

{

column

|

* }

, '

<contains_search_condition >

'

)

< contains_search_condition >::=

{

< simple_term >

| < prefix_term >

| < generation_term >

| < proximity_term >

| < weighted_term >

}

| {

(

<contains_search_condition >

)

{

AND | AND NOT | OR } < contains_search_condition > [ ...

n

]

}

< simple_term > ::=

word

|

" phrase "

< prefix term> ::=

{

"word * "

|

"phrase *

"

}

< generation_term > ::=

FORMSOF ( INFLECTIONAL , < simple_term > [ ,...

n

] )

< proximity_term > ::=

{

< simple_term > | < prefix_term > }

{

{ NEAR | ~ } { < simple_term > | < prefix_term >} } [ ...

n

]

< weighted_term > ::=

ISABOUT

(

{

{

<simple_term>

| < prefix_term >

| < generation_term >

| < proximity_term >

}

[ WEIGHT

( weight_value )

]

}

[

,

...

n

]

)

6.      示例

1.        查找檔案内容含“合同”的資料。

select * from SampleBlobTable where contains(filecontent,'合同')

注意:如果查詢條件中包含空格,查詢條件需用雙引号括起來,如'”合同”',否則視為文法錯誤。

2.        查找檔案内容含“歸檔”或“标題”的資料。

select * from SampleBlobTable where contains(filecontent,'歸檔 OR 标題')

注意:多個詞之間用邏輯操作符連接配接 (包括 AND ,AND NOT,OR)。如果詞中包含空格,那麼這個詞要用雙引号括起來。

3.        查找檔案内容含“北京?站”的資料。

select * from SampleBlobTable where contains(filecontent,'北京Near 站')

注意:上述SQL語句将傳回包含“北京站”、“北京西站”、“北京東站”等“北京”與“站”無間隔或間隔一個漢字(如果是英文則為一個單詞)的資料,不會包含“北京東南站”的資料。

4.        查找所有開頭字母為”hu”的資料。

  select * from SampleBlobTable wherecontains(filecontent,'hu*')

注意:上述SQL語句将傳回包含”human”、”hungry”等單詞的資料,此文法隻針對英文有效,針對中文“*”符号無論有無,效果均相同。

5.        權重查詢

 select * from SampleBlobTable where contains(filecontent,'ISABOUT (city weight (.8),county weight (.4))')

注意:上述SQL語将将針對city和county兩個詞進行不同權重的查詢,權重不同将影響傳回資料集的顯示順序(如果限定傳回數量,則間接影響是否傳回資料)。

6.        多态查詢

select * from SampleBlobTable where contains(filecontent,'FORMSOF (INFLECTIONAL,dry)')

注意:查詢将傳回包含”dry”,”dried”,”drying”等資料,針對英語有效。

附:文檔修改曆史

内容 修改人 時間 備注
建立 卞吉東 2012-03-29
增補 卞吉東 2012-04-01 增加支援PDF檔案方法