在 id 数组上无条件地思考 sphinx 是行不通的
Thinking sphinx without condition on array of id is not working
我正在使用 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
这里有两个问题:
首先是您对任何非字符串数据使用字段而不是属性,这意味着某些过滤器无法可靠地工作。第二个问题是 id
被 Sphinx 内部使用,所以你要么使用 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]
)
在完全不相关的说明中:除非此搜索仅供管理员使用,否则我建议您不要在索引数据中包含电子邮件地址。在大多数情况下,允许人们通过电子邮件地址进行搜索存在安全风险。
我正在使用 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
这里有两个问题:
首先是您对任何非字符串数据使用字段而不是属性,这意味着某些过滤器无法可靠地工作。第二个问题是 id
被 Sphinx 内部使用,所以你要么使用 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]
)
在完全不相关的说明中:除非此搜索仅供管理员使用,否则我建议您不要在索引数据中包含电子邮件地址。在大多数情况下,允许人们通过电子邮件地址进行搜索存在安全风险。