FEATURE: apply a small penalty to closed topics when searching (#7782)

FEATURE: apply a small penalty to closed topics when searching (#7782)

diff --git a/lib/search.rb b/lib/search.rb
index 13a3149..12af213 100644
--- a/lib/search.rb
+++ b/lib/search.rb
@@ -861,7 +861,11 @@ class Search
           THEN #{SiteSetting.category_search_priority_high_weight}
           WHEN #{Searchable::PRIORITIES[:very_high]}
           THEN #{SiteSetting.category_search_priority_very_high_weight}
-          ELSE 1
+          ELSE
+            CASE WHEN topics.closed
+            THEN 0.9
+            ELSE 1
+            END
           END
         )
       )
diff --git a/spec/components/search_spec.rb b/spec/components/search_spec.rb
index 0eff908..3e8f6b1 100644
--- a/spec/components/search_spec.rb
+++ b/spec/components/search_spec.rb
@@ -359,6 +359,26 @@ describe Search do
           post.id, category.topic.first_post.id, post2.id
         ])
       end
+
+      it 'applies a small penalty to closed topic when ranking' do
+        post = Fabricate(:post,
+          raw: "My weekly update",
+          topic: Fabricate(:topic,
+            title: "A topic that will be closed",
+            closed: true
+          )
+        )
+
+        post2 = Fabricate(:post,
+          raw: "My weekly update",
+          topic: Fabricate(:topic,
+            title: "A topic that will be open"
+          )
+        )
+
+        result = Search.execute('weekly update')
+        expect(result.posts.pluck(:id)).to eq([post2.id, post.id])
+      end
     end
 
     context 'searching for quoted title' do

GitHub sha: f51f37ed

1 Like