MongoDB设置的全文搜索选项

ata*_*don 26 solr mongodb elasticsearch

我们计划在MongoDB中存储数百万个文档,非常需要全文搜索.我读过Elasticsearch和Solr是全文搜索的最佳解决方案.

  • 弹性搜索是否足够成熟,可用于Mongodb全文搜索?我们也在收集分类.Elasticsearch是否适用于Sharded集合?

  • 使用Elasticsearch或Solr有哪些优缺点?

  • MongoDB能够进行全文搜索吗?

Par*_*ade 25

MongoDB中有一些搜索功能,但它不像搜索引擎那样功能丰富.

http://www.mongodb.org/display/DOCS/Full+Text+Search+in+Mongo

我们使用Mongo和Solr来搜索内容.我们更喜欢索尔因为

  • 它易于配置和自定义
  • 它有大型社区(如果您使用的是开源工具,这非常有用)

由于我们没有与ES合作,所以我不能说太多.您可以在下面的链接中找到关于Solr vs ES的一些讨论.

  • "效率不如搜索引擎"......我会说"不像搜索引擎那样**功能丰富**".Mongo多键搜索效率不错,但缺乏搜索引擎中存在的功能. (2认同)

Seb*_*ber 22

我有Solr/MySQL和ElasticSearch/MongoDB的专业经验.

如果你要查询很多你的搜索引擎,你已经对你的MongoDB进行了分片(我的意思是,如果你想对你的搜索引擎进行分片):你应该使用ElasticSearch,除非你想要做的事情不能用ElasticSearch完成.即使你不打算碎片也应该使用它.

ElasticSearch是一个位于Lucene之上的新项目,它带来了分片机制,从用于分布式环境和搜索的人(Shay Bannon制作Compass并为Gigaspaces工作,数据网格编辑器).

ElasticSearch和MongoDB一样容易进行分片,我认为它更简单,默认情况下大多数情况都适用.


我不太喜欢Solr.

  • 查询语言根本没有结构(但是插件和Lucene就是这种情况,我认为你也可以使用这种非结构化的查询语言)
  • 我不认为有一个合适的Solr客户端.Solr java客户端很糟糕,我听说PHP人员也抱怨,而ElasticSearch Java客户端非常好,更安全,并提供异步支持(如果你使用Netty作为例子,那就太好了).使用Solr,您将执行大量字符串连接.
  • 不太容易扩展
  • 不是那么新的项目,我觉得它有技术部门.ElasticSearch诞生于Compass,所以我猜所有的技术部门都已经被淘汰,以获得一种全新的方法.

关于数据导入,我有Solr DataImportHandler和ElasticSearch河流(CouchDB和MongoDB)的经验.我能告诉你的是:

  • Solr允许做更多的事情,但是以一种非结构化的XML方式,并且文档对于理解在你离开hello世界并试图使用一些高级功能之后真正讨厌的东西并没有多大帮助.
  • ElasticSearch方法更简单也有限,但对某些技术提供开箱即用的支持,而DataImportHandler看起来更复杂 - SQL友好
  • 在我的Solr项目中,我不得不对某些文档使用手动索引,但主要是因为不可能将所需数据反规范化为文档(Solr项目使用MySQL).

Solr和ElasticSearch也有一个新的MongoDB连接器,我需要尽快测试:) http://blog.mongodb.org/post/29127828146/introducing-mongo-connector


所以最后,我肯定会选择ElasticSearch,因为:

  • 它现在有一个很棒的社区
  • 我认识的许多人都有过类似ElasticSearch的Solr经验
  • 客户端更安全,更结构化,并与Java Futures提供异步
  • 两者都可以使用新连接器轻松地从MongoDB导入数据
  • 据我所知,它允许做Solr所做的几乎所有事情(根据我的经验,但我不是搜索引擎专家)
  • 它开箱即可添加分片
  • 它增加了渗透,可以帮助构建实时可扩展的应用程序(但您可能需要一个额外的消息传递技术)
  • 与Solr相比,我阅读的源代码几乎没有技术部门(至少在客户端),并且创建插件似乎很容易.


Ada*_*ord 7

就本地的MongoDB而言,没有它没有全文搜索支持.您可以看到它是一个受欢迎的功能请求:

https://jira.mongodb.org/browse/SERVER-380

根据我所知道的MongoDB的ES河流插件,它为其功能提供了oplog.由于分片设置会有多个oplog,并且没有办法轻易地改变代码以通过mongos连接.

类似地,对于Solr,我看到的示例通常涉及与ES插件类似的行为.这里有一些更实用的信息:

http://blog.knuthaugen.no/2010/04/cooking-with-mongodb-and-solr.html

我没有任何经验使用过,但其他人之前已进行过比较,请看一下:

Solr vs. ElasticSearch

ElasticSearch,Sphinx,Lucene,Solr,Xapian.哪种适合哪种用途?


Add*_*sUK 6

MongoDB无法进行高效的全文搜索.您可以对字段执行通配符搜索,但我认为这些搜索不会有效使用索引.

我建议使用ElasticSearch 的河流功能自动将文件从MongoDB推送到ElasticSearch.

elasticsearch-river-mongodb是一个MongoDB到Elasticsearch河,当MongoDB中的文档发生变化时,ElasticSearch将监视oplog,然后自动更新其索引.

这样可以最大限度地减少使两个数据存储保持同步的问题,因为ElasticSearch只是监视Mongo的复制表.