제목이 검색어와 일치할 경우 토론 첫 번째 게시물을 우선 표시해야 합니다

즉, 검색 인덱스에서 해당 게시물이 첫 번째 게시물인지 절대적으로 알 수 있는 방법이 없다는 뜻인가요?

이런 식의 조정은 어떨까요?

특정 검색어에 해당 토픽의 여러 게시물이 일치하고, 그중 하나가 첫 번째 게시물인 경우, 그 특정 게시물, 즉 첫 번째 게시물에 대해 검색 랭킹을 크게 올린다.

이렇게 하면 무조건적인 “게시물 번호순 정렬” 동작을 피하면서, 동시에 첫 번째 게시물에 적절히 우선순위를 줄 수 있지 않을까요?

2개의 좋아요

현재는 불가능하지만, PostSearchIndex를 PM 여부로 필터링할 수 있도록 하기 위해 작년에 수행한 최적화와 유사한 방식이므로 추가하는 것은 어렵지 않을 것입니다.

2개의 좋아요

저는 주제 내 중복 항목에 대한 정확한 랭킹의 이론적 이점이 단점이 너무 많다고 생각합니다.

  • 사용자가 검색을 북마크처럼 사용하다가, 항상 77번째로 이동하던 검색이 이제 892번째로 이동하게 되면 혼란을 겪을 수 있습니다.

  • 기름을 부어 불을 키는 셈인데, 현재 "주제 내 첫 번째 읽지 않은 게시물로 이동"하는 메커니즘이 없습니다. 따라서 후기 게시물을 우선시하면, 읽지 않은 구간의 확률이 높아지는 큰 단점이 있습니다(예: 1, 2, 3번은 읽었지만 4~88번은 읽지 않은 상태에서 89번에 도달하는 경우).

  • 저는 주제 내 첫 번째 검색 결과를 무조건 우선시하는 방식을 훨씬 선호합니다. 설명하기가 더 간단하고 훨씬 안정적이기 때문입니다.

5개의 좋아요

동의합니다. 그 해결책이 저에게는 잘 작동합니다 :+1:

4개의 좋아요

주제 내 첫 번째 검색 결과의 랭킹을 사용할까요, 아니면 주제 내 최고의 게시글 랭킹을 사용할까요? 과거에는 후자를 사용했는데, 이는 검색 결과에 표시되지 않을 게시글의 랭킹을 다른 주제들의 게시글과 비교하는 것이므로 잘못된 접근이라고 생각됩니다.

3개의 좋아요

링크는 MIN(post_number)를 사용하고, 집계 작업 시에는 MAX(rank) 기준으로 랭킹을 매기는 것이 좋다고 생각합니다.

3개의 좋아요

새로운 동작은

FIX: Select earliest post when aggregating posts in a topic for search. - Pull Request #11914 - discourse/discourse - GitHub 에서 되돌려졌습니다.

5개의 좋아요

이 주제는 6일 후 자동으로 닫혔습니다. 더 이상 새 답변을 남길 수 없습니다.

주제를 다시 열어주셔서 감사합니다. 이 관련해서 아직 문제가 있는 것 같습니다. https://community.wanikani.com 에는 "General Anime Thread"라는 제목의 주제가 있습니다. "general anime"으로 검색하면 이 주제가 최상위 결과로 나오지만, 실제로는 511번째 게시물로 이동합니다. 특히 이상한 점은 이 게시물에 "general"이나 "anime"이라는 단어가 전혀 포함되어 있지 않다는 것입니다. 그래서 어떻게 보면 원래 보고된 문제보다 더 심각한 것 같습니다. 제가 아는 한, https://community.wanikani.com 은 이 수정이 병합된 이후의 버전을 사용 중이어야 합니다.

두 번째 예를 들어 설명하자면, "japanese book club"으로 검색하면 주제 제목에 검색어가 포함되어 있음에도 불구하고 해당 주제의 925번째 게시물로 이동합니다.

메타 사이트에서 재현을 시도해 보았지만 성공하지 못했습니다. 다만 제가 시도한 특정 검색어들 때문일 수도 있습니다.

