Mysql MongoDB或Solr用于文档摄取、存储和分面搜索?
我需要在这里为我正在处理的一个项目做一个架构决策。以下是要求:Mysql MongoDB或Solr用于文档摄取、存储和分面搜索?,mysql,ruby-on-rails,mongodb,solr,Mysql,Ruby On Rails,Mongodb,Solr,我需要在这里为我正在处理的一个项目做一个架构决策。以下是要求: 文档摄取(.doc、.pdf、.csv,可能是视频) 实际文档存储(我假设在服务器上的磁盘上) 数据库中对文件的一些引用)-以及数据库中可搜索和可分面的某些字段 全文文档搜索 分面(基于从文档中收集的字段选择 每个文档的摄入可能不同-换句话说 可能有200个方面,但只有一些适用于每个文档) 我使用rails作为服务器,目前使用mySQL。我相信我至少有两个明显的选择: 索尔;在mySQL中存储文档中的字段,并使用Sunspot ge
老实说,我对Solr和MongoDB都是新手,我可以在这里使用一些建议,因为我肯定我遗漏了一些优点和缺点。我对MongoDB和Solr都有丰富的经验(尽管没有任何关联) 根据你的需要,我推荐Solr 我曾在两个不同的web应用程序上使用过搜索问题,第一个,我们从事务数据库中嵌入的Oracle文本切换到Solr。从不回头 尽管MongoDB可能会按照您的要求进行操作,但我怀疑您会花费大量时间让MongoDB按照您想要的方式进行操作,尤其是在面处理方面。Mongo的聚合框架相对较新 您说过需要对facet运行多个查询。我希望这不是每个不同的值一个查询,就像所有类别一样,计算每个类别中的产品数量。在开发数据发布的第一天,这可能会很好,但要等到您同时获得10000个产品、500个类别和50个用户的搜索。然后有50个用户同时对相同的数据运行500个查询。你最终需要缓存它 索尔已经为你做了这一切。它的设计考虑了这些用例,可以非常好地处理面处理,而无需运行N+1查询。Solr还提供必要的缓存以避免频繁的磁盘I/O。Solr是高度可配置的。您可以调整缓存大小、模式、分析器等,而无需重构代码 例如,我建议使用MongoDB进行搜索的地方是当您的需求非常小且不太可能发生重大变化时。例如,如果您想要前缀搜索,比如说,提前键入,您可以简单地在每个文档中添加一个searchTokens字段,然后自己进行分析 如果搜索用户集,每个用户可能看起来像:
{
userId: 'x',
firstName: 'Brandon',
lastName: 'Ramirez',
searchTokens: [
'b',
'br',
'bra',
'bran',
'brand',
'brando',
'brandon',
'r',
'ra',
'ram',
'rami',
'ramir',
'ramire',
'ramirez'
]
}
我在MongoDB中使用了这种技术,以避免Solr的复杂性。但这就是我所需要的。它是针对类型先行的,因此我不需要刻面,也不需要动态的可过滤字段集,也不需要相关性评分。我对MongoDB和Solr都有丰富的经验(尽管没有任何关联) 根据你的需要,我推荐Solr 我曾在两个不同的web应用程序上使用过搜索问题,第一个,我们从事务数据库中嵌入的Oracle文本切换到Solr。从不回头 尽管MongoDB可能会按照您的要求进行操作,但我怀疑您会花费大量时间让MongoDB按照您想要的方式进行操作,尤其是在面处理方面。Mongo的聚合框架相对较新 您说过需要对facet运行多个查询。我希望这不是每个不同的值一个查询,就像所有类别一样,计算每个类别中的产品数量。在开发数据发布的第一天,这可能会很好,但要等到您同时获得10000个产品、500个类别和50个用户的搜索。然后有50个用户同时对相同的数据运行500个查询。你最终需要缓存它 索尔已经为你做了这一切。它的设计考虑了这些用例,可以非常好地处理面处理,而无需运行N+1查询。Solr还提供必要的缓存以避免频繁的磁盘I/O。Solr是高度可配置的。您可以调整缓存大小、模式、分析器等,而无需重构代码 例如,我建议使用MongoDB进行搜索的地方是当您的需求非常小且不太可能发生重大变化时。例如,如果您想要前缀搜索,比如说,提前键入,您可以简单地在每个文档中添加一个searchTokens字段,然后自己进行分析 如果搜索用户集,每个用户可能看起来像:
{
userId: 'x',
firstName: 'Brandon',
lastName: 'Ramirez',
searchTokens: [
'b',
'br',
'bra',
'bran',
'brand',
'brando',
'brandon',
'r',
'ra',
'ram',
'rami',
'ramir',
'ramire',
'ramirez'
]
}
我在MongoDB中使用了这种技术,以避免Solr的复杂性。但这就是我所需要的。它是用于提前输入的,所以我不需要刻面,也不需要动态的可过滤字段集,也不需要相关性评分。听起来你可以使用
它是一个搜索引擎,使用与solr相同的底层lucene库,但其中存储的所有内容都是JSON文档
全文搜索、分面搜索和对许多不同属性的过滤都能很好地工作。信息技术