需要有关索引文档的建议(office docs,pdf)

时间:2015-12-10 09:53:22

标签: .net solr search-engine lucene.net

我在.NET堆栈中创建了一个文档存档管理系统。搜索功能目前有限。当用户进行搜索时,选择相关客户并查询“标题”,“定义”或“日期”字段。他们的记录太多了(大约500万)。我在搜索theese字段时没有任何问题。(BTW数据库是Sql Server。)

我们附上pdf或office文件进行记录。如果用户附加要记录的文件,我将文件保存到文件系统并将文件路径写入数据库。如果查询结果中有附件,用户可以打开文档点击路径。

我们希望索引附加文档并在索引中搜索。但我需要为每个客户创建索引。

总结我想要的东西;

  • 索引PDF,MS Office文档和图像。
  • 为每位客户创建索引。 (我想我需要这样做。但如果你有任何想法请建议)
  • 按关键字搜索此索引。

我知道有技术可以做到这一点。 Lucene / Solr,sphinx等。但我很困惑,需要一个建议。

1 个答案:

答案 0 :(得分:3)

听起来你正在探索以下选项:

  • 提取工具(将文档转换为纯文本)
  • 搜索工具(使该纯文本可搜索)
  • 多租户策略(为多个客户端管理这些文本集合)

我可以在 Apache堆栈中给你一些指示(因为你在帖子中提到了Lucene / Solr):

摘录

广泛使用的开源文档提取工具Apache Tika(可以处理PDF和MS Office文档among others

您提到要索引 images ,在文档管理上下文中可能包含OCR,是吗?在开源社区(Apache 2许可)中,Google Tesseract OCR的支持越来越多。

Apache Tika最近以名称TikaOCR包含对Tesseract OCR的支持。

搜索

您已经在使用 SQL Server ,因此如果fulltext support满足您的需求,最初可能最简单,只需使用Tika生成纯文本即可添加为另一列(带有FULLTEXT索引)到SQL Server中的文档表。

合并基于Lucene的搜索服务器( Apache Solr Elasticsearch )将极大地增强您调整搜索和公开最佳实践搜索功能的能力(自动完成,搜索方面,类似的搜索)。

Lucene.NET是另一种解决方案(C#库),但它没有跟上Lucene Java项目的步伐(上次更新2012)。此外,对于5MM以上的文档,您最好考虑使用基于服务器的进程外搜索解决方案。

多租户策略

最终,您有三个主要选择:

  1. 共享数据存储区,共享表/索引/集合
  2. 共享数据存储区,单独的表/索引/集合
  3. 单独的数据存储
  4. 最终你可以使用SQL Server实现这三种方法中的任何一种(当前实现是#1,对吗?)。

    使用任何搜索解决方案时,#3 - 单独的数据存储可能会随着客户端列表的增长而成本过高(除非需要防火墙关闭组织数据)。

    许多多租户搜索应用程序使用#2 - 共享数据存储区,单独的搜索索引#1 - 共享数据存储区,依赖于的共享索引。

    SolrElasticsearch都可以让您为每个客户端设置一个文档索引/集合(#2),或管理一个大型多客户端集合,例如{{1}过滤字段(#1)。

    使用商业Elasticsearch插件(Shield),可以提供索引级安全性,例如每个单独的面向客户端的.NET应用程序只能访问该客户端的文档索引(上面的#2策略)。

    <强>集成

    您正在使用.NET,可能不想与Java库进行争吵。 Solr和Elasticsearch都作为服务器运行,具有用于搜索和摄取的HTTP API。 Solr有一个名为Solr CELL的Apache Tika集成,Elasticsearch通过elasticsearch-mapper-attachments plugin project进行集成(这两者都可以使您免于Java开发)。

    但是,Elasticsearch's Tika integration does not yet support Tesseract OCRSolr's integration does)。

    .NET clients for Solr

    .NET clients for Elasticsearch(NEST正在大量使用)

    扩展注意事项

    OCR处理和文本提取是CPU密集型的,因此随着您的摄取量的增加,您最终可能会考虑在不用于搜索的专用机器上处理文档。

    总之,假设您需要OCR,这些摄取/搜索堆栈中的任何一个都可以工作:

    1. Java或命令行Tika + Tesseract(摄取),SQL Server全文(搜索)
    2. Solr w / Solr Cell Tika / Tesseract整合(摄取+搜索)
    3. 命令行Tesseract OCR(用于图像OCR提取)+ Elasticsearch w / elasticsearch-mapper-attachments插件,用于Tika支持(摄取+搜索)
    4. 我希望这能为您的解决方案提供一个起点!