From 97543d72e87b44e782e0c5649c305e29be04be11 Mon Sep 17 00:00:00 2001 From: farse Date: Tue, 10 Dec 2024 12:59:49 +0000 Subject: [PATCH 1/2] allow multiple boosts per field --- .../backend/SearchApiSolrBackend.php | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/Plugin/search_api/backend/SearchApiSolrBackend.php b/src/Plugin/search_api/backend/SearchApiSolrBackend.php index 2c4f3283..0ff4df69 100644 --- a/src/Plugin/search_api/backend/SearchApiSolrBackend.php +++ b/src/Plugin/search_api/backend/SearchApiSolrBackend.php @@ -1898,9 +1898,21 @@ public function search(QueryInterface $query) { if (isset($sorts[$relevance_field])) { if ($boosts = $query->getOption('solr_document_boost_factors', [])) { $sum[] = 'boost_document'; - foreach ($boosts as $field_id => $boost) { - $boostable_solr_field_name = Utility::getBoostableSolrField($field_id, $field_names, $query); - $sum[] = str_replace(self::FIELD_PLACEHOLDER, $boostable_solr_field_name, $boost); + foreach ($boosts as $field_id => $inner_boosts) { + // Check to see if $inner_boosts is an array to account + // allow mulitple boosts per field. + if (is_array($inner_boosts)) { + foreach ($inner_boosts as $boost) { + $boostable_solr_field_name = Utility::getBoostableSolrField($field_id, $field_names, $query); + $sum[] = str_replace(self::FIELD_PLACEHOLDER, $boostable_solr_field_name, $boost); + } + } + else { + // Set back the variable $boost in case we use it later. + $boost = $inner_boosts; + $boostable_solr_field_name = Utility::getBoostableSolrField($field_id, $field_names, $query); + $sum[] = str_replace(self::FIELD_PLACEHOLDER, $boostable_solr_field_name, $boost); + } } $flatten_query[] = '{!boost b=sum(' . implode(',', $sum) . ')}'; } From 7905f5922a7a4ebbca31fe29d09e942bf24192af Mon Sep 17 00:00:00 2001 From: farse Date: Tue, 10 Dec 2024 13:02:29 +0000 Subject: [PATCH 2/2] comment --- src/Plugin/search_api/backend/SearchApiSolrBackend.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Plugin/search_api/backend/SearchApiSolrBackend.php b/src/Plugin/search_api/backend/SearchApiSolrBackend.php index 0ff4df69..8f96ca1b 100644 --- a/src/Plugin/search_api/backend/SearchApiSolrBackend.php +++ b/src/Plugin/search_api/backend/SearchApiSolrBackend.php @@ -1899,7 +1899,7 @@ public function search(QueryInterface $query) { if ($boosts = $query->getOption('solr_document_boost_factors', [])) { $sum[] = 'boost_document'; foreach ($boosts as $field_id => $inner_boosts) { - // Check to see if $inner_boosts is an array to account + // Check to see if $inner_boosts is an array to // allow mulitple boosts per field. if (is_array($inner_boosts)) { foreach ($inner_boosts as $boost) {