2009-07-16 4 views
1

테이블 보드, 사용자, 조인 및 역할이 있습니다. 조인 테이블은 사용자가 게시판에 대해 갖는 역할과 해당 게시판에 대한 사용자의 역할을 정의합니다. 나는 사용자의 보드를 한 번에 가져 와서 각 보드에서 어떤 역할을 할 것인지를 구분하거나 사용자를 특정 역할로하는 보드를 얻는 세 가지 별도의 호출을 시도합니다.Thinking Sphinx와 멋진 그룹화

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') 

첫 번째 쿼리의 문제는 각 보드 사용자를 가지고 있다는 것입니다 각각의 가능한 역할을 가지고 있으므로 특정 역할에 대한 보드가 아니라 사용자가 연관된 모든 보드를 얻습니다. 둘째로, 나는 같은 보드가 어떻게 3 번 나에게 돌아 왔는지 모르겠다.하지만 그 일은 일어난다.

도움/도움말을 미리 감사드립니다.

답변

0

그룹화 된 쿼리를 실행하면 그룹당 하나의 일치하는 결과가 반환됩니다.이 반환됩니다. 이 보드에는 세 가지 역할이 있기 때문에 각 그룹에 대해 특정 보드가 반환되는 것처럼 들립니다.

스핑크스는 관계에 대한 아이디어가 없으므로 단일 쿼리 (예 : 역할 값을 특정 사용자로 제한)에서 수행하려는 작업을 실제로 수행 할 수 있다고 생각하지 않습니다.

죄송합니다. 도움이 될 수 없습니다.

+0

답장을 보내 주셔서 감사합니다 잠시 동안 나는 지금 당장 그것을 작동시킬 방법을 고수 할 것입니다. 조금 더러워 지긴하지만. 나는 후속 질문이있을 것이라고 생각한다. 나는 여러 변수 속성을 만들 수 있는데, 그 중 하나는 정수리스트이고, 나는 그 목록을 작성하지 않고, 원래는 그렇게 할 수 없었다. 이제는 조인에 ID가 있으므로 게시판 색인에 가입 할 ID를 부여한 다음 게시판 검색에서 :에 대한 search_for_ids를 수행 할 수 있습니다. 모든 역할을 수행하는 데는 최적이 아닐 수도 있지만 한 가지 역할만으로는 충분합니다. –