我开发了一个Web应用程序,允许用户上传图像和文档等文件。这个文件分为两部分:
我想允许用户搜索上传的文档。特别是使用全文搜索。我应该为这两种文件类型使用哪些数据类型?
答案 0 :(得分:2)
您可以将数据存储为二进制文件并使用全文搜索来解释二进制数据并提取文本信息:.doc,.txt,.xls,.ppt,.htm。提取的文本已编制索引并可用于查询(请确保使用CONTAINS关键字)。不用说,必须启用全文搜索。不确定添加全文索引将如何影响您的系统 - 即其大小。您还需要查看执行计划以确保在查询时使用索引。
有关详细信息,请查看以下内容:
http://technet.microsoft.com/en-us/library/ms142499(SQL.90).aspx
优点: 在数据库中存储数据的主要优点是它使数据“自包含”。由于所有数据都包含在数据库中,因此备份数据,将数据从一个数据库服务器移动到另一个数据库服务器,复制数据库等等要容易得多。
您还可以启用文件版本控制,并使负载均衡的Web场更容易。
缺点: 你可以在这里阅读:https://dba.stackexchange.com/questions/3924/sql-server-2005-large-binary-storage。但是,为了有效地搜索文件,您必须这样做。
或者我建议的另一件事可能是将关键字存储在数据库中,然后将其链接到文件共享中的文件。
这篇文章讨论了使用FileStream和数据库的abt:http://blogs.msdn.com/b/manisblog/archive/2007/10/21/filestream-data-type-sql-server-2008.aspx
答案 1 :(得分:0)
首先需要将PDF转换为文本。有这类事物的库(即:PowerGREP)。然后我建议将PDF文件的文本存储在数据库中。如果您需要进行全文搜索和逻辑,例如“在同一行”,那么您需要为每行文本存储一条记录。如果您只想在文件中搜索文本,则可以更改SQL架构的结构以满足您的需求。
对于docx文件,我会将它们转换为RTF并在存储在SQL中时以这种方式搜索它们。
对于图像,Microsoft有一个名为Microsoft OneNote的程序可以执行OCR(光学字符识别),因此您可以在图像中搜索文本。使用什么工具无关紧要,只是它支持OCR。
基本上,如果你没有办法直接读取二进制文件,那么你需要将它转换为带有某个库的文本,然后担心进行搜索。
答案 2 :(得分:0)
可以为使用以下任何数据类型的列创建全文索引 - CHAR,NCHAR,VARCHAR,NVARCHAR,TEXT,NTEXT,VARBINARY,VARBINARY(MAX),IMAGE和XML。
此外,要使用全文搜索,您必须为要对其运行全文搜索查询的表创建全文索引。对于特定的SQL Server表或索引视图,您最多可以创建一个全文索引。
这是关于它的两篇文章:
SQL SERVER - 2008 - Creating Full Text Catalog and Full Text Search