我们正在构建一个内部应用程序,用户可以选择在系统中保存word文档,但问题是用户应该能够通过关键字搜索这些文档。 我们使用asp.net,c#和Sqlserver 2008.I想知道将这些文档保存在Varchar字段中,然后在这些字段中搜索关键字,或者我需要使用Solr / Lucene进行全文搜索。
我想知道这是否是用于此目的的有效设计。
提前致谢!
答案 0 :(得分:0)
如果没有更多细节,这是不可能理智回答的。需要考虑的一些事项:
您是说将整个doc保存到DB中的varchar字段中?这听起来并不聪明 - 你有完整的问题,就是让数据库副本与光盘副本保持同步(更不用说数据库副本的全部概念......)
您提到的关键字:如果关键字数量有限,那么编写一个可在单词doc中搜索关键字的office互操作应用程序相当容易。您可以在保存时执行此操作,并保留一个DB,其中包含哪些文档,或者您可以“动态”执行此操作(即,一个应用程序搜索包含特定单词的文档的整个文件夹) - 它一切都取决于你可能有多少文档,所需的性能等。
您可以对文档属性执行某些操作(添加与关键字对应的自定义属性)并搜索具有该属性的文件吗?
答案 1 :(得分:0)
如果您必须在数据库中存储word文档,并且希望能够通过某些经典关键字搜索它们,那么请使用Virtual Path Provider,每次保存文档时都会在dB字段中放置一些关键字并进行搜索使用这些关键字。这个方法将绕过John3136提到的数据库副本。
如果您需要能够搜索文档的内容,如果文件保存为blob,则无法进行搜索,因此为了这个目的,将文档保存为XML Word 2003和更有意义。配置全文搜索以忽略尖括号,例如:
Regex.Replace(dBFieldOfWordXMLData, @"<[^>]*>", string.Empty);
我认为最有效的方法是使用虚拟路径提供程序,MSDN文章和Sharepoint文档使用虚拟路径提供程序,它们是可搜索的。我已经对Azure上的EpiServer CMS最有效的解决方案进行了一些研究:http://episerverazurevpp.codeplex.com/