Skip to content

Commit

Permalink
[Categorical search] Update category enum with final values
Browse files Browse the repository at this point in the history
We now know the final list of categories for use in categorical search
- this CL updates the recently added enum to these values. It also
removes the kBestMatch as a category and instead adds it as a separate
piece of metadata. This is a better approach for ranking purposes, as
results can be moved in and out of best match without erasing their
category.

Bug: 1256952
Change-Id: If254a9e6fd00a8f6e29c5ce79f281967804c64a9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3216078
Commit-Queue: Tony Yeoman <tby@chromium.org>
Reviewed-by: Xiyuan Xia <xiyuan@chromium.org>
Reviewed-by: Amanda Deacon <amandadeacon@chromium.org>
Cr-Commit-Position: refs/heads/main@{#930835}
  • Loading branch information
tby authored and Chromium LUCI CQ committed Oct 12, 2021
1 parent 6edc048 commit d4fb20b
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 26 deletions.
3 changes: 3 additions & 0 deletions ash/app_list/model/search/search_result.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,9 @@ class APP_LIST_MODEL_EXPORT SearchResult {
Category category() const { return metadata_->category; }
void set_category(Category category) { metadata_->category = category; }

bool best_match() const { return metadata_->best_match; }
void set_best_match(bool best_match) { metadata_->best_match = best_match; }

DisplayType display_type() const { return metadata_->display_type; }
void set_display_type(DisplayType display_type) {
metadata_->display_type = display_type;
Expand Down
24 changes: 15 additions & 9 deletions ash/public/cpp/app_list/app_list_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -188,19 +188,21 @@ enum class AppListSearchResultType {
// to be displayed in the search box should be associated with one category. It
// is an error for results displayed in the search box to have a kUnknown
// category, but results displayed in other views - eg. the Continue section -
// may use kUnknown. These values are not yet stable, and should not yet be used
// for metrics.
// may use kUnknown.
//
// These values are persisted to logs. Entries should not be renumbered and
// numeric values should never be reused.
enum class AppListSearchResultCategory {
kUnknown = 0,
kBestMatch = 1,
kApp = 2,
kApps = 1,
kAppShortcuts = 2,
kWeb = 3,
kFiles = 4,
kAssistant = 5,
kSettings = 6,
kHelp = 7,
kPlayStore = 8,
kMaxValue = kPlayStore,
kSettings = 5,
kHelp = 6,
kPlayStore = 7,
kSearchAndAssistant = 8,
kMaxValue = kSearchAndAssistant,
};

// Which UI container(s) the result should be displayed in.
Expand Down Expand Up @@ -369,6 +371,10 @@ struct ASH_PUBLIC_EXPORT SearchResultMetadata {
// section.
AppListSearchResultCategory category = AppListSearchResultCategory::kUnknown;

// Whether this result is a top match and should be shown in the Top Matches
// section instead of its category.
bool best_match = false;

// The type of this result.
AppListSearchResultType result_type = AppListSearchResultType::kUnknown;

Expand Down
5 changes: 5 additions & 0 deletions chrome/browser/ui/app_list/search/chrome_search_result.cc
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,11 @@ void ChromeSearchResult::SetCategory(Category category) {
SetSearchResultMetadata();
}

void ChromeSearchResult::SetBestMatch(bool best_match) {
metadata_->best_match = best_match;
SetSearchResultMetadata();
}

void ChromeSearchResult::SetDisplayType(DisplayType display_type) {
metadata_->display_type = display_type;
SetSearchResultMetadata();
Expand Down
2 changes: 2 additions & 0 deletions chrome/browser/ui/app_list/search/chrome_search_result.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ class ChromeSearchResult {
}
const std::string& id() const { return metadata_->id; }
Category category() const { return metadata_->category; }
bool best_match() const { return metadata_->best_match; }
DisplayType display_type() const { return metadata_->display_type; }
ash::AppListSearchResultType result_type() const {
return metadata_->result_type;
Expand Down Expand Up @@ -100,6 +101,7 @@ class ChromeSearchResult {
void SetRating(float rating);
void SetFormattedPrice(const std::u16string& formatted_price);
void SetCategory(Category category);
void SetBestMatch(bool best_match);
void SetDisplayType(DisplayType display_type);
void SetResultType(ResultType result_type);
void SetMetricsType(MetricsType metrics_type);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,17 +50,18 @@ void CategoryUsageRanker::InitializeCategoryScores() {
// |category_ranker_| has a small recency component to its scores, so the
// categories will appear in reverse order to the Record calls. This must
// record every category except unknown and best match.
category_ranker_->Record(CategoryToString(Category::kAssistant));
category_ranker_->Record(CategoryToString(Category::kSearchAndAssistant));
category_ranker_->Record(CategoryToString(Category::kPlayStore));
category_ranker_->Record(CategoryToString(Category::kWeb));
category_ranker_->Record(CategoryToString(Category::kSettings));
category_ranker_->Record(CategoryToString(Category::kFiles));
category_ranker_->Record(CategoryToString(Category::kWeb));
category_ranker_->Record(CategoryToString(Category::kAppShortcuts));
category_ranker_->Record(CategoryToString(Category::kApps));
category_ranker_->Record(CategoryToString(Category::kHelp));
category_ranker_->Record(CategoryToString(Category::kSettings));
category_ranker_->Record(CategoryToString(Category::kApp));

// Check we've recorded every category except unknown and best match.
// Check we've recorded every category except unknown.
DCHECK_EQ(category_ranker_->Rank().size(),
static_cast<size_t>(Category::kMaxValue) - 1);
static_cast<size_t>(Category::kMaxValue));
}

CategoryUsageRanker::~CategoryUsageRanker() {}
Expand Down
22 changes: 11 additions & 11 deletions chrome/browser/ui/app_list/search/ranking/util.cc
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,9 @@ Category ResultTypeToCategory(ResultType result_type) {
case ResultType::kInstalledApp:
case ResultType::kInstantApp:
case ResultType::kInternalApp:
return Category::kApps;
case ResultType::kArcAppShortcut:
return Category::kApp;
return Category::kAppShortcuts;
case ResultType::kOmnibox:
case ResultType::kAnswerCard:
return Category::kWeb;
Expand All @@ -39,16 +40,16 @@ Category ResultTypeToCategory(ResultType result_type) {
case ResultType::kFileSearch:
case ResultType::kDriveSearch:
return Category::kFiles;
case ResultType::kAssistantChip:
case ResultType::kAssistantText:
return Category::kAssistant;
case ResultType::kOsSettings:
return Category::kSettings;
case ResultType::kHelpApp:
return Category::kHelp;
case ResultType::kPlayStoreReinstallApp:
case ResultType::kPlayStoreApp:
return Category::kPlayStore;
case ResultType::kAssistantChip:
case ResultType::kAssistantText:
return Category::kSearchAndAssistant;
// Never used in the search backend.
case ResultType::kUnknown:
// Suggested content toggle fake result type. Used only in ash, not in the
Expand All @@ -57,31 +58,30 @@ Category ResultTypeToCategory(ResultType result_type) {
// Deprecated.
case ResultType::kLauncher:
NOTREACHED();
return Category::kApp;
return Category::kApps;
}
}

std::u16string CategoryDebugString(const Category category) {
switch (category) {
case Category::kUnknown:
return u"(unknown) ";
case Category::kBestMatch:
// The debug string for best match is handled elsewhere.
return u"";
case Category::kApp:
case Category::kApps:
return u"(apps) ";
case Category::kAppShortcuts:
return u"(apps) ";
case Category::kWeb:
return u"(web) ";
case Category::kFiles:
return u"(files) ";
case Category::kAssistant:
return u"(assistant) ";
case Category::kSettings:
return u"(settings) ";
case Category::kHelp:
return u"(help) ";
case Category::kPlayStore:
return u"(play store) ";
case Category::kSearchAndAssistant:
return u"(assistant) ";
}
}

Expand Down

0 comments on commit d4fb20b

Please sign in to comment.