我正在寻找一种解决方案,通过确切的姓名或他们的名字或姓氏的前缀来搜索朋友。我的要求与此链接类似。Sphinx vs. MySql - 搜索朋友列表(效率/速度) ,但帖子没有解释如何做到这一点。它确实说不建议通过 sphinx 搜索关系。谁能建议我是否应该使用以下任何一种方法或完全不同的方法。此外,我正在寻找超过一百万条记录的高速和可扩展性
DB结构是类似的。
InnoDB
表 1-用户:uid、fname、lname、城市、国家、picurl、状态(picurl 和状态可能随时更改,并且 sphinx 不是实时的,只是说或想象在我的这两个字段的设计中即使 10 分钟的延迟也是不可接受的。 )
table2-朋友:uid,fid
目标是搜索:“uid 11”的所有朋友在他们的 fname 或 lname 或全名中具有前缀 'tony' 并提取他们的详细信息。
- 方法一:
Sphinx:搜索 uid、fname、lname(属性:城市、国家/地区)
a) 执行 mysql 搜索以提取“uid 11”的好友 ID 并存储在数组 X 中
b)然后做狮身人面像搜索'tony *'通过数组X过滤的docid。
c)然后再次执行 mysql 搜索以获取每个匹配的朋友 ID 的实时字段,例如 picurl、status。
或者
- 方法二:
Sphinx:搜索uid,fname,lname(属性:城市,国家)+ MVA:friendids(MVA存储所有朋友ID)
a) 在 sphinx 中搜索由包含 uid '11' 的 MVA 过滤的 'tony*'
b)然后再次执行 mysql 搜索以提取每个匹配的朋友 ID 的实时字段,如 picurl、状态。
- 方法3:
没有狮身人面像
a)Mysql 搜索 "uid 11" 的好友 where fname like 'tony%' OR lname like 'tony%' OR CONCAT(fname, ' ', lname) LIKE 'tony stark%' OR CONCAT(lname, ' ', fname) LIKE 'tony stark%' 并在同一个查询连接中提取详细信息(从其他帖子来看,这似乎对大量记录的性能较低)
方法4:
有什么建议么?
PS:我的下一个挑战是搜索朋友的朋友等问题标题..