设计一个 ASP.NET 处理和搜索 MS Office 文档的应用程序

Designing an ASP.NET application handling and searching MS Office documents

我目前正在设计一个新的 Web 应用程序,它将处理大量 MS Office 文档。

其中一个要求是不仅能够在我的 SQL 服务器数据库 table 的列中进行搜索,而且能够在调上上传到 Web 应用程序的文档中进行搜索每天大约 50-200 份文件。我的解决方案应该能够搜索文档 content,以及 Office 文档(创建者等)元数据

想知道有没有人有过这样的解决方案的实践经验,可以帮我设计一下。

我的第一个想法是使用 SQL Server 2012 的 FILETABLE 方法:为文档定义一个公共目录,将其显示为 SQL 服务器中的 FILETABLE table,并在上面放一个 SQL 服务器全文目录。我非常有信心这将使我能够按文件名及其内容(使用全文搜索)搜索文件 - 但是 元数据 呢?我似乎找不到任何关于它的东西....

另外:在这种解决方案的 性能 方面,是否有人有实际操作经验?我很难判断 Win32 I/O 将新文档存储到 FILETABLE 文件夹中会对性能产生多大影响。对基于 FILETABLE 的一组 MS Office 文档进行全文搜索怎么样?有什么经验吗?

第二个想法是使用某种专用的全文搜索系统,例如 ElasticSearch - 对此有何评论? ES 是否支持索引和搜索 MS Office 文档,包括 元数据?还是仅索引文档的内容

任何想法和建议 - 以及 尤其是 亲身实践的现实生活经验 - 都将受到热烈欢迎!

关于你的第二个想法,Elasticsearch 支持通过 mapper attachments plugin which is powered by Apache Tika, and thus supports all kinds of MS Office document formats 索引 MS Office 文档。该插件不仅可以索引文件内容,还可以根据需要索引元数据,即 datetitleauthorcontent type

所以我们的想法是创建一个索引和一个映射类型,其中包含一个 attachment 类型的字段以及您想要索引和搜索的所有元数据字段。

PUT /test_index
{
  "mappings": {
    "test_type": {
      "properties": {
        "my_attachment": {
          "type": "attachment",
          "fields": {
            "content": {
              "type": "string",
              "index": "no"
            },
            "title": {
              "type": "string",
              "store": "yes"
            },
            "date": {
              "type": "date",
              "store": "yes"
            },
            "author": {
              "type": "string",
              "analyzer": "myAnalyzer"
            },
            "keywords": {
              "type": "string",
              "store": "yes"
            },
            "content_type": {
              "type": "string",
              "store": "yes"
            },
            "content_length": {
              "type": "integer",
              "store": "yes"
            },
            "language": {
              "type": "string",
              "store": "yes"
            }
          }
        }
      }
    }
  }
}

然后您可以搜索任何这些字段,即文件内容本身以及任何元数据字段。

如果您想干 运行 该插件,它还提供 a standalone tool 您可以 运行 查看将从您的文档中提取的内容,以及可以提取的内容从他们那里搜索。