检索尽可能多的文件类型的文本内容

时间:2013-06-24 10:10:09

标签: delphi indexing dms

我维护一个用Delphi / Sql Server编写的客户端服务器DMS。

我想允许用户在db中存储的所有文档中搜索字符串。 (文件存储为blob,它们存储为压缩文件以节省空间)。

我的想法是在“checkin”上对它们进行索引,因此当我存储一个nwe文件时,我将其中的所有文本信息提取出来并将其放入一个新的DB字段中。所以我的文件表将以某种方式:

ID_FILE integer
ZIPPED_FILE blob
TEXT_CONTENT text field (nvarchar in sql server)

我想支持至少最常见的文本类文件的“索引”,例如:pdf,txt,rtf,doc,docx,pdf,可能正在添加xls和xlsx,ppt,pptx。

对于MS Office文件,我可以使用ActiveX,因为我在我的应用程序中执行此操作,对于txt文件,我只能读取文件,但是对于pdf和odt?

你能否建议最好的技术,甚至是第三方组件(不是免费的)解析所有文件类型的“无所谓”?

由于

2 个答案:

答案 0 :(得分:3)

以这种方式搜索文档会导致使用非常慢且不方便,我建议你生成两个额外的表而不是TEXT_CONTENT字段。

当您解析文本时,您应该提取有价值的单词并尝试将它们标准化以便您 - 摆脱大/小写问题 - 摆脱可以互换使用的字符    即在土耳其语中我们有ç字符,可以输入为c。 - 摆脱你正在处理的语言中常见的动词。    即“我正在寻找的东西”,“东西”“寻找”可能符合您的利益 - 摆脱任何使用面部的问题。

表中已有条目的每个单词都应该重新使用string_search表中已经给出的ID。

记录可能如下所示。 的 original_file_table   zip_id号码   zip_file blob

<强> string_search   str_id号码   standards_word文本(或具有适当二级索引的任何字符串类型)

<强> file_string_reference   zip_id号码   str_id号

我希望我能告诉你我在想什么。

答案 1 :(得分:2)

您的主要问题是在将文件作为blob放入数据库之前压缩文件,这使得数据库本身无法搜索。我建议如下。

  

不要压缩放在数据库中的文件。磁盘空间很便宜。

只要将文件保存在文本字段中,就可以编写这样的查询。

Select * from MyFileTable Where MyFileData like '%Thing I am looking for%'

这很慢但它会起作用。这将起作用,因为大多数文件类型中的文本是纯文本而不是二进制文件(尽管一些较新的文件类型现在是二进制文件)

另一种选择是使用像你手上的Apache Lucene或Apache Solr这样的索引引擎

  

解析所有文件类型“没有恐惧”?