Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(157)

Unified Diff: components/omnibox/browser/scored_history_match.cc

Issue 2541143002: Omnibox - Boost Frequency Scores Based on Number of Matching Pages (Closed)
Patch Set: fix rebase errors Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/omnibox/browser/scored_history_match.cc
diff --git a/components/omnibox/browser/scored_history_match.cc b/components/omnibox/browser/scored_history_match.cc
index 8e88bfa1cc22a990ca673aa703cb1a29301d35cd..5dddb3f5102493781921eab8a52b83e73a7e1710 100644
--- a/components/omnibox/browser/scored_history_match.cc
+++ b/components/omnibox/browser/scored_history_match.cc
@@ -117,6 +117,8 @@ size_t ScoredHistoryMatch::num_title_words_to_allow_;
float ScoredHistoryMatch::topicality_threshold_;
ScoredHistoryMatch::ScoreMaxRelevances*
ScoredHistoryMatch::relevance_buckets_override_ = nullptr;
+OmniboxFieldTrial::NumMatchesScores*
+ ScoredHistoryMatch::matches_to_specificity_override_ = nullptr;
ScoredHistoryMatch::ScoredHistoryMatch()
: ScoredHistoryMatch(history::URLRow(),
@@ -126,8 +128,8 @@ ScoredHistoryMatch::ScoredHistoryMatch()
WordStarts(),
RowWordStarts(),
false,
- base::Time::Max()) {
-}
+ 1,
+ base::Time::Max()) {}
ScoredHistoryMatch::ScoredHistoryMatch(
const history::URLRow& row,
@@ -137,6 +139,7 @@ ScoredHistoryMatch::ScoredHistoryMatch(
const WordStarts& terms_to_word_starts_offsets,
const RowWordStarts& word_starts,
bool is_url_bookmarked,
+ size_t num_matching_pages,
base::Time now)
: HistoryMatch(row, 0, false, false), raw_score(0) {
// NOTE: Call Init() before doing any validity checking to ensure that the
@@ -254,8 +257,10 @@ ScoredHistoryMatch::ScoredHistoryMatch(
const float topicality_score = GetTopicalityScore(
terms_vector.size(), url, terms_to_word_starts_offsets, word_starts);
const float frequency_score = GetFrequency(now, is_url_bookmarked, visits);
- raw_score = base::saturated_cast<int>(
- GetFinalRelevancyScore(topicality_score, frequency_score));
+ const float specificity_score =
+ GetDocumentSpecificityScore(num_matching_pages);
+ raw_score = base::saturated_cast<int>(GetFinalRelevancyScore(
+ topicality_score, frequency_score, specificity_score));
if (also_do_hup_like_scoring_ && likely_can_inline) {
// HistoryURL-provider-like scoring gives any match that is
@@ -610,9 +615,29 @@ float ScoredHistoryMatch::GetFrequency(const base::Time& now,
ScoredHistoryMatch::max_visits_to_score_;
}
+float ScoredHistoryMatch::GetDocumentSpecificityScore(
+ size_t num_matching_pages) const {
+ // A mapping from the number of matching pages to their associated document
+ // specificity scores. See omnibox_field_trial.h for more details.
+ CR_DEFINE_STATIC_LOCAL(OmniboxFieldTrial::NumMatchesScores,
+ default_matches_to_specificity,
+ (OmniboxFieldTrial::HQPNumMatchesScores()));
+ OmniboxFieldTrial::NumMatchesScores* matches_to_specificity =
+ matches_to_specificity_override_ ? matches_to_specificity_override_
+ : &default_matches_to_specificity;
+
+ // The floating point value below must be less than the lowest score the
+ // server would send down.
+ OmniboxFieldTrial::NumMatchesScores::const_iterator it = std::upper_bound(
+ matches_to_specificity->begin(), matches_to_specificity->end(),
+ std::pair<size_t, double>{num_matching_pages, -1});
+ return (it != matches_to_specificity->end()) ? it->second : 1.0;
+};
+
// static
float ScoredHistoryMatch::GetFinalRelevancyScore(float topicality_score,
- float frequency_score) {
+ float frequency_score,
+ float specificity_score) {
// |relevance_buckets| gives a mapping from intemerdiate score to the final
// relevance score.
CR_DEFINE_STATIC_LOCAL(ScoreMaxRelevances, default_relevance_buckets,
@@ -625,8 +650,9 @@ float ScoredHistoryMatch::GetFinalRelevancyScore(float topicality_score,
if (topicality_score == 0)
return 0;
- // Here's how to interpret intermediate_score: Suppose the omnibox
- // has one input term. Suppose we have a URL for which the omnibox
+ // Here's how to interpret intermediate_score: Suppose the omnibox has one
+ // input term. Suppose the input matches many documents. (This implies
+ // specificity_score == 1.0.) Suppose we have a URL for which the omnibox
// input term has a single URL hostname hit at a word boundary. (This
// implies topicality_score = 1.0.). Then the intermediate_score for
// this URL will depend entirely on the frequency_score with
@@ -650,7 +676,8 @@ float ScoredHistoryMatch::GetFinalRelevancyScore(float topicality_score,
//
// The score maxes out at 1399 (i.e., cannot beat a good inlineable result
// from HistoryURL provider).
- const float intermediate_score = topicality_score * frequency_score;
+ const float intermediate_score =
+ topicality_score * frequency_score * specificity_score;
// Find the threshold where intermediate score is greater than bucket.
size_t i = 1;
« no previous file with comments | « components/omnibox/browser/scored_history_match.h ('k') | components/omnibox/browser/scored_history_match_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698