2011-02-06 5 views
0

Java 응용 프로그램에서 Sphinx (0.99 버전)를 사용하고 있습니다. 레일즈 앱에서 thinking_sphinx 플러그인과 함께 사용합니다.전체 색인을 다시 만들지 않고도 스핑크스 색인의 오래된 결과를 피하는 방법은 무엇입니까?

Java 응용 프로그램의 경우 델타 색인을 사용하려고합니다. 대부분 기존 레일 구성 및 응용 프로그램 동작에서 알아 냈습니다.

내가 검색하는 모델 개체에 '델타'라는 부울 필드가 있습니다. 레코드를 업데이트하거나 만들 때마다 해당 델타 필드를 true로 설정합니다.
스핑크스 구성의 델타 및 기본 인덱스 쿼리가 해당 델타 필드를 기반으로 올바른 레코드를 선택했음을 확인했습니다.
또한 내 코드는 업데이트하거나 삽입 할 때마다 델타 재 인덱스를 트리거합니다 (데이터를 절대 삭제하지 않습니다).

레코드를 업데이트 한 후에는 델타 인덱스에 올바르게 표시되지만 부 인덱스는 여전히 주 인덱스에 남아 있습니다. 'search'명령을 수동으로 실행하면이 사실을 알 수 있습니다.

지금까지이 모든 것은 내 레일 앱과 동일하게 작동합니다. 레일 앱은 검색 명령으로 확인해도 주 색인에 부실 사본이 표시됩니다.

그러나 레일즈 앱을 통해 검색하면 더 이상 부실 레코드가 표시되지 않습니다 (명령 줄 검색에 여전히 해당 레코드가 있음에도 불구하고). 그러나 Java 응용 프로그램을 통해 검색하면 결과에 여전히 부실 레코드가 표시됩니다.

어떻게 든 think_sphinx 플러그인이 어떤 식 으로든이 문제를 해결하고 있거나 어딘가 잘못된 구성 입력을 가지고 있다고 생각합니다.

나는 이것을 특별한 방법으로 처리하고 있는지를 알기 위해 thinking_sphinx 소스를 훑어 보았지만 명백한 것을 보지 못했습니다.

이상하게도 Java 응용 프로그램에서 동일한 동작을 원합니다.

My (Java) sphinx config는 here입니다.

답변

2

나는 thought_sphinx 또는 Java의 전문가는 아니지만, 색인의 주요 부분에서 복제 된 문서가 사라지게하려는 경우 Sphinx kill-list (http://sphinxsearch.com/docs/current.html#conf-sql-query-killlist)를 사용할 수 있습니다. 이것은 당신과 같은 경우를 위해 정확하게 발명되었습니다. 도움이되기를 바랍니다.

+0

내 문제를 완벽하게 해결했습니다. 많은 감사드립니다. –

관련 문제