2017-01-03 3 views
0

Я использую ruby 1.9.3p392rails 3.2.21thinking 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

Есть две проблемы:

Первое, что вы используете поля вместо атрибутов для любых нестроковых данных, а это означает, что некоторые фильтры не будут надежно работать. Вторая проблема заключается в том, что 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] 
) 

В совершенно несвязанной примечание: если этот поиск не используется только администраторы, я бы порекомендовал вас не имеют адреса электронной почты в ваших проиндексированных данных. Предоставление пользователям возможности поиска по электронной почте является угрозой безопасности в большинстве ситуаций.

+0

Спасибо @pat, это сработало. –

Смежные вопросы