Make pin results preserve non-changed organic data, a=chris
Make pin results preserve non-changed organic data, a=chris
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'];