什么';这是一个很好的数据库,可以对大量相对较小的文本文档进行全文搜索吗?(C#后端)
本文关键字:文档 文本 相对 搜索 后端 文搜索 一个 什么 很好 数据库 | 更新日期: 2023-09-27 18:28:31
我正在设计一个旨在吸收大量文档的系统。我想支持对文档内容的全文搜索,以及其他元数据(关键字/情感分析)。如何进行关键词/情绪分析超出了这个问题的范围。但值得考虑的是,这类元数据需要与可搜索文档共存。
主要假设为:
- 总的来说,我指的是最初的10万人,目标是达到数百万人
- 文件大小为0-15kb
- 这些文件是文本(utf-8)
- 希望能够全文搜索文档内容
- 托管在一台机器上,没有云/分布式服务
- 连续插入新文档(大约每秒1-2个)
- 临时文本搜索
- 更复杂的查询用例是:
- 显示此日期范围内有关"小工具"的所有正文档
C#是从数据库获取文档、处理、存储和检索的首选语言。因此,拥有C#绑定是一大优势。或者至少是一种简单的弥合差距的方法。
天真的方法
一种天真的方法是将MySQL与Apache的Lucene一起使用。将文档内容存储为文件,并在数据库中引用它们,或者将文档内容作为数据库中的Text字段。
然后我可以像Lucene.Net 一样使用一个C#包装器来实现Lucene
我对这种方法的担忧/问题是,我的数据大小以及我想用它做什么对MySQL来说是否太大了。我知道过早地进行优化是愚蠢的,而且当发现常规SQL数据库做得很好时,人们往往认为他们需要一些"大数据"解决方案。我对这种方法的另一个主要担忧是,与一些潜在的替代方案相比,它的开发过于"笨重"和繁琐。
备选方案
从一些研究来看,一个看起来很有前景的替代方案是将CouchDB与Lucene一起使用。我遇到了两个解决这个问题的库:
- couchdb lucene
- Divan
我要找的是:
我还没有对这么大的数据做很多工作。我想知道:
- 这么多的数据和用例值得使用非关系数据库吗
- 文档应该存在于数据库中,还是作为数据库中具有引用的文件
- 有没有一种数据库/全文搜索技术特别适合我没有考虑过的这种情况
我建议您研究RavenDb。它使用Lucene,是100%.Net。它有用于进行全文索引和模糊搜索的文本分析器。