是否可以使用Thinking Sphinx输出8个(或其他指定的)类似用户?例如,我在加利福尼亚州的Males个人资料页面上。在类似用户部分下,它将显示来自加利福尼亚州的其他8名男性。这将是一个随机的8,没有特定的顺序。只需当前用户页面的性别和州位置即可。
我理解与Sphinx实现地理距离,对如何根据用户信息显示类似结果感到好奇。有人有这方面的例子吗?
答案 0 :(得分:1)
首先,您需要实施像here所示的sphinx geodistance。 一个你已经完成它(让我们说你为User表做了)你现在可以做:
@compatible_users = User.search "keyword", :geo => [@lat, @lng],
:with => {'@geodist' => 0.0..10_000.0}
您可以使用"关键字"你喜欢什么@lat
和@lng
是current_user坐标,@ geodist以米为单位表示(因此在这种情况下,它表示"从0到10km")。
您还需要性别上的条件(抱歉,我不知道您的模型字段名称,但如果您知道如何使用sphinx,这应该不是问题)
收集@compatible_users
后,任务现在可以随机选择其中一些:
n = 8 # This is the number of users you want.
# Ruby 1.9+
@ result = @compatible_users.sample(n)
# Ruby 1.8
@ result = @compatible_users.shuffle[0...n]
您在@result
中拥有兼容用户:)
请注意,如果@compatible_users.size
低于n
,则使用shuffle
和使用sample
的较短数组会出错。因此,您可能需要检查它,并最终使用更宽@geodist
答案 1 :(得分:1)
你可以按照iMacTia的建议采取地理距离的方法 - 尽管我担心这可能有点矫枉过正。
我假设状态和性别都是用户的Sphinx索引中的字段。这是在您的控制器环境中,您正在查看@user
并希望有类似的用户。
User.search(
:conditions => {:state => @user.state, :gender => @user.gender}
:without => {:sphinx_internal_id => @user.id},
:order => 'RAND()',
:per_page => 8
)
分解每个选项:
sphinx_internal_id
的属性)。