2010-09-03 3 views
17

일부 속성을 업데이트하는 지연된 작업을 배포하는 모델이 있습니다. 이 모델은 "검색 가능"으로 선언되었습니다 ...sunspot_rails은 저장 후 모델을 다시 인덱싱하지 않습니다.

searchable do 
    text :content, :stored => true 
end 

저장 후 다시 색인을 생성 할 것이라고 생각했던 .... 테스트 할 때 이것이 사실 인 것처럼 보이지 않습니다. 나는 실행 : rake sunspot:reindex, 다음 모든 것이 예상대로 작동합니다. 이 문제의 원인은 무엇입니까?

+0

더 나은 도달 범위를 얻을 수 있도록이 질문에 더 나은 키워드를 추가 할 수 있습니까? – Danny

+0

나는이 질문이 매우 잘 표현되어 있지 않다고 생각하지도 않으며 해결책도 아니다. 하나의 경우, 사용자는 분명히 '흑점'뿐만 아니라'sunspot_rails'를 사용하고있는 것입니다. 두 사람은 Answers가 sunspot_rails의 기본 태양 흑점 설정 때문에 부적절한 사항에 대해 논의 할 것을 제안했습니다. – nessur

+0

또한 모델 커밋에 대한 rspec 테스트가 작동하는지 확인하고 싶습니다. –

답변

5

색인은 Sunspot.commit이 호출 된 이후의 변경 사항을 반영합니다. rake sunspot:reindex을 실행하면이 문제가 자동으로 발생합니다.

Sunspot 's Rails 플러그인도 모든 요청 후에 Sunspot.commit_if_dirty을 호출하는 auto_commit_after_request 구성 옵션을 가지고 있지만 이것은 백그라운드 프로세스에 의해 트리거되지 않습니다.

귀하의 최선의 방법은 늦은 업무에서 마지막으로 Sunspot.commit_if_dirty 번으로 전화하는 것입니다.

+2

(반복) 자신의 질문은 실제로'sunspot_rails' 플러그인에 관한 것이지 바닐라 흑점에 관한 것이 아닙니다. – nessur

20

Jason에서 언급했듯이 Sunspot.commit_if_dirty을 호출하여 클라이언트로부터 커밋을 발행 할 수 있습니다.

서버 구성 측면에서 인덱스를 변경하면 solrconfig.xmlautoCommit 속성이 자동으로 커밋을 실행하도록 설정할 수 있습니다. 대부분의 사이트에서는 maxTime이 60000 ms (1 분)이면 충분합니다.

autoCommit을 사용하면 많은 양의 커밋이 Solr 서버의 성능에 쉽게 영향을 줄 수있는 생산 응용 프로그램에서 현명한 선택 일 수 있습니다. 실제로, Sunspot을 사용하는 에 대한 좋은 연습은auto_commit_after_request option에서 사이트가 적당한 양의 업데이트를 받기 시작할 때 사용하지 않는 것이 좋습니다.

마지막으로 autoCommit은 설정하고 잊어 버릴 수있는 장점이 있습니다.

Websolr에서 기본값은 클라이언트에서 발행 한 커밋을 무시하고 autoCommit을 사용하는 것입니다.

+2

질문은 사실'sunspot_rails' 플러그인에 관한 것이지 바닐라 흑점에 관한 것이 아닙니다. – nessur

+4

안녕하세요, 여기에 만들려는 지점이 무엇인지 확실하지 않습니다.sunspot_rails는 Sunspot을 Rails 모델과 컨트롤러에 연결할 수있는 가벼운 래퍼입니다. 게다가이 질문은 모든 커미트 문제에 대해 '컬 (curl)'로 발행 할 수있는 커밋 발행으로 이어집니다. –

+0

이 질문은 '자동 커밋 (auto-commit)'기능에 대해 묻습니다.이 바로 '경량 래퍼 (light wrapper)'가 Sunspots의 기본 기능을 추가하기 때문에 사용자가 설치 한 것과 관련이 있습니다. 언급되지 않은 기능은 세계를 돌아 다니며 평균 초보자는 sunsport_rails가 기본적으로 solr 인덱스에 대한 보류 변경 사항을 커밋하는 컨트롤러 후크를 설치한다는 사실을 알고 흥미롭게 느낄 수 있습니다. – nessur

6

나는 당신과 똑같은 문제를 겪었다. 검색 기능을 테스트 할 때 흑점은 결코 solr에 커밋을하지 않을 것이다. 수동으로 Sunspot.com으로 전화하면 모든 것이 작동합니다. auto_commit_after_request를 사용하여 주변을 둘러 보았습니다. 그러나 이것은 기본적으로 true이므로 다른 것을 만들어서는 안됩니다.

그래서 좀 더 조사한 결과, 웹 요청의 컨텍스트에서 변경하지 않는 한 Sunspot은 자동으로 커밋을 실행하지 않는다는 것을 발견했습니다. 테스트 또는 백그라운드 작업에서 변경을 수행하는 경우 Sunspot.commit을 수동으로 호출해야합니다.