jenkins-bot has submitted this change and it was merged. Change subject: Respect namespaces when searching ......................................................................
Respect namespaces when searching This means search results will appear in the correct namespaces now Change-Id: I7fe24babf86bc7c983c02c290eb1863830ad7247 --- M CirrusSearch.body.php M config/SchemaBuilder.php 2 files changed, 25 insertions(+), 4 deletions(-) Approvals: Demon: Looks good to me, approved Manybubbles: Verified jenkins-bot: Verified diff --git a/CirrusSearch.body.php b/CirrusSearch.body.php index ac736bd..4491336 100644 --- a/CirrusSearch.body.php +++ b/CirrusSearch.body.php @@ -64,12 +64,16 @@ public static function prefixSearch( $ns, $search, $limit, &$results ) { // Boilerplate + $nsNames = RequestContext::getMain()->getLanguage()->getNamespaces(); $client = self::getClient(); $query = $client->createSelect(); // Query params $query->setRows( $limit ); wfDebugLog( 'CirrusSearch', "Prefix searching: $search" ); + if( count( $ns ) ) { + $query = self::setNamespaceFilter( $ns, $query ); + } $query->setQuery( 'titlePrefix:%T1%', array( $search ) ); // Perform the search @@ -82,7 +86,7 @@ // We only care about title results foreach( $res as $r ) { - $results[] = $r->title; + $results[] = Title::makeTitle( $r->namespace, $r->title )->getPrefixedText(); } return false; @@ -105,7 +109,7 @@ // Boilerplate $client = self::getClient(); $query = $client->createSelect(); - $query->setFields( array( 'id', 'title' ) ); + $query->setFields( array( 'id', 'title', 'namespace' ) ); // Offset/limit if( $this->offset ) { @@ -114,6 +118,9 @@ if( $this->limit ) { $query->setRows( $this->limit ); } + + // Namespaces + $query = self::setNamespaceFilter( $this->namespaces, $query ); $dismax = $query->getDismax(); $dismax->setQueryParser( 'edismax' ); @@ -174,6 +181,19 @@ wfLogWarning( "Search backend error during full text search for '$originalTerm'." ); return $status; } + } + + /** + * Filter a query to only return results in given namespace(s) + * + * @param array $ns Array of namespaces + * @param Solarium_Query $query + * @return Solarium_Query + */ + private static function setNamespaceFilter( array $ns, $query ) { + $query->createFilterQuery( 'namespace' ) + ->setQuery( 'namespace:' . implode( ' OR ', $ns ) ); + return $query; } public function update( $id, $title, $text ) { @@ -287,8 +307,9 @@ $fields = $doc->getFields(); $highlighting = $result->getHighlighting()->getResult( $fields[ 'id' ] )->getFields(); - $this->initFromTitle( Title::newFromText( $fields[ 'title' ] ) ); + $this->initFromTitle( Title::makeTitle( $fields['namespace'], $fields[ 'title' ] ) ); if ( isset( $highlighting[ 'title' ] ) ) { + // @todo: This should also show the namespace, we know it $this->titleSnippet = $highlighting[ 'title' ][ 0 ]; } else { $this->titleSnippet = ''; diff --git a/config/SchemaBuilder.php b/config/SchemaBuilder.php index fb1b3a4..99fce23 100644 --- a/config/SchemaBuilder.php +++ b/config/SchemaBuilder.php @@ -33,7 +33,7 @@ <fields> <field name="_version_" type="long" indexed="true" stored="true" required="true" /> <!-- Required for Solr Cloud --> <field name="id" type="id" indexed="true" stored="true" required="true" /> - <field name="namespace" type="integer" indexed="true" stored="false" required="true" /> + <field name="namespace" type="integer" indexed="true" stored="true" required="true" /> <field name="title" type="text_splitting" indexed="true" stored="true" required="true" /> <field name="text" type="text_splitting" indexed="true" stored="true" /> <field name="textLen" type="long" indexed="true" stored="false" /> -- To view, visit https://gerrit.wikimedia.org/r/69944 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I7fe24babf86bc7c983c02c290eb1863830ad7247 Gerrit-PatchSet: 6 Gerrit-Project: mediawiki/extensions/CirrusSearch Gerrit-Branch: master Gerrit-Owner: Demon <ch...@wikimedia.org> Gerrit-Reviewer: Demon <ch...@wikimedia.org> Gerrit-Reviewer: Manybubbles <never...@wikimedia.org> Gerrit-Reviewer: jenkins-bot _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits