2014-11-20 59 views
2

是否有可能使用思維獅身人面像爲它輸出8(或其他指定)類似的用戶?例如,我在加利福尼亞州的一個男性個人資料頁面上。在類似用戶部分下,它會顯示來自加利福尼亞州的另外8位男性。這將是一個隨機的8,沒有具體的順序。只是當前用戶頁面的性別和狀態位置必須相同。顯示類似用戶

我明白與獅身人面像實施地理距離,好奇如何根據用戶信息顯示類似的結果。有人有這樣的例子嗎?

+0

對不起,究竟是什麼問題呢?在獅身人面像中選擇兩個具體標準是最直接的事情......這是什麼問題?對他們來說是隨機的,還是要添加地理位置? – 2014-11-28 13:52:43

回答

1

你可以採取iMacTia建議的地理距離方法 - 雖然我擔心這可能是矯枉過正。

我假設狀態和性別都是您的獅身人面像索引中的字段爲用戶。這是在您的控制器的上下文中,您正在查看@user並且需要類似的用戶。

User.search(
    :conditions => {:state => @user.state, :gender => @user.gender} 
    :without => {:sphinx_internal_id => @user.id}, 
    :order  => 'RAND()', 
    :per_page => 8 
) 

打破每一個選項:

  • 通過適當的狀態和性別
  • 過濾器不包括當前用戶(模型的主鍵是獅身人面像的屬性命名sphinx_internal_id) 。
  • 隨機順序
  • 只有8結果
1

首先,您需要實現sphinx地理距離,如圖所示here。 一個你都做到了(假設你沒有爲它的用戶表),你現在可以做的:

@compatible_users = User.search "keyword", :geo => [@lat, @lng], 
    :with => {'@geodist' => 0.0..10_000.0} 

您可以使用「關鍵字」,你更喜歡。 @lat@lng是current_user座標,@geodist以米表示(因此在這種情況下表示「從0到10km」)。 您還需要對性別條件(對​​不起,我不知道你的模型字段的名字,但如果你知道如何使用獅身人面像這不應該是一個問題) 一旦你的@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