【发布时间】:2013-05-24 16:42:09
【问题描述】:
我正在寻找一种解决方案,通过确切的姓名或他们的名字或姓氏的前缀来搜索朋友。我的要求与此链接类似。 Sphinx vs. MySql - Search through list of friends (efficiency/speed) 但该帖子没有解释如何做到这一点。它确实说不建议通过 sphinx 搜索关系。谁能建议我是否应该使用以下任何一种方法或完全不同的方法。此外,我正在寻找超过一百万条记录的高速和可扩展性
数据库结构类似。
InnoDB
table1- 用户: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) 然后在 sphinx 中按数组 X 搜索 'tony*' 过滤后的 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%' and pullout the details in the same query join (从其他帖子看来,大量记录的性能似乎很低)
-
方法4:
有什么建议吗?
PS:我的下一个挑战是搜索朋友的朋友和问题标题..
【问题讨论】: