Discourse 검색 기능 패치

각 사용자에게 추가 데이터를 저장하는 플러그인을 작성 중입니다(discourse-user-notes와 유사하지만, 스태프 전용이 아닙니다). 이 데이터를 검색할 수 있도록 하고 싶습니다.

아마도 lib/search.rb의 일부 패치가 필요할 것 같습니다. Algolia 검색 플러그인이 검색 상자 팝업에 표시되는 내용을 오버라이드한다는 것은 알고 있지만, 이상적으로는 실제 결과 페이지에도 영향을 주기를 원합니다.

어디서부터 시작해야 할지 조언을 주실 수 있는 분이 있을까요?

플러그인에서 검색을 확장할 수 있습니다. 예를 들어, 다음과 같은 고급 필터를 추가할 수 있습니다:

  require_dependency 'search'
  if Search.respond_to? :advanced_filter
    Search.advanced_filter(/with:video/) do |posts|
      posts.where("posts.cooked LIKE '%<video %'")
    end
  end

위 코드는 검색 창에 with:video 키워드가 포함된 경우에만 비디오가 포함된 게시물을 표시합니다. 사용자 데이터를 고려한 검색 쿼리의 예로는 배지 고급 필터를 참고하세요.

좋네요. 고급 필터를 추가하면 이 결과가 일반(고급 필터 미사용) 검색에서도 표시되나요?

네, 고급 키워드를 검색 팝업과 전체 페이지 검색 모두에서 사용할 수 있습니다.

이러한 보호 기능이 더 이상 필요하지 않습니다. 해당 API는 이미 오랫동안 사용되어 왔기 때문입니다.

이 주제에 대해, PluginStore가 여기서 잘 확장될까요? 키에 LIKE에 적합한 인덱스가 없는 한 많은 전체 스캔이 발생할 것 같아서, 추가 사용자 데이터를 위한 1:1 테이블을 만드는 것이 더 나은 방법일까요?

PluginStore는 피해야 하며, 플러그인을 위한 테이블을 배포하세요.