0

我正在寻找一种解决方案,通过确切的姓名或他们的名字或姓氏的前缀来搜索朋友。我的要求与此链接类似。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:我的下一个挑战是搜索朋友的朋友等问题标题..

4

1 回答 1

0

会推荐方法2

但是对于方法 4 - 可能是使用专用的图形数据库。(或 mysql 的专用引擎) - 对于前缀搜索,您并不需要像 sphinx 这样的东西。

于 2013-05-24T17:04:55.633 回答