我目前正在设计一个新的 Web 应用程序,它将处理大量的 MS Office 文档。
要求之一是不仅能够在我的 SQL Server 数据库表的列中进行搜索,而且能够在每天大约 50-200 个文档的情况下上传到 Web 应用程序的文档中进行搜索。我的解决方案应该能够同时搜索文档 内容 ,以及 元数据 Office 文件(创建者等)
我想知道是否有人对这种解决方案有实际经验,并且可以帮助我设计它。
我的第一个想法是使用 SQL Server 2012 的 FILETABLE
方法:为文档定义一个公共(public)目录,表面为FILETABLE
在 SQL Server 表中,并在其上放置一个 SQL Server 全文目录。我非常有信心这将允许我按文件名和内容搜索文件(使用全文搜索) - 但是 呢?元数据 ?我似乎找不到任何关于它的东西....
另外:是否有人在方面有任何动手实践经验?性能 这样的解决方案?我很难判断 Win32 I/O 将多少新文档存储到 FILETABLE
文件夹会影响性能。在 FILETABLE
上进行全文搜索怎么样?基于 MS Office 文档集?那里有什么经验吗?
第二个想法是使用某种专用的全文搜索系统,例如 ElasticSearch - 对此有何评论? ES 是否支持索引和搜索 MS Office 文档,包括元数据?还是仅索引文档的内容?
任何想法和建议——尤其是亲身实践的真实体验——都将受到欢迎!
最佳答案
关于您的第二个想法,Elasticsearch 支持通过 mapper attachments plugin 索引 MS Office 文档。由 Apache Tika 提供支持,从而支持各种MS Office document formats .该插件不仅可以索引文件内容,还可以根据需要索引元数据,即 date
, title
, author
, content type
, ETC。
所以想法是创建一个索引和一个映射类型,其字段具有 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您可以运行以查看将从文档中提取的内容,以及可以从中搜索到的内容。
关于elasticsearch - 设计处理和搜索 MS Office 文档的 ASP.NET 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34979337/