我们计划在 MongoDB 中存储数百万个文档,并且非常需要全文搜索。我读过 Elasticsearch 和 Solr 是全文搜索的最佳可用解决方案。
Elastic 搜索是否成熟到可以用于 Mongodb 全文搜索?我们还将对集合进行分片。Elasticsearch 是否适用于分片集合?
使用 Elasticsearch 或 Solr 的优缺点是什么?
MongoDB 是否能够进行全文搜索?
我们计划在 MongoDB 中存储数百万个文档,并且非常需要全文搜索。我读过 Elasticsearch 和 Solr 是全文搜索的最佳可用解决方案。
Elastic 搜索是否成熟到可以用于 Mongodb 全文搜索?我们还将对集合进行分片。Elasticsearch 是否适用于分片集合?
使用 Elasticsearch 或 Solr 的优缺点是什么?
MongoDB 是否能够进行全文搜索?
MongoDB 中有一些搜索功能,但它不像搜索引擎那样功能丰富。
http://www.mongodb.org/display/DOCS/Full+Text+Search+in+Mongo
我们使用 Mongo 和 Solr 使内容可搜索。我们更喜欢 Solr,因为
由于我们没有与 ES 合作,所以我不能说太多。您可以在下面的链接中找到一些关于 Solr 与 ES 的讨论。
我在 Solr/MySQL 和 ElasticSearch/MongoDB 方面都有专业经验。
如果你要查询很多搜索引擎,你已经对你的 MongoDB 进行了分片(我的意思是,如果你也想对搜索引擎进行分片):你应该使用 ElasticSearch,除非你想做的事情不能用 ElasticSearch 完成. 即使你不打算分片,你也应该使用它。
ElasticSearch 是一个基于 Lucene 的新项目,它带来了分片机制,来自习惯于分布式环境和搜索的人(Shay Bannon 制作了 Compass 并为数据网格编辑器 Gigaspaces 工作)。
ElasticSearch 就像 MongoDB 一样容易分片,我认为它更简单,并且默认值适用于大多数情况。
我不太喜欢 Solr。
关于数据导入,我对 Solr DataImportHandler 和 ElasticSearch 河流(CouchDB 和 MongoDB)都有经验。我可以告诉你的是:
Solr 和 ElasticSearch 还有一个新的 MongoDB 连接器,我需要尽快对其进行测试:) http://blog.mongodb.org/post/29127828146/introducing-mongo-connector
所以最后,我肯定会选择 ElasticSearch,因为:
就 MongoDB 本身而言,不,它不支持全文搜索。您可以看到这是一个流行的功能请求:
https://jira.mongodb.org/browse/SERVER-380
根据我对 MongoDB 的 ES River 插件的了解,它的功能落后于 oplog。由于分片设置将具有多个 oplog,并且无法轻松更改该代码以通过 mongos 连接。
对于 Solr,我看到的示例通常涉及与 ES 插件类似的行为。这里有一些更可靠的信息:
http://blog.knuthaugen.no/2010/04/cooking-with-mongodb-and-solr.html
我没有任何使用经验,但其他人之前进行过比较,请看这里:
MongoDB 无法进行高效的全文搜索。您可以对字段进行通配符搜索,但我认为这些不能有效地使用索引。
我建议使用ElasticSearch的 River 功能将文档从 MongoDB 自动推送到 ElasticSearch。
elasticsearch-river-mongodb是 MongoDB 到 Elasticsearch 的一条河流,当 MongoDB 中的文档发生变化时,ElasticSearch 会监控 oplog,然后自动更新其索引。
这最大限度地减少了保持两个数据存储同步的问题,因为 ElasticSearch 只是监控 Mongo 的复制表。
Mongo 不适合全文搜索。显然,您需要索引字段以进行快速搜索,并且在 mongo 中索引包含 BIG 数据(长字符串)的字段将失败。它的索引限制为 1k,如果您的内容超过 1k,它将被索引忽略并且不会显示在您的搜索结果中。显然,如果您尝试对您的文章进行全文搜索,那么 mongo 并不是一个好的选择。
目前,在 MongoDB 2.4.6 中,现在在 MongoDB 中提供了全文搜索,并且功能比以前的版本更丰富。在http://docs.mongodb.org/manual/core/text-search/上描述了新功能的能力。
值得一提:
- 在索引创建和文本命令执行期间对搜索词进行标记和阻止。为每个文档分配一个分数
- 包含索引字段中的搜索词。分数确定文档与给定搜索查询的相关性。
但是,在这个答案(从 2013 年 9 月开始)https://stackoverflow.com/a/18631775/1920149中,您可以看到,mongo 仍然警告不要在生产中使用此功能。此功能仍处于测试阶段。
从 2.6 版开始,通过在必填字段上创建文本索引,可以在产品环境中使用 Mongodb 进行全文搜索。 MongoDB中的索引文本