0

유스 케이스 다루는 것은 이것이다 :스핑크스 응용 프로그램 전체 검색을 생각하고 결과

내가 다음 검색 결과 페이지에 본질적으로별로 결과를 정리 한 텍스트 상자에서 내 사용자 검색을 할 수 싶습니다

.

예를 들어 Thinking Sphinx에 대해 구성된 모델이 다음과 같습니다 (Post, CommentUser). (제 상황에서는 약 10 개의 모델이 있지만 StackOverflow의 명확성을 위해서만 3 개만있는 것 같습니다.)

비슷한 검색을 수행 할 때 : ThinkingSphinx.search 'search term', :classes => [Post, Comment, User] 결과를 반복하는 가장 좋은 방법은 모르겠지만 내 페이지의 섹션을 빌드하십시오. ?

나의 첫번째 성향은 같은 것을 할 수 있습니다 :

  1. 검색 설정 반환 된 결과를 통해
  2. 반복 처리를 실행하고 result.is_a을 (ClassType의)
  3. 하는 ClassType에 기반을 추가, 1 ~ 3의 배열에 항목 - @match_posts, @matching_comments, 또는 @matching_users
  4. 아래 내보기에 그 3 개 인스턴스 변수를 전달

더 효과적인 방법이 있습니까? 감사합니다.

답변

0

귀하의 웹 사이트를 이용하는 사람들에게 유용한 것이 무엇인지 생각합니다. 모든 모델에서 동일한 쿼리를 실행하는 것이 합리적입니까? 그러면 특히 성능 측면에서 보면 ThinkingSphinx.search이 가장 좋습니다.

그렇다면 각 클래스별로 검색 결과를 그룹화 하시겠습니까? 그런 다음 정렬이 필요합니다. 아니면 GitHub 검색과 같이 각 수업의 결과를 분리하고 있습니까? 그렇다면 이미 생각한 것과 같이 별도의 컬렉션을 갖는 것이 가치가있을 수 있습니다.

가장 기본적인 수준에서는 클래스 대신 관련성에 따라 정렬 된 모든 것을 반환 할 수 있으며 각 결과에 따라 약간 다른 출력을 렌더링 할 수 있습니다. 사례 진술이 도움이 될 수 있습니다 - 조력자 및/또는 부분 성의 논리를 최대한 유지하는 것이 가장 좋습니다.

+0

안녕하세요 Pat, 답변 해 주셔서 감사합니다. 나는 당신의 두 번째와 세 번째 단락에 의해 조금 혼란스러워합니다. 2 단락에 관해서는, 나는 사용자를 위해 가능한 한 쉬운 검색을하려고 노력하고있다. 1 수색 바에 무엇이든 입력하고 본질적으로 수업별로 정리 된 결과를 봅니다. 즉 검색 결과와 일치하는 게시물, 검색 결과와 일치하는 작성자 이름, 검색 등과 일치하는 의견 등. 내 질문은 내가 어떻게 효율적으로 & 효율적으로 결과를 정렬합니까? 3 단락에서는 2 단락과 다를 바가 없습니다 ... 단지 [email protected] render와 다른 곳을 비교해보세요. –

+0

좋아, 클래스 이름별로 정렬 한 다음 각 클래스 집합 내에서 관련성을 확인하려는 것 같습니다. http://groups.google.com/group/thinking-sphinx/browse_thread/thread/813de527037534bd/6c6d862554d7eb64?lnk=gst&q=sort+by+class#6c6d862554d7eb64에는이를 수행하는 방법에 대한 예제가 있습니다. – pat

+0

그리고 나서 인수 (검색 결과)를 취해 특정 부분을 렌더링하는 도우미가 있습니다. 물론, Rails가 기대하는 것과 일치하도록 부분 이름을 지정할 수 있습니다 ('app/views/model_name/_model_name.html.erb'). 대신'render result'를 호출하십시오. – pat

0

검색 모델이 3 개인 경우 ThinkingSphinx.search 대신 model.search 만 사용해야합니다. 이렇게하면 result.is_a? 수행 문제가 해결됩니다. 즉, 각 model에 대한 결과를 표시하려는 방식으로 쉽게 처리 할 수 ​​있습니다.

+0

좋은 지적이지만 몇 가지 사항이 떠 올랐습니다. 1 ~ 내 제품에는 10 가지 모델이 더 있습니다 (초기 질문 업데이트). 2 - 귀하의 방법으로 ThinkingSphinx가 하나의 쿼리가 아닌 3 개의 인덱스 검색을 실행하게 할 수 있습니까? 퍼포먼스가 중요하기 때문에 많은 텍스트를 검색하려고합니다. 감사. –