我们计划在MongoDB中存储数百万个文档,非常需要全文搜索。我读过Elasticsearch和Solr是全文搜索的最佳解决方案。
弹性搜索是否足够成熟,可用于Mongodb全文搜索?我们也在收集分类。 Elasticsearch是否适用于Sharded集合?
使用Elasticsearch或Solr有哪些优点和缺点?
MongoDB能否进行全文搜索?
答案 0 :(得分:25)
MongoDB中有一些搜索功能,但它不像搜索引擎那样功能丰富。
http://www.mongodb.org/display/DOCS/Full+Text+Search+in+Mongo
我们使用Mongo和Solr来搜索内容。我们更喜欢Solr,因为
由于我们没有使用ES,所以我不能说太多。您可以在下面的链接中找到关于Solr vs ES的一些讨论。
答案 1 :(得分:22)
我对Solr / MySQL和ElasticSearch / MongoDB都有专业经验。
如果你要查询很多你的搜索引擎,你已经对你的MongoDB进行了分片(我的意思是,如果你想对你的搜索引擎进行分片):你应该使用ElasticSearch,除非你想做什么不能完成ElasticSearch。即使你不打算碎片也应该使用它。
ElasticSearch是一个位于Lucene之上的新项目,它带来了分片机制,从用于分布式环境和搜索的人(Shay Bannon制作Compass并为Gigaspaces工作,数据网格编辑器)。
ElasticSearch和MongoDB一样容易进行分片,我认为它更简单,默认情况下大多数情况都适用。
我不太喜欢Solr。
关于数据导入,我有Solr DataImportHandler和ElasticSearch河流(CouchDB和MongoDB)的经验。我可以告诉你的是:
还有一个用于Solr和ElasticSearch的新MongoDB连接器,我需要测试asap :) http://blog.mongodb.org/post/29127828146/introducing-mongo-connector
所以最后,我肯定会选择ElasticSearch,因为:
答案 2 :(得分: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
我没有任何使用过的经验,但其他人之前已进行过比较,请看一下:
ElasticSearch, Sphinx, Lucene, Solr, Xapian. Which fits for which usage?
答案 3 :(得分:6)
MongoDB无法进行高效的全文搜索。您可以对字段进行通配符搜索,但我认为这些搜索不会有效使用索引。
我建议使用the river functionality的ElasticSearch自动将文档从MongoDB推送到ElasticSearch。
elasticsearch-river-mongodb是一个MongoDB到Elasticsearch的河流,当MongoDB中的文档发生变化时,ElasticSearch将监视oplog,然后自动更新其索引。
这样可以最大限度地减少使两个数据存储保持同步的问题,因为ElasticSearch只是监视Mongo的复制表。
答案 4 :(得分:2)
Mongo不适合全文搜索。 显然,您需要为字段编制索引以便快速搜索,并且包含BIG数据(长字符串)的索引字段将在mongo中失败。它对索引的限制为1k,如果你的内容超过1k,它将被索引忽略,并且不会显示在你的搜索结果中。很明显,如果你试图对你的文章进行全文搜索,mongo不是一个好的选择。
答案 5 :(得分:2)
目前,在MongoDB 2.4.6中,现在有一个MongoDB中的全文搜索,它在以前的版本中功能更丰富。在http://docs.mongodb.org/manual/core/text-search/上描述了新功能的功能。
值得一提:
- 在索引创建和文本命令执行期间标记并限制搜索项。为每个
文档分配一个分数- 包含索引字段中的搜索字词。分数确定文档与给定搜索查询的相关性。
但是,在这个答案(从2013年9月)https://stackoverflow.com/a/18631775/1920149你可以看到,mongo仍然警告在生产中使用这个功能。此功能仍处于测试阶段。
答案 6 :(得分:2)
通过在必填字段上创建文本索引,从版本2.6开始,可以在Mongodb的产品环境中进行全文搜索。 indexe text in mongodb