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

Reply via email to