結合SQL Server全文檢索索引對Word內容進行檢索的三個方案

來源:互聯網
上載者:User

導讀:除了利用office提供的API對word文檔內容進行檢索外,本文簡要總結如何結合SQL Server的全文檢索索引技術對Word檔案的內容進行檢索的三個方案。

一、結合Windows索引服務進行全文檢索索引

方案摘要:

1. 改變檔案儲存體時的檔案名稱;

2. 配置索引伺服器,並將索引伺服器與MS SQL Server關聯。

3. 修改SQL語句,將進行全文檢索查詢語句的內容加入查詢條件中

一個詳細的執行個體,參考這裡:http://database.ctocio.com.cn/51/11440551.shtml

優點:可以獨立對檔案以目錄方式物理存放,並且這些檔案繼續以doc格式存放。

缺點:只能讀取,不能寫入。

 

二、結合BLOB資料進行全文檢索索引

方案摘要:將doc檔案以BLOB資料格式varbinary(max)存放於資料庫的表中,再對錶進行全文檢索索引。這是最為常見的一種方案了。

 

 

一個簡單插入表的樣本:

-------二進位檔案查詢樣本<br />/*********************3w@live.cn****************/<br />Use Master<br />Go<br />IF EXISTS (SELECT name FROM sys.databases WHERE name = N'BlobDataDemoDB')<br />DROP DATABASE BlobDataDemoDB<br />GO<br />USE Master<br />GO<br />CREATE DATABASE BlobDataDemoDB<br />GO<br />--------啟用全文檢索索引<br />/*********************3w@live.cn****************/<br />execute sp_fulltext_database 'enable'<br />go<br />use blobDataDemoDB<br />GO<br />--建立一個包含BlOB列的表<br />/*********************3w@live.cn****************/<br />if OBJECT_ID('SampleBlobTable') is not null<br />drop table SampleBlobTable<br />go<br />CREATE TABLE SampleBlobTable<br />(<br />[PKID] int identity(1,1) primary key,<br />[FileType] Nvarchar(32) null,<br />[FileName] Nvarchar(255) null,<br />[FileContent] VARBINARY(MAX) NULL,<br />[AddTime] datetime default(getdate())<br />)<br />GO<br />IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[CPP_InsertOneBlobDataToTable]') AND type in (N'P', N'PC'))<br />DROP PROCEDURE [dbo].[CPP_InsertOneBlobDataToTable]<br />GO<br />--建立一個插入資料到SQL server的預存程序<br />/*********************3w@live.cn****************/<br />CREATE PROCEDURE CPP_InsertOneBlobDataToTable<br />( @FileType nvarchar(32),<br />@FileName nvarchar(255),<br />@FileContent VARBINARY(MAX)<br />)<br />AS<br />INSERT SampleBlobTable([FileType],[FileName],[FileContent],[AddTime])<br />VALUES (@FileType,@Filename,@FileContent,getdate())<br />GO

using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Text;<br />using System.IO;<br />using System.Data.SqlClient;<br />using System.Data;<br />namespace BlobDataSearchDemo<br />{<br /> class Program<br /> {<br /> const string conn = @"Server=ap4/Agronet09;DataBase=BlobDataDemoDB;uid=sa;pwd=as;";<br /> static void Main(string[] args)<br /> {<br /> SaveDoc2SQLServer(@"D:/2008Data/StreamData/Doc/輕舞飛揚.doc", conn);<br /> SaveDoc2SQLServer(@"D:/2008Data/StreamData/Doc/天龍八部.doc", conn);<br /> SaveDoc2SQLServer(@"D:/2008Data/StreamData/Doc/English.doc", conn);<br /> Console.ReadKey();<br /> }<br /> private static void SaveDoc2SQLServer(string filepath, string conn)<br /> {<br /> FileInfo fi = new FileInfo(filepath);<br /> if (fi.Exists)<br /> {<br /> //Open the stream and read it back.<br /> using (FileStream fs = File.OpenRead(filepath))<br /> {<br /> byte[] b = new byte[fi.Length];<br /> SqlConnection Conn;<br /> SqlCommand cmdUploadDoc;<br /> UTF8Encoding temp = new UTF8Encoding(true);<br /> while (fs.Read(b, 0, b.Length) > 0)<br /> {<br /> Conn = new SqlConnection(conn);<br /> //Setting the SqlCommand<br /> cmdUploadDoc = new SqlCommand("CPP_InsertOneBlobDataToTable", Conn);<br /> cmdUploadDoc.CommandType = CommandType.StoredProcedure;<br /> cmdUploadDoc.Parameters.Add("@FileName", SqlDbType.NVarChar, 200).Value = fi.Name;<br /> cmdUploadDoc.Parameters.Add("@FileContent", SqlDbType.VarBinary, 0).Value =b;<br /> cmdUploadDoc.Parameters.Add("@FileType", SqlDbType.NVarChar, 32).Value = fi.Extension.Replace(".","");<br /> Conn.Open();<br /> cmdUploadDoc.ExecuteNonQuery();<br /> Conn.Close();<br /> }<br /> }<br /> }<br /> }<br /> }<br />}<br />

查詢結果:

注意:

1、在資料庫設定全文檢索索引時,必須有一個欄位是文件類型,SQL Server全文檢索索引依據此文件類型啟動相應的doc引擎進行檢索。

2、必須設定全文檢索索引的語言,中文為2052,英文為1033。

優點:將doc檔案匯入SQL Server資料庫中,可以方便地進行讀取和全文檢索索引,必要時也可以寫入。

缺點:varbinary(Max)受2G大小限制,而且資料庫存入大量的BLOB資料,將變得異常臃腫,檢索速度將大大降低。

三、結合FileStream進行全文檢索索引

方案摘要:與方案二類似,只不過利用FileStream技術將doc檔案以資料格式varbinary(max)存放於資料庫外的物理檔案中,再對錶進行全文檢索索引。

在SQL Server 2008 中
– FILESTREAM 資料不支援遠程儲存
– 不支援資料庫快照集和資料庫鏡像
– 某些Katmai的功能不支援FILESTREAM ,例如:
• SQL 加密
• 表值參數

前提:必須安裝全文檢索索引並啟用FileStream

參考:

http://msdn.microsoft.com/zh-cn/library/bb933993.aspx

http://www.cnblogs.com/downmoon/archive/2010/05/06/1727546.html

http://www.cnblogs.com/downmoon/archive/2010/05/08/1730044.html

優點:將doc檔案匯入SQL Server資料庫中,可以方便地進行讀取和全文檢索索引,必要時也可以寫入,並且克服了方案二的缺點。varbinary(Max)欄位只存放索引,而實際的內容存放於資料庫外,大小隻受NTFS檔案夾物理大小的限制。

 

小結:本文簡要總結如何結合SQL Server的全文檢索索引技術對Word檔案的內容進行檢索的三個方案。本人認為方案一和方案三均可行。歡迎交流。3w@live.cn

 

 

邀月註:本文著作權由邀月和CSDN共同所有,轉載請註明出處。
助人等於自助!   3w@live.cn

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.