3

我正在设计一个旨在摄取大量文档的系统。我想支持文档内容的全文搜索,以及其他元数据(关键字/情感分析)。如何进行关键词/情感分析超出了这个问题的范围。但值得考虑的是,这种元数据需要与可搜索文档一起存在。

主要假设是:

  • 大体上,我的意思是最初只有几十万,目标是达到数百万
  • 文件为 0-15kb。
  • 这些文件是文本(utf-8)
  • 希望能够全文搜索文档内容
  • 托管在单台机器上,没有云/分布式服务
  • 不断插入新文档(大约每秒 1-2 个)
  • 临时文本搜索
  • 更复杂的查询用例是:
    • 向我展示所有关于此日期范围内积极的“小部件”的文档

C# 是从数据库中获取文档、处理、存储和检索的首选语言。所以拥有 C# 绑定是一大优势。或者至少是弥合差距的简单方法。

天真的方法

一种天真的方法是将 MySQL 与 Apache 的 Lucene 一起使用。将文档内容存储为在数据库中引用它们的文件,或者将文档内容作为数据库中的文本字段。

然后我可以使用其中一个 C# 包装器到 Lucene,比如Lucene.Net

我对这种方法的关注/问题是我的数据大小以及我想要用它做什么对于 MySQL 来说是否太多。我知道过早进行优化是愚蠢的,而且当事实证明常规 SQL 数据库就可以了时,人们通常认为他们需要一些“大数据”解决方案。我对这种方法的另一个主要担忧是,与一些潜在的替代方案相比,它的开发过于“笨拙”和繁琐。

备择方案

通过一些研究,一种看起来很有希望的替代方法是使用 CouchDB 和 Lucene。我遇到了两个解决这个问题的库:

我在找什么:

我还没有对这种大小的数据做很多事情。我想知道:

  • 如此大量的数据和用例是否值得使用非关系数据库?
  • 文档应该存在于数据库中,还是作为具有数据库中引用的文件?
  • 是否有一种我没有考虑过的特别适合这种情况的数据库/全文搜索技术?
4

1 回答 1

1

我建议你研究一下 RavenDb。它使用 Lucene 并且是 100% .Net。它具有用于进行全文索引和模糊搜索的文本分析器。

于 2014-10-29T22:54:46.743 回答