DEV: Add hidden site setting to configure search ranking weights (#20086)

This site setting is mostly experimental at this point.
This commit is contained in:
Alan Guo Xiang Tan 2023-01-31 08:57:13 +08:00 committed by GitHub
parent bb35274984
commit 6934edd97c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 0 deletions

View File

@ -2202,6 +2202,9 @@ search:
search_ranking_normalization:
default: "0"
hidden: true
search_ranking_weights:
default: ""
hidden: true
min_search_term_length:
client: true
default: 3

View File

@ -1134,6 +1134,7 @@ class Search
elsif !is_topic_search
rank = <<~SQL
TS_RANK_CD(
#{SiteSetting.search_ranking_weights.present? ? "'#{SiteSetting.search_ranking_weights}'," : ""}
post_search_data.search_data,
#{@term.blank? ? "" : ts_query(weight_filter: weights)},
#{SiteSetting.search_ranking_normalization}|32

View File

@ -113,6 +113,28 @@ RSpec.describe Search do
expect(Search.execute("oeuvre").posts).to contain_exactly(post_2)
end
end
context "when search_ranking_weights site setting has been configured" do
fab!(:topic) { Fabricate(:topic, title: "Some random topic title start") }
fab!(:topic2) { Fabricate(:topic, title: "Some random topic title") }
fab!(:post1) { Fabricate(:post, raw: "start", topic: topic) }
fab!(:post2) { Fabricate(:post, raw: "#{"start " * 100}", topic: topic2) }
before do
SearchIndexer.enable
[post1, post2].each { |post| SearchIndexer.index(post, force: true) }
end
after { SearchIndexer.disable }
it "should apply the custom ranking weights correctly" do
expect(Search.execute("start").posts).to eq([post2, post1])
SiteSetting.search_ranking_weights = "{0.00001,0.2,0.4,1.0}"
expect(Search.execute("start").posts).to eq([post1, post2])
end
end
end
context "with apostrophes" do