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 <[email protected]>
Gerrit-Reviewer: Demon <[email protected]>
Gerrit-Reviewer: Manybubbles <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits