diff --git a/module/VuFind/src/VuFind/Search/Solr/DeduplicationListener.php b/module/VuFind/src/VuFind/Search/Solr/DeduplicationListener.php index f2d551279b2cf655078260d96b44b0a6926aa1bd..94df0b2fd275f92825b3e231ef08ad415f632960 100644 --- a/module/VuFind/src/VuFind/Search/Solr/DeduplicationListener.php +++ b/module/VuFind/src/VuFind/Search/Solr/DeduplicationListener.php @@ -3,6 +3,8 @@ /** * Solr deduplication (merged records) listener. * + * See https://vufind.org/wiki/indexing:deduplication for details on how this is used. + * * PHP version 7 * * Copyright (C) Villanova University 2013. @@ -137,7 +139,9 @@ class DeduplicationListener if ($params && in_array($context, ['search', 'similar', 'getids'])) { // If deduplication is enabled, filter out merged child records, // otherwise filter out dedup records. - if ($this->enabled && 'getids' !== $context) { + if ($this->enabled && 'getids' !== $context + && !$this->hasChildFilter($params) + ) { $fq = '-merged_child_boolean:true'; if ($context == 'similar' && $id = $event->getParam('id')) { $fq .= ' AND -local_ids_str_mv:"' @@ -152,6 +156,19 @@ class DeduplicationListener return $event; } + /** + * Check search parameters for child records filter + * + * @param array|ArrayAccess $params Search parameters + * + * @return bool + */ + public function hasChildFilter($params) + { + $filters = $params->get('fq'); + return $filters != null && in_array('merged_child_boolean:true', $filters); + } + /** * Fetch appropriate dedup child *