我正在使用ruby 1.9.3p392
rails 3.2.21
thinking sphinx 3.1.0
和Sphinx 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
答案 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]
)
完全不相关的说明:除非管理员仅使用此搜索,否则我建议您不在索引数据中包含电子邮件地址。在大多数情况下,允许人们通过电子邮件地址进行搜索是一种安全风险。