这是一个关于使用(关系)数据库设计全文搜索的系统架构问题。我使用的特定软件是 Solr 和 PostgreSQL,仅供参考。
假设我们正在建立一个有两个用户 Andy 和 Betty 的论坛——
Post ID | User | Title | Content
--------|-------|-------------------|---------------------------
1 | Andy | Dark Knight rocks | Dark Knight rocks blah
2 | Betty | I love Twilight | Twilight blah blah
3 | Andy | Twilight sucks | Twilight sucks blah
4 | Betty | Andy sucks | Twilight rocks, Andy sucks
当帖子表在 Solr 中被索引时,我们可以轻松地将按相关性排序的帖子返回到“?q=twilight”或“?q=dark+night”。
现在我们要添加一个新功能来搜索用户而不是帖子。一个简单的实现会简单地索引用户名并将“Andy”返回到“?q=a”,将“Betty”返回到“?q=b”,但是如果我们想让我们的系统更智能同时考虑到用户怎么办在“Andy”之前发帖并返回“Betty”到“?q=twilight”,因为 Betty 比 Andy 更多地提到 Twilight。
您将如何设计系统以有效处理数十万用户和数百万帖子的用户搜索功能?