/** * Returns all index documents that are associated to the given collection id. * * @param int $collectionId * @return array An array of Opus_SolrSearch_Result objects. * @throws Opus_SolrSearch_Exception */ private function getListItems($collectionId) { $query = new Opus_SolrSearch_Query(Opus_SolrSearch_Query::SIMPLE); $query->setCatchAll('*:*'); $query->addFilterQuery('collection_ids', $collectionId); $query->setRows(Opus_SolrSearch_Query::MAX_ROWS); $solrsearch = new Opus_SolrSearch_Searcher(); return $solrsearch->search($query)->getResults(); }
public function doctypesAction() { $facetname = 'doctype'; $query = new Opus_SolrSearch_Query(Opus_SolrSearch_Query::FACET_ONLY); $query->setFacetField($facetname); $facets = array(); try { $searcher = new Opus_SolrSearch_Searcher(); $facets = $searcher->search($query)->getFacets(); } catch (Opus_SolrSearch_Exception $e) { $this->getLogger()->err(__METHOD__ . ' : ' . $e); throw new Application_SearchException($e); } $docTypesTranslated = array(); foreach ($facets[$facetname] as $facetitem) { $translation = $this->view->translate($facetitem->getText()); $docTypesTranslated[$translation] = $facetitem; } uksort($docTypesTranslated, "strnatcasecmp"); $this->view->facetitems = $docTypesTranslated; $this->view->title = $this->view->translate('solrsearch_browse_doctypes'); }
* @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;
private function createAllSearchQuery($input) { $this->logger->debug("Constructing query for all search."); $query = new Opus_SolrSearch_Query(Opus_SolrSearch_Query::ALL_DOCS); $query->setStart($input['start']); $query->setRows($input['rows']); $query->setSortField($input['sortField']); $query->setSortOrder($input['sortOrder']); $this->addFiltersToQuery($query, $input); if ($this->export) { $query->setReturnIdsOnly(true); } $this->logger->debug("Query {$query} complete"); return $query; }
private function getDocsInSearchIndex($checkConsistency = true) { $searcher = new Opus_SolrSearch_Searcher(); $query = new Opus_SolrSearch_Query(); $query->setCatchAll("*:*"); $query->setRows(Opus_SolrSearch_Query::MAX_ROWS); $resultList = $searcher->search($query, $checkConsistency); return $resultList; }
public function createBasicSearchParams($request) { return array('start' => $request->getParam('start', '0'), 'rows' => $request->getParam('rows', Opus_SolrSearch_Query::getDefaultRows()), 'sortfield' => $request->getParam('sortfield', 'score'), 'sortorder' => $request->getParam('sortorder', 'desc')); }
/** * * @param Opus_SolrSearch_Query $query * @return string */ private function getParams($query) { if ($query->getSearchType() === Opus_SolrSearch_Query::LATEST_DOCS) { return array('fl' => $query->isReturnIdsOnly() ? 'id' : '* score', 'facet' => 'false', 'sort' => $query->getSortField() . ' ' . $query->getSortOrder()); } if ($query->getSearchType() === Opus_SolrSearch_Query::FACET_ONLY) { return array('fl' => '', 'facet' => 'true', 'facet.field' => $query->getFacetField(), 'facet.mincount' => 1, 'facet.limit' => -1); } if ($query->getSearchType() === Opus_SolrSearch_Query::DOC_ID) { return array('fl' => $query->isReturnIdsOnly() ? 'id' : '* score', 'facet' => 'false'); } $params = array('fl' => $query->isReturnIdsOnly() ? 'id' : '* score', 'facet' => $query->isReturnIdsOnly() ? 'false' : 'true', 'facet.field' => $this->setFacetFieldsFromConfig(), 'facet.mincount' => 1, 'sort' => $query->getSortField() . ' ' . $query->getSortOrder(), 'facet.limit' => isset($this->config->searchengine->solr->globalfacetlimit) ? $this->config->searchengine->solr->globalfacetlimit : 10); $fq = $query->getFilterQueries(); if (!empty($fq)) { $params['fq'] = $fq; } if (isset($this->facetArray)) { $params = array_merge($params, $this->getFacetArray(), $this->getFacetSortsFromConfig()); } else { $params = array_merge($params, $this->getFacetLimitsFromConfig(), $this->getFacetSortsFromConfig()); } return $params; }
/** * * Dieses Skript findet alle Dokumente mit ServerState=published, deren ServerDateModified im Solr-Index kleiner ist * als das Datum in der Datenbank. Ist ein Dokument nicht im Index vorhanden, wird eine entsprechende * Fehlermeldung pro Dokument ausgegeben. * * Siehe dazu auch das Ticket OPUSVIER-2853. * */ $numOfModified = 0; $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(); $search = $searcher->search($query); if ($search->getNumberOfHits() != 1) { echo "ERROR: document # {$docId} is not stored in search index\n"; $numOfErrors++; } else { $result = $search->getResults(); $solrModificationDate = $result[0]->getServerDateModified(); $document = new Opus_Document($docId); $docModificationDate = $document->getServerDateModified()->getUnixTimestamp(); if ($solrModificationDate != $docModificationDate) { $numOfModified++;
/** * Find documents in Solr index, that are not in database or that are in * datbase but not in serverState published Remove such documents from Solr * index. * */ private function checkSearchIndex() { $query = new Opus_SolrSearch_Query(); $query->setCatchAll("*:*"); $query->setRows(Opus_SolrSearch_Query::MAX_ROWS); $resultList = $this->searcher->search($query, $this->validateDocIds); $results = $resultList->getResults(); foreach ($results as $result) { $id = $result->getId(); try { $doc = new Opus_Document($id); } catch (Opus_Model_NotFoundException $e) { $this->logger->info("inconsistency found for document {$id}: document is in Solr index, but is not in database."); $this->numOfInconsistencies++; if ($this->removeDocumentFromSearchIndex($id)) { $this->numOfDeletions++; } continue; } if ($doc->getServerState() != 'published') { $this->logger->info("inconsistency found for document {$id}: document is in Solr index, but is not in ServerState published."); $this->numOfInconsistencies++; if ($this->removeDocumentFromSearchIndex($id)) { $this->numOfDeletions++; } } } }