设计一个 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 文档。该插件不仅可以索引文件内容,还可以根据需要索引元数据,即 date
、title
、author
、content 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 您可以 运行 查看将从您的文档中提取的内容,以及可以提取的内容从他们那里搜索。
我目前正在设计一个新的 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 文档。该插件不仅可以索引文件内容,还可以根据需要索引元数据,即 date
、title
、author
、content 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 您可以 运行 查看将从您的文档中提取的内容,以及可以提取的内容从他们那里搜索。