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