Example #1
0
 /**
  * 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;
Example #4
0
 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;
 }
Example #6
0
 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'));
 }
Example #7
0
 /**
  *
  * @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++;
Example #9
0
 /**
  * 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++;
             }
         }
     }
 }