LP#1549505: Surface popularity from the search query
authorMike Rylander <mrylander@gmail.com>
Wed, 3 Feb 2016 18:34:35 +0000 (13:34 -0500)
committerGalen Charlton <gmc@esilibrary.com>
Wed, 24 Feb 2016 22:38:53 +0000 (17:38 -0500)
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/metabib.pm
Open-ILS/src/sql/Pg/upgrade/YYYY.function.qp_search.sql

index 851f876..3ac53e1 100644 (file)
@@ -912,7 +912,8 @@ SELECT  $key AS id,
         $rel AS rel,
         $rank AS rank, 
         FIRST(pubdate_t.value) AS tie_break
-        STRING_AGG(ARRAY_TO_STRING(pop_with.badges,','),',') AS badges
+        STRING_AGG(ARRAY_TO_STRING(pop_with.badges,','),',') AS badges,
+        AVG(COALESCE(pop_with.total_score::NUMERIC,0.0))::NUMERIC(2,1) AS popularity
   FROM  metabib.metarecord_source_map m
         $$flat_plan{from}
         $mra_join
index 8d3d3bf..f30b4d9 100644 (file)
@@ -3068,6 +3068,7 @@ sub query_parser_fts {
     delete $$summary_row{rel};
     delete $$summary_row{record};
     delete $$summary_row{badges};
+    delete $$summary_row{popularity};
 
     if (defined($simple_plan)) {
         $$summary_row{complex_query} = $simple_plan ? 0 : 1;
index 87fe189..9dbbfe5 100644 (file)
@@ -17,7 +17,7 @@
 
 BEGIN;
 
-ALTER TYPE search.search_result ADD ATTRIBUTE badges TEXT;
+ALTER TYPE search.search_result ADD ATTRIBUTE badges TEXT, ADD ATTRIBUTE popularity NUMERIC;
 
 CREATE OR REPLACE FUNCTION search.query_parser_fts (
 
@@ -146,6 +146,7 @@ BEGIN
                 current_res.id = core_result.id;
                 current_res.rel = core_result.rel;
                 current_res.badges = core_result.badges;
+                current_res.popularity = core_result.popularity;
 
                 tmp_int := 1;
                 IF metarecord THEN
@@ -182,6 +183,7 @@ BEGIN
                 current_res.id = core_result.id;
                 current_res.rel = core_result.rel;
                 current_res.badges = core_result.badges;
+                current_res.popularity = core_result.popularity;
 
                 tmp_int := 1;
                 IF metarecord THEN
@@ -351,6 +353,7 @@ BEGIN
         current_res.id = core_result.id;
         current_res.rel = core_result.rel;
         current_res.badges = core_result.badges;
+        current_res.popularity = core_result.popularity;
 
         tmp_int := 1;
         IF metarecord THEN
@@ -375,6 +378,7 @@ BEGIN
     current_res.rel = NULL;
     current_res.record = NULL;
     current_res.badges = NULL;
+    current_res.popularity = NULL;
     current_res.total = total_count;
     current_res.checked = check_count;
     current_res.deleted = deleted_count;