在id数组上没有条件的思维狮身人面像不起作用

时间:2017-01-03 14:42:27

标签: ruby-on-rails ruby-on-rails-3.2 sphinx thinking-sphinx

我正在使用ruby 1.9.3p392 rails 3.2.21 thinking sphinx 3.1.0Sphinx 2.2.4-id64-release

user_index.rb文件是: -

ThinkingSphinx::Index.define :user, :with => :active_record do
  indexes first_name, :sortable => true
  indexes last_name
  indexes email
  indexes user_name
  indexes company_id
  indexes id
  indexes user_type_id
  indexes department.name
  indexes department.id, :as => :department_id
end

当我搜索时: -

assigned_user_ids = [372, 373, 374, 375, 367, 376, 377, 378, 379, 380]
@users = User.search(Riddle::Query.escape(params[:search]), 
    :conditions => {:company_id => @company.id}, 
    :without => {:id => assigned_user_ids}, :per_page => PAGINATION_SIZE, 
    :page => params[:page])

但仍显示user id = 372

1 个答案:

答案 0 :(得分:0)

这里有两个问题:

首先,您使用字段而不是任何非字符串数据的属性,这意味着某些过滤器无法可靠地工作。第二个问题是Sphinx在内部使用id,因此您应该使用Thinking Sphinx的自动属性sphinx_internal_id,或者为您自己的属性添加别名。

所以,我建议改为使用以下索引定义:

ThinkingSphinx::Index.define :user, :with => :active_record do
  indexes first_name, :sortable => true
  indexes last_name
  indexes email
  indexes user_name
  indexes department.name

  has company_id
  has user_type_id
  has department.id, :as => :department_id
end

然后你的搜索将是:

assigned_user_ids = [372, 373, 374, 375, 367, 376, 377, 378, 379, 380]
@users = User.search(Riddle::Query.escape(params[:search]), 
  :with     => {:company_id => @company.id}, 
  :without  => {:sphinx_internal_id => assigned_user_ids},
  :per_page => PAGINATION_SIZE, 
  :page     => params[:page]
)

完全不相关的说明:除非管理员仅使用此搜索,否则我建议您在索引数据中包含电子邮件地址。在大多数情况下,允许人们通过电子邮件地址进行搜索是一种安全风险。