Логика ИЛИ с фильтрами атрибутов в Sphinx

У меня есть вариант использования, когда мне нужно использовать логику ИЛИ с фильтрами атрибутов. Вот сценарий: у пользователя много ролей и атрибут, называемый глобальным. Ниже находится индексный блок

define_index do
  has roles(:id), :as => :role_ids
  has global
end

И мне нужно, чтобы пользователи имели роли с идентификатором 5 или пользователи с глобальным значением true. Вот запрос, который я пытаюсь использовать

User.search(
     :sphinx_select => "*, IF(global OR role_ids = 5, 1, 0) AS program_global",
     :with => {'program_global' => true},
     :match_mode => :extended
)

Это приводит к синтаксической ошибке — неожиданному TOK_ATTR_MVA рядом с 'role_ids = 5, 1, 0)' . Проблема здесь, похоже, в том, что role_ids — это MVA. Я использую сфинкс 0.9.9

Любая помощь?


person Mrudhukar Batchu    schedule 29.02.2012    source источник
comment
Попробуйте (global | role_ids) = (5 | 1|0) символ вертикальной черты вместо «ИЛИ». Я пробовал со старой версией, а не с новой.   -  person Jak    schedule 29.02.2012


Ответы (1)


Это был ответ, данный Пэт

https://groups.google.com/forum/?fromgroups#!topic/thinking-sphinx/kxNIGP10hkQ

"*, IF(global OR IN(role_ids, 5), 1, 0) AS program_global"
person Mrudhukar Batchu    schedule 01.03.2012