최근 내부 피드백을 반영하여 검색 알고리즘 개선 작업을 우선순위로 정했습니다.
이 변경 사항은 Discourse 3.1.0.beta3의 일부로 이제 모든 사이트에 배포되었습니다. 업데이트 후, 사이트는 검색을 위해 모든 콘텐츠를 자동으로 다시 인덱싱하기 시작합니다.
이와 관련하여 두 가지 새로운 사이트 설정이 추가되었지만, meta에서 테스트를 통해 잘 작동하는 것으로 확인된 값으로 기본값이 설정되어 있어 대부분의 사이트에서는 이를 변경할 이유가 없을 것으로 예상됩니다.
제목의 부분 일치보다 전체 용어 일치 우선순위 설정
Discourse는 검색 시 stem(어간 추출) + prefix match(접두어 일치)를 수행합니다. 이로 인해 때때로 매우 예상치 못한 결과가 나올 수 있습니다.
예를 들어: redis는 redi로 어간 추출되므로, redis를 검색하면 redirect와 같이 redi로 시작하는 모든 단어를 찾을 수 있습니다.
새로운 숨겨진 사이트 설정 prioritize_exact_search_title_match가 추가되었으며, 기본적으로 활성화되어 있습니다.
변경 전:
변경 후:
즉, 제목을 기억하고 그대로 입력할 경우 해당 제목을 찾을 가능성이 훨씬 높아집니다.
최대 인덱스 중복도 감소
우리의 랭킹 알고리즘은 특정 용어에 대해 여러 번 일치하는 게시물을 한 번만 포함된 게시물보다 높은 순위를 부여합니다. 이는 단순히 한 단어를 반복해서 입력함으로써 검색을 "해킹"할 수 있음을 의미합니다. 단어를 더 많이 입력할수록 검색 결과 상위로 더 올라갑니다.
기본값이 6인 새로운 숨겨진 사이트 설정 SiteSetting.max_duplicate_search_index_terms가 추가되었습니다.
이 설정이 적용되면, 게시물에서 'sam’이라는 단어를 6번이든 60번이든 입력하든 동일한 순위가 매겨집니다. 결과물에 부여할 수 있는 보너스에 상한선을 두는 것입니다.
이 변경 사항은 검색 인덱스가 다소 작아지므로 성능에도 긍정적인 영향을 미칩니다.
기타 버그 수정
이번 작업의 일환으로 병리적(pathological) 검색 사례를 살펴봤습니다.
-
이전에는 닫힌(closed) 주제의 우선순위를 낮추는 조치를 취했지만, 아카이브된(archived) 주제는 놓치고 있었습니다. 이제 수정되었습니다.
-
이전에는 “도메인” 검색에 접두어 일치에 지나치게 의존하고 있었습니다. 즉,
happy는happi로 어간 추출되고 접두어 일치에 실패하기 때문에https://happy.com을 찾지 못했습니다. 이 문제는 수정되었습니다.
향후 계획
-
멘션 자동완성(auto-complete)에 대해 “퍼지(fuzzy)” 검색을 실험할 계획입니다. (예: 한 글자를 건너뛰도록 허용)
-
제목 내 중복 용어의 우선순위를 낮추는 것을 조사할 계획입니다. 현재 닫힌 주제
hello goodbye hello가 열려 있는(open) 주제hello world보다 높은 순위를 매기고 있습니다. -
PageRank… 현재 결과물을 랭킹할 때 내부에서 유입되는 링크의 수를 고려하지 않고 있습니다. 이는 때때로 매우 잘 연결된 주제가 어디서도 링크되지 않는 희귀 주제보다 낮은 순위를 매길 수 있음을 의미합니다. 랭킹 알고리즘에서 이를 반영하는 것이 좋겠습니다.
-
AI 통합을 살펴보는 오픈 이니셔티브가 있으며, GPT와 같은 도구에서 영감을 얻을 수 있을 것입니다.
도움을 줄 수 있는 방법?
meta에서 나쁜 검색 결과를 발견하셨나요? 그렇다면 검색하신 용어와 결과가 왜 미흡한지 설명을 포함해 알려주세요.
이 변경 사항에 대한 여러분의 느낌은 어떠신가요? (중립/좋아짐/나빠짐?)


