Aude has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/304301

Change subject: Expose external and outgoing_link search fields in EntityHandler
......................................................................

Expose external and outgoing_link search fields in EntityHandler

Wikibase stores external and internal links in parser output.

Since Ie45de496, this data needs to be exposed to the search engine
in the content handlers.

Change-Id: Ib0562d4b63e49b9db233b6a872b68c8ebc6caad5
Depends-On: I69b010b893135e53fac7f16f4b927b8fbcba06d2
Bug: T142738
---
M repo/includes/Content/EntityHandler.php
M repo/tests/phpunit/includes/Content/EntityHandlerTest.php
2 files changed, 82 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/01/304301/1

diff --git a/repo/includes/Content/EntityHandler.php 
b/repo/includes/Content/EntityHandler.php
index c335f08..f488aa8 100644
--- a/repo/includes/Content/EntityHandler.php
+++ b/repo/includes/Content/EntityHandler.php
@@ -12,9 +12,13 @@
 use Language;
 use MWContentSerializationException;
 use MWException;
+use MediaWiki\Search\Field\ParserOutputSearchIndexFieldFactory;
+use MediaWiki\Search\ParserOutputSearchDataExtractor;
 use ParserOptions;
+use ParserOutput;
 use RequestContext;
 use Revision;
+use SearchEngine;
 use Title;
 use User;
 use Wikibase\Content\DeferredDecodingEntityHolder;
@@ -34,6 +38,7 @@
 use Wikibase\Repo\WikibaseRepo;
 use Wikibase\TermIndex;
 use Wikibase\Updates\DataUpdateAdapter;
+use WikiPage;
 
 /**
  * Base handler class for Entity content classes.
@@ -773,4 +778,40 @@
                return false;
        }
 
+       /**
+        * @param SearchEngine $engine
+        *
+        * @return array
+        */
+       public function getFieldsForSearchIndex( SearchEngine $engine ) {
+               $parserOutputFieldFactory = new 
ParserOutputSearchIndexFieldFactory( $engine );
+
+               $fields = array_merge(
+                       parent::getFieldsForSearchIndex( $engine ),
+                       $parserOutputFieldFactory->newFields( [ 
'external_link', 'outgoing_link' ] )
+               );
+
+               return $fields;
+       }
+
+       /**
+        * @param WikiPage $page
+        * @param ParserOutput $parserOutput
+        * @param SearchEngine $engine
+        */
+       public function getDataForSearchIndex(
+               WikiPage $page,
+               ParserOutput $parserOutput,
+               SearchEngine $engine
+       ) {
+               $fieldData = parent::getDataForSearchIndex( $page, 
$parserOutput, $engine );
+
+               $parserOutputSearchDataExtractor = new 
ParserOutputSearchDataExtractor( $parserOutput );
+
+               $fieldData['external_link'] = 
$parserOutputSearchDataExtractor->getExternalLinks();
+               $fieldData['outgoing_link'] = 
$parserOutputSearchDataExtractor->getOutgoingLinks();
+
+               return $fieldData;
+       }
+
 }
diff --git a/repo/tests/phpunit/includes/Content/EntityHandlerTest.php 
b/repo/tests/phpunit/includes/Content/EntityHandlerTest.php
index bffad59..cf297a2 100644
--- a/repo/tests/phpunit/includes/Content/EntityHandlerTest.php
+++ b/repo/tests/phpunit/includes/Content/EntityHandlerTest.php
@@ -8,6 +8,8 @@
 use InvalidArgumentException;
 use Language;
 use MWException;
+use NullIndexField;
+use ParserOutput;
 use RequestContext;
 use Revision;
 use RuntimeException;
@@ -27,6 +29,7 @@
 use Wikibase\Repo\WikibaseRepo;
 use Wikibase\SettingsArray;
 use WikitextContent;
+use WikiPage;
 
 /**
  * @covers Wikibase\Repo\Content\EntityHandler
@@ -502,4 +505,42 @@
                $this->assertContains( '(wikibase-noentity)', 
$context->getOutput()->getHTML() );
        }
 
+       public function testGetFieldsForSearchIndex() {
+               $searchEngine = $this->makeSearchEngine();
+               $searchEngine->expects( $this->any() )
+                       ->method( 'makeSearchFieldMapping' )
+                       ->will( $this->returnValue( new NullIndexField() ) );
+
+               $handler = $this->getHandler();
+
+               $fields = $handler->getFieldsForSearchIndex( $searchEngine );
+               $expectedField = new NullIndexField();
+
+               $this->assertEquals( $expectedField, $fields['external_link'] );
+               $this->assertEquals( $expectedField, $fields['outgoing_link'] );
+       }
+
+       public function testGetDataForSearchIndex() {
+               $handler = $this->getHandler();
+
+               $searchEngine = $this->makeSearchEngine();
+
+               $title = Title::makeTitle( $handler->getEntityNamespace(), 
'Q999' );
+               $page = WikiPage::factory( $title );
+               $parserOutput = new ParserOutput();
+
+               $fieldData = $handler->getDataForSearchIndex( $page, 
$parserOutput, $searchEngine );
+
+               $this->assertEquals( [], $fieldData['external_link'] );
+               $this->assertEquals( [], $fieldData['outgoing_link'] );
+       }
+
+       private function makeSearchEngine() {
+               $searchEngine = $this->getMockBuilder( 'SearchEngine' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
+               return $searchEngine;
+       }
+
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/304301
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib0562d4b63e49b9db233b6a872b68c8ebc6caad5
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Aude <aude.w...@gmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to