Nikerabbit has uploaded a new change for review.
https://gerrit.wikimedia.org/r/123566
Change subject: WIP: Translation search for elastic search backend
......................................................................
WIP: Translation search for elastic search backend
Paired with Kartik.
Working: basic search and facet display
Not working: filtering, highlighting, browsing more results
Todo: abstract so that Special:SearchTranslations can work with any available
backend
Change-Id: Ic05156be893bdb66e1d0a81667d8ba1c7408a453
---
M specials/SpecialSearchTranslations.php
M ttmserver/ElasticSearchTTMServer.php
2 files changed, 54 insertions(+), 36 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Translate
refs/changes/66/123566/1
diff --git a/specials/SpecialSearchTranslations.php
b/specials/SpecialSearchTranslations.php
index e1ae0bd..7fb563c 100644
--- a/specials/SpecialSearchTranslations.php
+++ b/specials/SpecialSearchTranslations.php
@@ -56,7 +56,7 @@
$this->checkPermissions();
$server = TTMServer::primary();
- if ( !$server instanceof SolrTTMServer ) {
+ if ( !$server instanceof ElasticSearchTTMServer ) {
throw new ErrorPageError( 'tux-sst-nosolr-title',
'tux-sst-nosolr-body' );
}
@@ -80,29 +80,30 @@
}
try {
- $resultset = $this->doSearch( $server->getSolarium(),
$queryString );
- } catch ( Solarium_Client_HttpException $e ) {
- error_log( 'Translate: Solr search server unavailable'
);
+ $resultset = $this->doSearch( $server->getType(),
$queryString );
+ } catch ( \Elastica\Exception\ExceptionInterface $e ) {
+ error_log( 'Translate: ElasticSearch search server
unavailable' );
throw new ErrorPageError( 'tux-sst-solr-offline-title',
'tux-sst-solr-offline-body' );
}
// Part 1: facets
$facets = '';
- $facet = $resultset->getFacetSet()->getFacet( 'language' );
+ $facetSets = $resultset->getFacets();
+ $facetLanguage = $facetSets['language'];
$facets .= Html::element( 'div',
array( 'class' => 'row facet languages',
- 'data-facets' => FormatJson::encode(
$this->getLanguages( $facet ) ),
+ 'data-facets' => FormatJson::encode(
$this->getLanguages( $facetLanguage['terms'] ) ),
'data-language' => $opts->getValue( 'language'
),
),
$this->msg( 'tux-sst-facet-language' )
);
- $facet = $resultset->getFacetSet()->getFacet( 'group' );
+ $facetGroup = $facetSets['group'];
$facets .= Html::element( 'div',
array( 'class' => 'row facet groups',
- 'data-facets' => FormatJson::encode(
$this->getGroups( $facet ) ),
+ 'data-facets' => FormatJson::encode(
$this->getGroups( $facetGroup['terms'] ) ),
'data-group' => $opts->getValue( 'group' ), ),
$this->msg( 'tux-sst-facet-group' )
);
@@ -110,10 +111,10 @@
// Part 2: results
$results = '';
- $highlighting = $resultset->getHighlighting();
- foreach ( $resultset as $document ) {
+ //$highlighting = $resultset->getHighlighting();
+ foreach ( $resultset->getResults() as $document ) {
- $hdoc = $highlighting->getResult( $document->globalid );
+ /*$hdoc = $highlighting->getResult( $document->globalid
);
$text = $hdoc->getField( 'text' );
if ( $text === array() ) {
$text = $document->text;
@@ -125,9 +126,11 @@
list( $pre, $post ) = $this->hl;
$text = str_replace( $pre, '<strong
class="tux-highlight">', $text );
$text = str_replace( $post, '</strong>', $text
);
- }
+ }*/
+ $data = $document->getData();
+ $text = $data['content'];
- $title = Title::newFromText( $document->messageid . '/'
. $document->language );
+ $title = Title::newFromText( $data['localid']. '/' .
$data['language'] );
if ( !$title ) {
// Should not ever happen but who knows...
continue;
@@ -173,7 +176,7 @@
}
$prev = $next = '';
- $total = $resultset->getNumFound();
+ $total = $resultset->getTotalHits();
$offset = $this->getRequest()->getInt( 'offset' );
$params = $this->getRequest()->getValues();
@@ -197,13 +200,35 @@
$results .= Html::rawElement( 'div', array(), "$prev $next" );
$search = $this->getSearchInput( $queryString );
- $count = $this->msg( 'tux-sst-count' )->numParams(
$resultset->getNumFound() );
+ $count = $this->msg( 'tux-sst-count' )->numParams(
$resultset->getTotalHits() );
$this->showSearch( $search, $count, $facets, $results );
}
- protected function doSearch( Solarium_Client $client, $queryString ) {
- $query = $client->createSelect();
+ protected function doSearch( \Elastica\Type $type, $queryString ) {
+ $query = new \Elastica\Query();
+
+ $queryStringQuery = new \Elastica\Query\QueryString();
+ $queryStringQuery->setQuery( $queryString );
+ $query->setQuery( $queryStringQuery );
+
+ $language = new \Elastica\Facet\Terms( 'language' );
+ $language->setField( 'language' );
+ //$language->setMincount( 1 );
+ //$language->addExclude( 'filter' );
+ $query->addFacet( $language );
+
+ $group = new \Elastica\Facet\Terms( 'group' );
+ $group->setField( 'group' );
+ //$group->setMincount( 1 );
+ //$group->setMissing( true );
+ //$group->addExclude( 'filter' );
+ $query->addFacet( $group );
+
+ $result = $type->getIndex()->search( $query );
+ return $result;
+
+
$dismax = $query->getDisMax();
$dismax->setQueryParser( 'edismax' );
$query->setQuery( $queryString );
@@ -233,29 +258,18 @@
->addTag( 'filter' );
}
- $facetSet = $query->getFacetSet();
-
- $language = $facetSet->createFacetField( 'language' );
- $language->setField( 'language' );
- $language->setMincount( 1 );
- $language->addExclude( 'filter' );
-
- $group = $facetSet->createFacetField( 'group' );
- $group->setField( 'group' );
- $group->setMincount( 1 );
- $group->setMissing( true );
- $group->addExclude( 'filter' );
-
- return $client->select( $query );
+ return $client->getType()->getIndex()->search( $query );
}
- protected function getLanguages( Solarium_Result_Select_Facet_Field
$facet ) {
+ protected function getLanguages( array $facet ) {
$output = array();
$nondefaults = $this->opts->getChangedValues();
$selected = $this->opts->getValue( 'language' );
- foreach ( $facet as $key => $value ) {
+ foreach ( $facet as $item ) {
+ $key = $item['term'];
+ $value = $item['count'];
if ( $key === $selected ) {
unset( $nondefaults['language'] );
} else {
@@ -274,9 +288,13 @@
return $output;
}
- protected function getGroups( Solarium_Result_Select_Facet_Field $facet
) {
+ protected function getGroups( array $facet ) {
$structure = MessageGroups::getGroupStructure();
- $counts = iterator_to_array( $facet );
+
+ $counts = array();
+ foreach ( $facet as $item ) {
+ $counts[$item['term']] = $item['count'];
+ }
return $this->makeGroupFacetRows( $structure, $counts );
}
diff --git a/ttmserver/ElasticSearchTTMServer.php
b/ttmserver/ElasticSearchTTMServer.php
index cfbbac1..4241f3a 100644
--- a/ttmserver/ElasticSearchTTMServer.php
+++ b/ttmserver/ElasticSearchTTMServer.php
@@ -317,7 +317,7 @@
return $this->client;
}
- protected function getType() {
+ public function getType() {
return $this->getClient()->getIndex( 'ttmserver' )->getType(
'message' );
}
--
To view, visit https://gerrit.wikimedia.org/r/123566
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic05156be893bdb66e1d0a81667d8ba1c7408a453
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Translate
Gerrit-Branch: master
Gerrit-Owner: Nikerabbit <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits