private function createAdvancedSearchQuery($input) { $this->logger->debug("Constructing query for advanced search."); $query = new Opus_SolrSearch_Query(Opus_SolrSearch_Query::ADVANCED); $query->setStart($input['start']); $query->setRows($input['rows']); $query->setSortField($input['sortField']); $query->setSortOrder($input['sortOrder']); foreach (array('author', 'title', 'persons', 'referee', 'abstract', 'fulltext', 'year') as $fieldname) { if (!empty($input[$fieldname])) { $query->setField($fieldname, $input[$fieldname], $input[$fieldname . 'modifier']); } } $this->addFiltersToQuery($query, $input); //im Falle einer Autorensuche werden Kommas und Semikolons aus dem Suchstring entfernt if (!is_null($query->getField('author'))) { $author = $query->getField('author'); $authormodifier = $query->getModifier('author'); $query->setField('author', str_replace(array(',', ';'), '', $author), $authormodifier); } if ($this->export) { $query->setReturnIdsOnly(true); } $this->logger->debug("Query {$query} complete"); return $query; }
* @version $Id: find_missing_published_docs_in_searchindex.php 12011 2013-07-05 19:39:58Z sszott $ */ /** * * Dieses Skript gibt alle IDs der Dokumente zurück, die im Server State * published sind, aber aufgrund eines Fehlers nicht im Index repräsentiert sind. * * Siehe dazu auch die Story OPUSVIER-2368. * */ $numOfErrors = 0; $finder = new Opus_DocumentFinder(); $finder->setServerState('published'); foreach ($finder->ids() as $docId) { // check if document with id $docId is already persisted in search index $query = new Opus_SolrSearch_Query(Opus_SolrSearch_Query::DOC_ID); $query->setField('id', $docId); $query->setReturnIdsOnly(true); $query->setRows(Opus_SolrSearch_Query::MAX_ROWS); $searcher = new Opus_SolrSearch_Searcher(); if ($searcher->search($query)->getNumberOfHits() != 1) { echo "document # {$docId} is not stored in search index\n"; $numOfErrors++; } } if ($numOfErrors > 0) { echo "{$numOfErrors} missing documents were found\n"; } else { echo "no errors were found\n"; } exit;
/** * Check for each database document in serverState publish if it exists in * Solr index. Furthermore, compare field value of serverDateModified in * database and Solr index. * */ private function checkDatabase() { $finder = new Opus_DocumentFinder(); $finder->setServerState('published'); $ids = $finder->ids(); $this->logger->info('checking ' . $finder->count() . ' published documents for consistency.'); foreach ($ids as $id) { try { $doc = new Opus_Document($id); } catch (Opus_Model_NotFoundException $e) { // ignore: document was deleted from database in meantime continue; } $serverDataModified = $doc->getServerDateModified()->getUnixTimestamp(); // retrieve document from index and compare serverDateModified fields $query = new Opus_SolrSearch_Query(Opus_SolrSearch_Query::DOC_ID); $query->setField('id', $id); $resultList = $this->searcher->search($query, $this->validateDocIds); $results = $resultList->getResults(); if ($resultList->getNumberOfHits() == 0) { $this->logger->info("inconsistency found for document {$id}: document is in database, but is not in Solr index."); $this->numOfInconsistencies++; if ($this->forceReindexing($doc)) { $this->numOfUpdates++; } } else { if ($resultList->getNumberOfHits() == 1) { if ($results[0]->getServerDateModified() != $serverDataModified) { $this->numOfInconsistencies++; $this->logger->info("inconsistency found for document {$id}: mismatch between values of server_date_modified in database and Solr index."); if ($this->forceReindexing($doc)) { $this->numOfUpdates++; } } } else { $this->logger->err('unexpected state: document with id ' . $id . ' exists multiple times in index.'); } } } }