(ns metabase-enterprise.search.scoring (:require [metabase.premium-features.core :as premium-features :refer [defenterprise]] [metabase.search.appdb.scoring :as appdb.scoring] [metabase.search.config :as search.config] [metabase.search.in-place.scoring :as scoring])) | |
(def ^:private enterprise-scorers {:official-collection {:expr (appdb.scoring/truthy :official_collection) :pred #(premium-features/has-feature? :official-collections)} :verified {:expr (appdb.scoring/truthy :verified) :pred #(premium-features/has-feature? :content-verification)}}) | |
Which additional scorers are active? | (defn- additional-scorers [] (into {} (keep (fn [[k {:keys [expr pred]}]] (when (pred) [k expr]))) enterprise-scorers)) |
Return the select-item expressions used to calculate the score for each search result. | (defenterprise scorers :feature :none [search-ctx] (merge (appdb.scoring/base-scorers search-ctx) (additional-scorers))) |
------------ LEGACY ---------- | |
A scorer for items in official collections | (defn- official-collection-score [{:keys [collection_authority_level]}] (if (contains? #{"official"} collection_authority_level) 1 0)) |
A scorer for verified items. | (defn- verified-score [{:keys [moderated_status]}] (if (contains? #{"verified"} moderated_status) 1 0)) |
(def ^:private legacy-scorers {:official-collection official-collection-score :verified verified-score}) | |
(defn- legacy-name [k] (if (= k :official-collection) "official collection score" (name k))) | |
(defn- legacy-score-result [k result] {:name (legacy-name k) :score (let [f (get legacy-scorers k)] (f result)) :weight (search.config/weight :default k)}) | |
Scoring implementation that adds score for items in official collections. | (defenterprise score-result :feature :none [result] (into (scoring/weights-and-scores result) (map #(legacy-score-result % result)) (keys (additional-scorers)))) |