From 70edf7500f2765a584f4339e622a2432bf2f4404 Mon Sep 17 00:00:00 2001 From: Frank Morgner <morgnerf@ub.uni-leipzig.de> Date: Wed, 1 Aug 2018 13:13:10 +0200 Subject: [PATCH] refs #11748 * restrict and bind search of additional records to source_id besides as before to record_id alone --- .../RecordDriver/SolrDefaultFincTrait.php | 22 +++++++----- .../finc/RecordDriver/SolrMarcFincTrait.php | 34 ++++++++++++++++++- 2 files changed, 46 insertions(+), 10 deletions(-) diff --git a/module/finc/src/finc/RecordDriver/SolrDefaultFincTrait.php b/module/finc/src/finc/RecordDriver/SolrDefaultFincTrait.php index 96d6e4a21cb..3f7b0291625 100644 --- a/module/finc/src/finc/RecordDriver/SolrDefaultFincTrait.php +++ b/module/finc/src/finc/RecordDriver/SolrDefaultFincTrait.php @@ -781,8 +781,11 @@ trait SolrDefaultFincTrait // use only one solr request for all if (isset($array) && is_array($array)) { foreach ($array as $line) { - if (isset($line['record_id'])) { - $rids[] = $line['record_id']; + if (isset($line['record_id']) && isset($line['source_id'])) { + $rids[] = [ + 'rid' => $line['record_id'], + 'sid' => $line['source_id'] + ]; } } } @@ -790,18 +793,19 @@ trait SolrDefaultFincTrait // build the query: if (count($rids) == 1) { // single query: - $value = '"'. $rids[0] .'"'; + $value = 'record_id:' . $rids[0]['rid'] + . ' AND source_id:' . $rids[0]['sid']; } elseif (count($rids) > 1) { // multi query: - $value = '(' . implode(' OR ', $rids) . ')'; + foreach ($rids as $rid) { + $parts[] = '(record_id:' . $rid['rid'] + . ' AND source_id:' . $rid['sid'] . ')'; + } + $value = '(' . implode(' OR ', $parts) . ')'; } else { return $array; } - $query = new \VuFindSearch\Query\Query( - 'record_id:'. $value - ); - //echo '</pre>'; print_r($query); echo '</pre>'; - + $query = new \VuFindSearch\Query\Query($value); $bag = new ParamBag(); $bag->set('fl', 'id,record_id'); $records = $this->searchService diff --git a/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php b/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php index 9c77ffd74bf..a9cd5074ba2 100644 --- a/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php +++ b/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php @@ -357,6 +357,9 @@ trait SolrMarcFincTrait //$id = $this->checkIfRecordExists($matches[2]); //if ($id != null) { $array[$key]['record_id'] = $matches[2].$matches[3]; + if (null != ($sid = $this->getSourceID())) { + $array[$key]['source_id'] = $sid; + } //} //break; } @@ -1107,7 +1110,10 @@ trait SolrMarcFincTrait $text = $current->getData(); // Extract parenthetical prefixes: if (preg_match(self::BSZ_PATTERN, $text, $matches)) { - $array[$key]['record_id'] = $matches[2].$matches[3]; + $array[$key]['record_id'] = $matches[2] . $matches[3]; + if (null != ($sid = $this->getSourceID())) { + $array[$key]['source_id'] = $sid; + } } } // end foreach } // end foreach @@ -1267,6 +1273,9 @@ trait SolrMarcFincTrait // Extract parenthetical prefixes: if (preg_match(self::BSZ_PATTERN, $text, $matches)) { $array[$key]['record_id'] = $matches[2].$matches[3]; + if (null != ($sid = $this->getSourceID())) { + $array[$key]['source_id'] = $sid; + } } } // end foreach } // end if @@ -1310,6 +1319,9 @@ trait SolrMarcFincTrait // Extract parenthetical prefixes: if (preg_match(self::BSZ_PATTERN, $text, $matches)) { $array[$key]['record_id'] = $matches[2].$matches[3]; + if (null != ($sid = $this->getSourceID())) { + $array[$key]['source_id'] = $sid; + } } } // end foreach } // end foreach @@ -1390,6 +1402,23 @@ trait SolrMarcFincTrait return $this->getFieldArray('830', ['a', 'v'], false); } + /** + * Get source id of marc record. Alternate method getFirstFieldValue returns + * null by value "0" therefor it doesn't fit properly. + * + * @return string|null + * @access public + */ + public function getSourceID() + { + $source_ids = $this->getMarcRecord()->getFields('980'); + if (!$source_ids) { + return null; + } + return (string)$source_ids[0]->getSubfield('b')->getData(); + } + + /** * Get local classification of UDK. * @@ -1524,6 +1553,9 @@ trait SolrMarcFincTrait if (preg_match(self::BSZ_PATTERN, $text, $matches)) { $array[$i]['record_id'] = $matches[2] . $matches[3]; + if (null != ($sid = $this->getSourceID())) { + $array[$key]['source_id'] = $sid; + } } } } -- GitLab