2014-11-07 1 views
0

"연관성"과 "가입"이라는 2 개의 연관성이있는 채널 모델이 있습니다.Thinking Sphinx에서 연관 수별로 정렬하기

채널 색인에서 사용자는 구독 수 또는 승인 된 콘텐츠 수로 채널을 주문할 수 있습니다.

개발 과정에서 모든 것이 제대로 작동하는 것처럼 보이지만 (결과를 관찰하여 오작동을 일으킬 수 있고 데이터를 제대로 볼 수없는 문제 일 수 있습니다.) 결과를 준비하는 데는 무작위이며 때로는 적절하게 표시되거나 때때로 가끔씩 표시됩니다. '티. 처음에는

내가 거기에있을 수있는 문제를 델타 인덱스를 사용하고 생각되지 않았다 그래서 내용을 승인 할 때마다 내가 전화 : 구독이 인덱스를 가지고 있지 않기 때문에

Delayed::Job.enqueue(DelayedRake.new("ts:index"), queue: "sphinx") 

, 그렇게하지 내가 하나 만들 때마다 인덱싱 (나는 그것을해야합니까?)

다음

나는 채널 델타 인덱스를 사용하고 난 여전히 같은 문제를 얻을 시작 : 여기

ThinkingSphinx::Index.define :channel, with: :active_record, delta: true do 
    # fields 
    indexes :name, sortable: true 
    indexes description 

    # attributes 
    has created_at, sortable: true 
    has approved, type: :boolean 
    has public, type: :boolean 

    join subscriptions 
    has "COUNT(subscriptions.id)", as: :subscription_count, type: :integer, sortable: true 

    join contents.approved 
    has "COUNT(contents.id)", as: :content_count, type: :integer, sortable: true 
end 

을 그리고 시든입니다 채널 컨트롤러에 전화 :

def index 
    if params[:order_by].present? 
     @channels = Channel.search params[:search], 
           order: "#{params[:order_by]} DESC", 
           page: params[:page], per_page: 6 
    else 
     @channels = Channel.search params[:search], 
           order: :name, 
           page: params[:page], per_page: 6 
    end 
    end 

요약하기를, 내 질문은 다음과 같습니다 1. 내 채널 인덱스를 잘 형성하고 있는가? 2. 색인으로 구독해야합니까, 아니면 내 채널 색인에 구독하기에 충분합니까? 3. 채널 인덱스에 가입 된 두 컨트롤러가 있기 때문에 구독을 만들거나 콘텐츠를 승인하거나 채널에서 델타 인덱스를 처리 한 후 다시 인덱스를 실행해야합니까?

답변

1

색인이 잘 보이지만 델타를 사용하고 있다면 (데이터를 최신 상태로 유지하는 데 가장 현명한 방법이라고 생각합니다.) 구독을 할 때 관련 채널에 대한 델타를 실행하려고합니다. 또는 콘텐츠가 생성/편집/삭제 될 수 있습니다. 나는 거라고는 지연 작업을 사용하는 감안할 때

after_save :set_channel_delta_flag 
after_destroy :set_channel_delta_flag 

# ... 

private 

def set_channel_delta_flag 
    channel.update_attributes :delta => true 
end 

: 이것은 (이하 "델타와 협회"절을 참조하십시오) the documentation에 포함되어 있지만 서브 스크립 션 및 콘텐츠 모두에서이 같은보고 할 것 델타 업데이트가 정상적인 HTTP 요청 흐름에서 발생하는지 확인하려면 ts-delayed-delta을 조사하는 것이 좋습니다. 그리고 모든 변경 후에도 전체 색인을 실행하지 않는 것이 좋습니다. 즉, 상당히 느려지고 (그리고 서버로드를 불필요하게 추가하는) 잠재력이 있습니다.

+0

답변 해 주셔서 감사합니다. 나는 당신의 조언을 따르고 ts-delayed-delta를 통합하고 있으며 작은 질문이 있습니다. 델타가 실행되는 대기열을 선택할 수 있습니까? – nunopolonia

+0

'config/thinking_sphinx.yml'에서 각각의 적절한 환경에 대해'delayed_job_queue'를 선호 큐로 설정하면, 그 트릭을해야합니다. – pat