0

我的 Rails 应用程序上有以下模型:

class User < ActiveRecord::Base
  has_many :tags
  has_many :talents, :through => :tags
  has_many :ratings

  define_index do
    indexes [:first_name, :last_name], :as => :name, :type => :string
    has 'AVG(ratings.value)', :as => :ratings, :type => :integer
    has tags(:talent_id), :as => :talent_id
    set_property :delta => true
  end

  def self.ts_search(q, talent)
    User.search q, :with => {:talent_id => talent.id}, :order => 'ratings DESC', :sort_mode => :extended
  end
end

class Talent < ActiveRecord::Base
  has_many :users, :through => :tags
end

class Rating < ActiveRecord::Base
  belongs_to :user
  belongs_to :talent
end

现在我需要使用 Thinking Sphinx 2.0.14 检索所有具有特定才能的用户,并按该特定才能的评分平均值对它们进行排序。

使用该功能def ts_search(q, talent),我可以检索所有具有特定才能的用户,并按所有才能的评分平均值对其进行排序。

如何修改此功能以按该特定人才评分的平均值对用户进行排序?

谢谢大家!

4

2 回答 2

1

恐怕你想要做的事情对 Sphinx 来说是不可能的——它没有关联记录、散列/字典或连接的概念,因此无法区分每个用户范围内哪些评级链接到哪些人才。

于 2013-05-25T02:57:26.317 回答
0

您可以通过以下方式进行 'OR' 和 'And' 查询:假设您要使用 Or 条件进行搜索 query_arr = ["test", "test-xyz"]

你的搜索查询像: User.search query_arr.join("( | )") 所以你的查询像 "( test )|( test-xyz )" 它将搜索所有用户你的文本与 test 或 test-xyz 匹配

您可以通过替换 | 来进行“与”查询 至 &。

于 2016-07-26T14:48:52.240 回答