Make pin results preserve non-changed organic data, a=chris

Chris Pollett [2022-07-31 16:Jul:st]
Make pin results preserve non-changed organic data, a=chris
Filename
src/models/PhraseModel.php
src/models/SearchverticalsModel.php
diff --git a/src/models/PhraseModel.php b/src/models/PhraseModel.php
index 3b52c6113..2c41270fa 100755
--- a/src/models/PhraseModel.php
+++ b/src/models/PhraseModel.php
@@ -348,17 +348,23 @@ class PhraseModel extends ParallelModel
                     (count($disjunct_phrases) == 1) && !empty($filter) &&
                     $low == 0;
                 $query_map_results = [];
+                $query_map_urls = [];
                 if ($can_use_query_map) {
                     $query_map = $filter->getQueryMap($disjunct_phrases[0],
                         L\guessLocaleFromString($disjunct_phrases[0]));
+                    $map_cnt = 0;
                     foreach ($query_map as $map_url) {
-                        $map_result[self::URL] = $map_url;
+                        $map_parts = explode("#", $map_url);
+                        $map_result[self::URL] = $map_parts[0];
                         $map_result[self::PINNED] = true;
                         $map_result[self::SCORE] = 0;
-                        $map_result[self::DOC_RANK] = 0;
+                        $map_result[self::DOC_RANK] = floatval(
+                            $map_parts[1] ?? 0);
                         $map_result[self::RELEVANCE] = 0;
                         $map_result[self::PROXIMITY] = 0;
                         $query_map_results[] = $map_result;
+                        $query_map_urls[$map_parts[0]]  = $map_cnt;
+                        $map_cnt++;
                     }
                 }
                 if ($guess_semantics) {
@@ -491,6 +497,28 @@ class PhraseModel extends ParallelModel
         if (!empty($query_map_results)) {
             $results['PAGES'] = $results['PAGES'] ?? [];
             $original_num_pages = count($results['PAGES']);
+            $num_pages = count($results['PAGES']);
+            for ($p_index = 0; $p_index < $num_pages; $p_index++) {
+                $page = $results['PAGES'][$p_index];
+                if (!empty($page[self::URL]) &&
+                    isset($query_map_urls[$page[self::URL]])) {
+                    $qm_index = $query_map_urls[$page[self::URL]];
+                    $qm_result = $query_map_results[$qm_index];
+                    foreach ($page as $field => $value) {
+                        if (in_array($field, [self::DOC_RANK, self::RELEVANCE,
+                            self::PROXIMITY])) {
+                            $qm_result[$field] += $page[$field];
+                        } else {
+                            $qm_result[$field] = $page[$field];
+                        }
+                    }
+                    $qm_result[self::SCORE] = $qm_result[self::DOC_RANK] +
+                        $qm_result[self::RELEVANCE] +
+                        $qm_result[self::PROXIMITY];
+                    $query_map_results[$qm_index] = $qm_result;
+                    unset($results['PAGES'][$p_index]);
+                }
+            }
             $results['PAGES'] = array_merge(
                 $query_map_results, $results['PAGES']);
             $query_map_count = count($results['PAGES']) - $original_num_pages;
diff --git a/src/models/SearchverticalsModel.php b/src/models/SearchverticalsModel.php
index 6dbb30dcb..99bb5c617 100644
--- a/src/models/SearchverticalsModel.php
+++ b/src/models/SearchverticalsModel.php
@@ -396,7 +396,7 @@ class SearchverticalsModel extends GroupModel
             } else {
                 $url = $page[self::URL];
             }
-            if ($summary = $this->getEditedPageResult($url) &&
+            if (($summary = $this->getEditedPageResult($url)) &&
                 !empty($summary["URL_ACTION"]) && $summary["URL_ACTION"] > 0) {
                 $page[self::URL] = $url;
                 foreach ([self::TITLE => "TITLE",
@@ -409,9 +409,6 @@ class SearchverticalsModel extends GroupModel
                 $page = $this->formatSinglePageResult($page, $words,
                     self::DEFAULT_DESCRIPTION_LENGTH);
                 $pages[$i] = $page;
-            } else if (!empty($page[self::PINNED])) {
-                unset($pages[$i]);
-                $deleted_a_page = true;
             }
         }
         $output['TOTAL_ROWS'] = $results['TOTAL_ROWS'];
ViewGit