java - MongoDB 是关系 db + lucene 的有效替代品吗?

标签 java lucene mongodb relational-database

在一个新项目中,我需要大量使用 lucene 来实现搜索器。这个搜索器将是项目中非常重要(也是很大)的一部分。将关系数据库 + Lucene 替换为 MongoDb 是否有效或方便? ?

编辑:好的,我会澄清一下:我不是在问风险,我可以在这个项目中付出这个代价。我的观点是:MongoDB 是面向这种东西的吗?我可以制作一个与 Lucene 具有相同性能的完整搜索引擎吗?一位 friend 向我指出 MongoDB 作为替代方案,但我看不出 Lucene 性能是否与文档替代方案一起提供(然后,我也会在 MongoDB 中看到它),或者另一方面,倒排索引和优化是完整的与文档方向无关。

最佳答案

从技术上讲,您可以使用 MongoDB 进行全文搜索,但是您错过了全文搜索提供商必须提供的很多功能。我喜欢 MongoDB,但如果完全关心实现时间,我会将它与全文搜索提供程序(例如 Lucene 或 Sphinx)结合使用。我认为 MongoDB 索引单词数组的便捷能力最好留给基于标记的标记和搜索,而不是全文搜索。

搜索(信息检索)不仅仅是抓取任何匹配的文档,如果您希望搜索结果具有任何相关性,您将需要类似 TF-IDF、短语匹配(单词序列得分更高)或任何数量的其他 IR 技术来提高搜索精度。如果你使用 MongoDB,你需要从头开始实现它。

如果您真的想从头开始实现这一切,但又不想为事物的原始存储而烦恼,那么 MongoDB 非常接近您可以在其之上实现它的最佳数据库存储(想不出很多其他的) ,但这仍然不是一个很好的选择。

关于java - MongoDB 是关系 db + lucene 的有效替代品吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2546494/

相关文章:

elasticsearch - elasticsearch通配符索引类型

javascript - 如何使用nodejs/express将数据存储在mongodb中?

node.js - 使用 count() 或 findOne() 以获得更好的性能?

php - MongoDB/DocumentDB bson_append_array() : invalid array detected. 数组参数的第一个元素不是 "0"

java - SMPP 二进制消息

java - 如何将struts2中的字符集更改为utf-8

java - 使用可变参数的方法重载

java - 数组适配器 : Remove by Index

lucene - 我可以自定义 Elastic Search 以使用我自己的停用词列表吗?

java - 缺少对 lucene 索引搜索的命中