我维护一个用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?
你能否建议最好的技术,甚至是第三方组件(不是免费的)解析所有文件类型的“无所谓”?
由于
答案 0 :(得分:3)
当您解析文本时,您应该提取有价值的单词并尝试将它们标准化以便您 - 摆脱大/小写问题 - 摆脱可以互换使用的字符 即在土耳其语中我们有ç字符,可以输入为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这样的索引引擎
解析所有文件类型“没有恐惧”?