4개의 좋아요

소스를 직접 확인해서 버전을 확인해 보셨나요? 여기에서 재현할 수 없다면, 버전 불일치일 가능성이 높습니다.

1개의 좋아요

이것은 페이지 소스에서 가져온 내용입니다:

Discourse 2.7.0.beta4 - https://github.com/discourse/discourse version 47835ade9a3dcebb14bdd744e92d93b9c9199b90

해당 커밋은 이틀 전의 것인데, 제가 지난 게시물에 제시한 예시들을 통해 여전히 이 문제를 재현할 수 있습니다.

3개의 좋아요

매우 자세한 보고 감사합니다. @tgxworld 님이 바로 확인해 보겠습니다!

4개의 좋아요

@sam 이 문제가 뭔지 알고 있어요. 대형 사이트에서 검색 성능을 최적화하기 위해 부분 인덱스만 검색하는 기능이 있거든요. 첫 번째 게시물이 너무 오래되었기 때문에 부분 인덱스에 포함되지 않아서 첫 번째 게시물로 링크를 걸지 않는 거예요. 이 문제의 해결책에 대해 생각해봐야 하는데, 현재 제가 고안한 해결책들은 성능과 정확성 중 하나를 타협해야 하는 상황이에요.

3개의 좋아요

성능 트레이드오프를 고려할 때, 모든 토픽의 첫 번째 게시물을 인덱스에 포함시키는 것이 합리적인가요? 아니면 최적화 시간 범위 내에 게시물이 있는 토픽의 경우에만 첫 번째 게시물을 포함시키는 방식이 더 나을까요? 물론 후자가 데이터베이스 관점에서 실현 가능한지 여부는 가정해야 합니다.

3개의 좋아요

기술적으로는 실현 가능하지만, 해결하기 매우 복잡한 문제입니다.

이 문제를 해결하기 위해 예를 들어 1주일 동안 신중하게 인덱스를 재배열하는 데 드는 비용이 실제로는 합당하지 않을 수 있다고 생각합니다.

이 문제를 복잡하게 만드는 다양한 예외적인 상황도 많이 생각납니다(짧은 주제들이 산더미처럼 쌓인 포럼 같은 경우).

이 문제는 잠시 보류하고, 얼마나 자주 발생하는지 지켜보는 것이 좋겠습니다.

당신의 포럼에서 당장 적용할 수 있는 임시 조치는 최근 인덱스 크기를 두 배로 늘리는 것입니다. 이는 설정이 가능합니다(@tgxworld, 이렇게 설정할 수 있게 해주세요).

4개의 좋아요

감사합니다! 안전하다고 생각하신다면 그렇게 해 주시면 좋겠습니다!

3개의 좋아요

이것이 실제로 실행되었나요? 이전에 언급된 토픽을 검색하면 이제 511번째 게시물이 아니라 523번째 게시물로 이동하게 되는데, 이는 인덱스 범위를 벗어나는 게시물이 점점 더 많아지고 있음을 시사하는 것 같습니다.

2개의 좋아요

Sean, 건의 사항이 올라오지 않은 것 죄송합니다.

방금 SiteSetting.search_recent_posts_size 값을 250k로 변경했습니다. 현재 주제(topic)가 163k개밖에 없으므로, 변경 사항이 적용되려면 수일이 걸릴 것입니다. 예약된 작업(scheduled job)이 실행되어야 하기 때문입니다.

4개의 좋아요

변경 사항이 이미 적용된 것 같습니다. 이전에 100만으로 변경해 두었지만, 여기서 업데이트를 남기는 것을 잊었습니다.

@sam 이 문제를 언젠가 해결할 계획이 있나요? 부분 인덱스에 모든 첫 번째 게시글을 포함하는 것은 나쁜 트레이드오프가 아닌 것 같습니다. 이전 논의에서 @codinghorror 님은 검색 시 토픽을 우선적으로 강조한 후에야 토픽 내 게시글이 표시되어야 한다고 믿고 있다고 알고 있습니다.

3개의 좋아요