diff options
Diffstat (limited to 'MLEB/Translate/ttmserver/SolrTTMServer.php')
-rw-r--r-- | MLEB/Translate/ttmserver/SolrTTMServer.php | 80 |
1 files changed, 47 insertions, 33 deletions
diff --git a/MLEB/Translate/ttmserver/SolrTTMServer.php b/MLEB/Translate/ttmserver/SolrTTMServer.php index b81aaf2e..bb6c244c 100644 --- a/MLEB/Translate/ttmserver/SolrTTMServer.php +++ b/MLEB/Translate/ttmserver/SolrTTMServer.php @@ -5,7 +5,7 @@ * @file * @author Niklas Laxström * @copyright Copyright © 2012-2013, Niklas Laxström - * @license GPL-2.0+ + * @license GPL-2.0-or-later * @ingroup TTMServer */ @@ -13,6 +13,7 @@ * TTMServer backed based on Solr instance. Depends on Solarium. * @since 2012-06-27 * @ingroup TTMServer + * @deprecated 1.27. Will be removed in 1.29. */ class SolrTTMServer extends TTMServer @@ -32,7 +33,10 @@ class SolrTTMServer protected $logger; public function __construct( $config ) { + wfDeprecated( __METHOD__, '1.24' ); + parent::__construct( $config ); + if ( isset( $config['config'] ) ) { $this->client = new Solarium_Client( $config['config'] ); } else { @@ -41,7 +45,7 @@ class SolrTTMServer } public function isLocalSuggestion( array $suggestion ) { - return $suggestion['wiki'] === wfWikiId(); + return $suggestion['wiki'] === wfWikiID(); } public function expandLocation( array $suggestion ) { @@ -65,11 +69,11 @@ class SolrTTMServer // For now impose a length limit on query string to avoid doing // very slow queries. Magic number. if ( strlen( $text ) > 789 ) { - return array(); + return []; } $query = $this->client->createSelect(); - $query->setFields( array( 'globalid', 'content', 'score' ) ); + $query->setFields( [ 'globalid', 'content', 'score' ] ); /* The interface usually displays three best candidates. These might * come from more than three matches, if the translation is the same. @@ -88,12 +92,12 @@ class SolrTTMServer /* Note how we need to escape twice here, first the string for strdist * and then the strdist call itself for the query. And of course every- * thing will be URL encoded once sent over the line. */ - $query->setQuery( '_val_:%P1%', array( $dist ) ); + $query->setQuery( '_val_:%P1%', [ $dist ] ); /* Filter queries are supposed to be efficient as they are separately * cached, but I haven't done any benchmarks. */ $query->createFilterQuery( 'lang' ) - ->setQuery( 'language:%P1%', array( $sourceLanguage ) ); + ->setQuery( 'language:%P1%', [ $sourceLanguage ] ); $resultset = $this->client->select( $query ); @@ -105,7 +109,7 @@ class SolrTTMServer * This code is a bit uglier than I'd like it to be, since there * there is no field that globally identifies a message (message * definition and translations). */ - $contents = $scores = array(); + $contents = $scores = []; $queryString = ''; foreach ( $resultset as $doc ) { $sourceId = preg_replace( '~/[^/]+$~', '', $doc->globalid ); @@ -118,7 +122,7 @@ class SolrTTMServer // Second query to fetch available translations $fetchQuery = $this->client->createSelect(); - $fetchQuery->setFields( array( 'wiki', 'uri', 'content', 'messageid', 'globalid' ) ); + $fetchQuery->setFields( [ 'wiki', 'uri', 'content', 'messageid', 'globalid' ] ); // This come in random order, so have to fetch all and sort $fetchQuery->setRows( 25 ); $fetchQuery->setQuery( $queryString ); @@ -127,7 +131,7 @@ class SolrTTMServer $translations = $this->client->select( $fetchQuery ); - $suggestions = array(); + $suggestions = []; foreach ( $translations as $doc ) { /* Construct the matching source id */ $sourceId = preg_replace( '~/[^/]+$~', '', $doc->globalid ); @@ -140,7 +144,7 @@ class SolrTTMServer continue; } - $suggestions[] = array( + $suggestions[] = [ 'source' => $contents[$sourceId], 'target' => $doc->content, 'context' => $doc->messageid, @@ -148,7 +152,7 @@ class SolrTTMServer 'wiki' => $doc->wiki, 'location' => $doc->messageid . '/' . $targetLanguage, 'uri' => $doc->uri, - ); + ]; } /* Like mentioned above, we get results in random order. Sort them @@ -195,11 +199,11 @@ class SolrTTMServer if ( $doDelete ) { $base = Title::makeTitle( $title->getNamespace(), $handle->getKey() ); - $conds = array( - 'wiki' => wfWikiId(), + $conds = [ + 'wiki' => wfWikiID(), 'language' => $handle->getCode(), 'messageid' => $base->getPrefixedText(), - ); + ]; foreach ( $conds as $key => &$value ) { $value = "$key:" . $update->getHelper()->escapePhrase( $value ); } @@ -214,7 +218,7 @@ class SolrTTMServer $targetTitle->getNamespace(), $handle->getKey() . '/' . $sourceLanguage ); - $revId = intval( $sourceTitle->getLatestRevID() ); + $revId = (int)$sourceTitle->getLatestRevID(); /* Note: in some cases the source page might not exist, in this case * we use 0 as message version identifier, to differentiate them from * orphan messages */ @@ -230,7 +234,7 @@ class SolrTTMServer try { $this->client->update( $update ); } catch ( Solarium_Exception $e ) { - error_log( "SolrTTMServer update-write failed" ); + error_log( 'SolrTTMServer update-write failed' ); return false; } @@ -240,19 +244,23 @@ class SolrTTMServer /** * @see schema.xml + * @param MessageHandle $handle + * @param string $text + * @param int $revId + * @return Solarium_Document_ReadWrite */ protected function createDocument( MessageHandle $handle, $text, $revId ) { $language = $handle->getCode(); $translationTitle = $handle->getTitle(); $title = Title::makeTitle( $handle->getTitle()->getNamespace(), $handle->getKey() ); - $wiki = wfWikiId(); + $wiki = wfWikiID(); $messageid = $title->getPrefixedText(); $globalid = "$wiki-$messageid-$revId/$language"; $doc = new Solarium_Document_ReadWrite(); $doc->wiki = $wiki; - $doc->uri = $translationTitle->getCanonicalUrl(); + $doc->uri = $translationTitle->getCanonicalURL(); $doc->messageid = $messageid; $doc->globalid = $globalid; @@ -265,7 +273,7 @@ class SolrTTMServer public function beginBootstrap() { $update = $this->client->createUpdate(); - $query = 'wiki:' . $update->getHelper()->escapePhrase( wfWikiId() ); + $query = 'wiki:' . $update->getHelper()->escapePhrase( wfWikiID() ); $update->addDeleteQuery( $query ); $update->addCommit(); $this->client->update( $update ); @@ -290,7 +298,7 @@ class SolrTTMServer foreach ( $batch as $key => $data ) { list( $handle, $sourceLanguage, $text ) = $data; $revId = $handle->getTitleForLanguage( $sourceLanguage )->getLatestRevID(); - $doc = $this->createDocument( $handle, $text, $id ); + $doc = $this->createDocument( $handle, $text, $revId ); // Add document and commit within X seconds. $update->addDocument( $doc, null, self::COMMIT_WITHIN ); } @@ -341,7 +349,13 @@ class SolrTTMServer } } - // Search interface + /** + * Search interface + * @param string $queryString + * @param array $opts + * @param array $highlight + * @return array + */ public function search( $queryString, $opts, $highlight ) { $client = $this->getSolarium(); @@ -349,8 +363,8 @@ class SolrTTMServer $dismax = $query->getDisMax(); $dismax->setQueryParser( 'edismax' ); $query->setQuery( $queryString ); - $query->setRows( $opts->getValue( 'limit' ) ); - $query->setStart( $opts->getValue( 'offset' ) ); + $query->setRows( $opts['limit'] ); + $query->setStart( $opts['offset'] ); list( $pre, $post ) = $highlight; $hl = $query->getHighlighting(); @@ -361,17 +375,17 @@ class SolrTTMServer $hl->setFragSize( '5000' ); $hl->setSnippets( 1 ); - $languageFilter = $opts->getValue( 'language' ); + $languageFilter = $opts['language']; if ( $languageFilter !== '' ) { $query->createFilterQuery( 'languageFilter' ) - ->setQuery( 'language:%P1%', array( $languageFilter ) ) + ->setQuery( 'language:%P1%', [ $languageFilter ] ) ->addTag( 'filter' ); } - $groupFilter = $opts->getValue( 'group' ); + $groupFilter = $opts['group']; if ( $groupFilter !== '' ) { $query->createFilterQuery( 'groupFilter' ) - ->setQuery( 'group:%P1%', array( $groupFilter ) ) + ->setQuery( 'group:%P1%', [ $groupFilter ] ) ->addTag( 'filter' ); } @@ -379,12 +393,12 @@ class SolrTTMServer $language = $facetSet->createFacetField( 'language' ); $language->setField( 'language' ); - $language->setMincount( 1 ); + $language->setMinCount( 1 ); $language->addExclude( 'filter' ); $group = $facetSet->createFacetField( 'group' ); $group->setField( 'group' ); - $group->setMincount( 1 ); + $group->setMinCount( 1 ); $group->setMissing( true ); $group->addExclude( 'filter' ); @@ -396,10 +410,10 @@ class SolrTTMServer } public function getFacets( $resultset ) { - return array( + return [ 'language' => iterator_to_array( $resultset->getFacetSet()->getFacet( 'language' ) ), 'group' => iterator_to_array( $resultset->getFacetSet()->getFacet( 'group' ) ), - ); + ]; } public function getTotalHits( $resultset ) { @@ -408,7 +422,7 @@ class SolrTTMServer public function getDocuments( $resultset ) { $highlighting = $resultset->getHighlighting(); - $ret = array(); + $ret = []; foreach ( $resultset as $document ) { $fields = iterator_to_array( $document ); // Compatibility mapping @@ -416,7 +430,7 @@ class SolrTTMServer $hdoc = $highlighting->getResult( $document->globalid ); $text = $hdoc->getField( 'text' ); - if ( $text === array() ) { + if ( $text === [] ) { $text = $document->text; } else { $text = $text[0]; |