Необычные группировки с Thinking Sphinx - PullRequest
1 голос
/ 17 июля 2009

У меня есть доски объявлений, пользователи, объединения и роли. Таблица соединений определяет связь, которую пользователь имеет с доской, а также роль, которую пользователь играет на этой доске. Я пытаюсь либо получить все доски пользователей одновременно, чтобы определить, какую роль пользователь играет на каждой доске, либо сделать три отдельных вызова, чтобы получить доски, в которых пользователь играет определенную роль.

В модели платы у меня:

  define_index do
    indexes :name
    indexes description

    has created_at
    has users(:id), :as => :user
    has joins.role_id, :as => :role

    set_property :enable_star => true
    set_property :min_infix_len => 1
  end

и я пробовал запросы, похожие на это:

Board.search(:with => {:user => some_user.id, :role => some_role.id})
Board.search(:with => {:user => some_user.id}, :group_function => :attr, :group_by => 'role')

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

Заранее благодарим за любую помощь / советы.

1 Ответ

0 голосов
/ 17 июля 2009

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

Я не думаю, что на самом деле возможно сделать то, что вы хотите сделать в одном запросе (то есть: ограничить значения роли конкретным пользователем) - потому что Sphinx не имеет никакого представления об отношениях.

Извините, я не могу вам помочь.

...