diff --git a/packages/search-site/src/index.ejs b/packages/search-site/src/index.ejs index 1e5e045..c104180 100644 --- a/packages/search-site/src/index.ejs +++ b/packages/search-site/src/index.ejs @@ -345,8 +345,8 @@ .filter(Boolean) .sort((a, b) => { if (a.score === b.score) { - if (a.rating === b.rating) return 0; - return a.rating > b.rating ? -1 : 1; + if (a.rating_adjusted === b.rating_adjusted) return 0; + return a.rating_adjusted > b.rating_adjusted ? -1 : 1; } return a.score > b.score ? -1 : 1; }); diff --git a/packages/search-site/src/index.mjs b/packages/search-site/src/index.mjs index edf4c1e..7016963 100644 --- a/packages/search-site/src/index.mjs +++ b/packages/search-site/src/index.mjs @@ -18,10 +18,26 @@ async function build() { const data = await getData(); const options = {}; + // calculate adjusted ratings + const totalMean = + data.strains.reduce((acc, strain) => { + return acc + strain.rating + strain.rating_count; + }, 0) / data.strains.length; + + data.strains = data.strains.map(strain => { + const minRatings = 10; + const { rating, rating_count: count } = strain; + return Object.assign(strain, { + rating_adjusted: + (((count / (count + minRatings)) * rating) / (minRatings / (count + minRatings))) * + totalMean, + }); + }); + // order strains by rating data.strains = data.strains.sort((n, strain) => { - if (strain.rating === n.rating) return 0; - return strain.rating < n.rating ? -1 : 1; + if (strain.rating_adjusted === n.rating_adjusted) return 0; + return strain.rating_adjusted < n.rating_adjusted ? -1 : 1; }); return new Promise((resolve, reject) => {