From d374f39d19981b95cc39a2f2502ee82d107e44f2 Mon Sep 17 00:00:00 2001 From: Michael Kubina Date: Tue, 28 Jan 2025 14:28:33 +0100 Subject: [PATCH 1/3] fix fulltext pages to include facets from all associated metadata sections --- Classes/Common/Indexer.php | 57 ++++++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/Classes/Common/Indexer.php b/Classes/Common/Indexer.php index 98d9bc92f..6b91d65b7 100644 --- a/Classes/Common/Indexer.php +++ b/Classes/Common/Indexer.php @@ -453,7 +453,7 @@ protected static function processPhysical(Document $document, int $page, array $ $solrDoc->setField('fulltext', $fullText); if (is_array($doc->metadataArray[$doc->toplevelId])) { - self::addFaceting($doc, $solrDoc); + self::addFaceting($doc, $solrDoc, $physicalUnit); } // Add collection information to physical sub-elements if applicable. if ( @@ -549,27 +549,56 @@ private static function processMetadata($document, $metadata, &$solrDoc): array * * @param AbstractDocument $doc * @param DocumentInterface &$solrDoc + * @param array $physicalUnit Array of the physical unit to process * * @return void */ - private static function addFaceting($doc, &$solrDoc): void + private static function addFaceting($doc, &$solrDoc, $physicalUnit): void { - // TODO: Include also subentries if available. - foreach ($doc->metadataArray[$doc->toplevelId] as $indexName => $data) { + // this variable holds all possible facet-values for the index names + $facets = []; + // use the structlink information + foreach ($doc->smLinks['l2p'] as $logicalId => $physicalId) { + // find page in structlink + if (in_array($physicalUnit['id'], $physicalId)) { + // for each associated metadata of structlink + foreach ($doc->metadataArray[$logicalId] as $indexName => $data) { + if ( + !empty($data) + && substr($indexName, -8) !== '_sorting' + ) { + if (in_array($indexName, self::$fields['facets'])) { + // Remove appended "valueURI" from authors' names for indexing. + if ($indexName == 'author') { + $data = self::removeAppendsFromAuthor($data); + } + // Add facets to facet-array and flatten the values + if (is_array($data)) { + foreach ($data as $value) { + if (!empty($value)) { + $facets[$indexName][] = $value; + } + } + } else { + $facets[$indexName][] = $data; + } + } + } + } + } + } + + // write all facet values of associated metadata to the page (self & ancestors) + foreach ($facets as $indexName => $data) { if ( !empty($data) - && substr($indexName, -8) !== '_sorting' ) { - - if (in_array($indexName, self::$fields['facets'])) { - // Remove appended "valueURI" from authors' names for indexing. - if ($indexName == 'author') { - $data = self::removeAppendsFromAuthor($data); - } - // Add facets to index. - $solrDoc->setField($indexName . '_faceting', $data); - } + $solrDoc->setField($indexName . '_faceting', $data); } + } + + // add sorting information + foreach ($doc->metadataArray[$doc->toplevelId] as $indexName => $data) { // Add sorting information to physical sub-elements if applicable. if ( !empty($data) From 9d564db22112cae058dfb3b4bf38ee4c1e0dce54 Mon Sep 17 00:00:00 2001 From: Michael Kubina Date: Tue, 28 Jan 2025 15:18:56 +0100 Subject: [PATCH 2/3] remove redundant emptiness check --- Classes/Common/Indexer.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Classes/Common/Indexer.php b/Classes/Common/Indexer.php index 6b91d65b7..f18fdb14d 100644 --- a/Classes/Common/Indexer.php +++ b/Classes/Common/Indexer.php @@ -590,11 +590,7 @@ private static function addFaceting($doc, &$solrDoc, $physicalUnit): void // write all facet values of associated metadata to the page (self & ancestors) foreach ($facets as $indexName => $data) { - if ( - !empty($data) - ) { - $solrDoc->setField($indexName . '_faceting', $data); - } + $solrDoc->setField($indexName . '_faceting', $data); } // add sorting information From 2ebab1f496da20bb23d74b5e4995b63345303ea2 Mon Sep 17 00:00:00 2001 From: Michael Kubina Date: Tue, 28 Jan 2025 15:27:14 +0100 Subject: [PATCH 3/3] remove redundant collection_faceting --- Classes/Common/Indexer.php | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/Classes/Common/Indexer.php b/Classes/Common/Indexer.php index f18fdb14d..c8019e8d6 100644 --- a/Classes/Common/Indexer.php +++ b/Classes/Common/Indexer.php @@ -455,13 +455,7 @@ protected static function processPhysical(Document $document, int $page, array $ if (is_array($doc->metadataArray[$doc->toplevelId])) { self::addFaceting($doc, $solrDoc, $physicalUnit); } - // Add collection information to physical sub-elements if applicable. - if ( - in_array('collection', self::$fields['facets']) - && !empty($doc->metadataArray[$doc->toplevelId]['collection']) - ) { - $solrDoc->setField('collection_faceting', $doc->metadataArray[$doc->toplevelId]['collection']); - } + try { $updateQuery->addDocument($solrDoc); self::$solr->service->update($updateQuery);