开发搜索和标签繁重的网站

Developing a search and tag heavy website

我正处于开发一个标签非常多的网站的规划阶段。基本上一切都将与标签相关联,整个站点将基于搜索这些标签。

现在,我一直在考虑走 nosql 路线,因为根据我的阅读和理解,它对这样的事情最有意义。

最好使用这个数据库系统吗?使用关系数据库系统是否有意义?我是否应该考虑加入 SOLR 之类的东西?

理想的设置是什么?


更新:

理想情况下,它们将由用户生成,但我们都知道给用户如此大的权力会产生怎样的结果。所以,让我们改变要求,说用户将无权创建标签。

基于文本匹配搜索标签可能有用且需要。如果标签是“garage sale”,搜索“sale”也应该选择这个,当然相关性较低。

我无法想象使用量如此之大以至于扩展会成为一个问题。

谢谢

请参阅 this answer 以获得 SQL 解决方案。顺便说一句,我想不出使用大多数 NoSQL 数据库(即键值、列式或文档)有什么好处,因为 SQL 解决方案会更紧凑并且应该提供良好的性能;如果您在标签上进行大量导航类型查询,图形数据库可能是合适的,但听起来并非如此。

Solr(或 ElasticSearch 或其他)的使用与您的主数据库正交;如果用户输入不准确的搜索标签,则合并搜索工具可能是合适的,但我建议在转向完整的搜索工具之前,集成一个 stemming 库或类似的东西。

我会花点时间考虑这些标签。例如,这些标签是由用户生成的,还是您会提供一些标签并让用户 select 他们想要哪些标签?

您需要根据文本匹配来搜索标签吗?例如,如果标签是 "garage sale",您是否要搜索 "sale" 以同时选择它?也许相关性较低?

另外,你在看什么样的用法? Solr 的一个好处是它非常容易扩展和同步数据,很容易部署多个节点、分片集合和将数据复制到其他节点,这是传统数据库难以解决的问题。

另一件要记住的事情是,大多数时候,Solr 不是官方的 "repository of record",大多数时候数据是从某个地方的数据库提供给它的,但是所有的读取活动都完成了来自索尔。