[MediaWiki-commits] [Gerrit] mediawiki...CirrusSearch[master]: Split SearchIndexField creation code from MappingConfigBuilder
jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/330362 ) Change subject: Split SearchIndexField creation code from MappingConfigBuilder .. Split SearchIndexField creation code from MappingConfigBuilder Make the field creation code more reusable, such as in other extensions implementing some of the search hooks. Change-Id: I8c1d84e5d687b8e7234d49e1cfef534e2f62 --- M autoload.php M includes/CirrusSearch.php M includes/Maintenance/MappingConfigBuilder.php A includes/Search/CirrusSearchIndexFieldFactory.php M includes/Search/TextIndexField.php A tests/unit/Search/CirrusSearchIndexFieldFactoryTest.php 6 files changed, 245 insertions(+), 75 deletions(-) Approvals: Cindy-the-browser-test-bot: Looks good to me, but someone else must approve jenkins-bot: Verified DCausse: Looks good to me, approved diff --git a/autoload.php b/autoload.php index 33c806c..73ecdd4 100644 --- a/autoload.php +++ b/autoload.php @@ -141,6 +141,7 @@ 'CirrusSearch\\Search\\BooleanIndexField' => __DIR__ . '/includes/Search/BooleanIndexField.php', 'CirrusSearch\\Search\\BoostTemplatesFunctionScoreBuilder' => __DIR__ . '/includes/Search/RescoreBuilders.php', 'CirrusSearch\\Search\\CirrusIndexField' => __DIR__ . '/includes/Search/CirrusIndexField.php', + 'CirrusSearch\\Search\\CirrusSearchIndexFieldFactory' => __DIR__ . '/includes/Search/CirrusSearchIndexFieldFactory.php', 'CirrusSearch\\Search\\CustomFieldFunctionScoreBuilder' => __DIR__ . '/includes/Search/RescoreBuilders.php', 'CirrusSearch\\Search\\DatetimeIndexField' => __DIR__ . '/includes/Search/DatetimeIndexField.php', 'CirrusSearch\\Search\\EmptyResultSet' => __DIR__ . '/includes/Search/EmptyResultSet.php', diff --git a/includes/CirrusSearch.php b/includes/CirrusSearch.php index a5d6e53..3bfa4c1 100644 --- a/includes/CirrusSearch.php +++ b/includes/CirrusSearch.php @@ -9,6 +9,7 @@ use CirrusSearch\CompletionSuggester; use CirrusSearch\Search\ResultSet; use CirrusSearch\SearchConfig; +use CirrusSearch\Search\CirrusSearchIndexFieldFactory; use CirrusSearch\Search\FancyTitleResultsType; use CirrusSearch\Search\TitleResultsType; use CirrusSearch\UserTesting; @@ -80,6 +81,11 @@ */ private $request; +/** + * CirrusSearchIndexFieldFactory + */ +private $searchIndexFieldFactory; + /** * Sets the behaviour for the dump query, dump result, etc debugging features. * By default echo's and dies. If this is set to false it will be returned @@ -101,6 +107,8 @@ : $baseName; $this->connection = new Connection( $this->config ); $this->request = RequestContext::getMain()->getRequest(); +$this->searchIndexFieldFactory = new CirrusSearchIndexFieldFactory( $this->config ); + // enable interwiki by default $this->features['interwiki'] = true; } @@ -772,23 +780,7 @@ * @return SearchIndexField */ public function makeSearchFieldMapping( $name, $type ) { - $overrides = $this->config->get( 'CirrusSearchFieldTypeOverrides' ); - $mappings = $this->config->get( 'CirrusSearchFieldTypes' ); - if ( !isset( $mappings[$type] ) ) { - return new NullIndexField(); - } - $klass = $mappings[$type]; - - // Check if a specific class is provided for this field - if ( isset( $overrides[$name] ) ) { - if ( $klass !== $overrides[$name] && !is_subclass_of( $overrides[$name], $klass ) ) { - throw new \Exception( "Specialized class " . $overrides[$name] . - " for field $name is not compatible with type class $klass" ); - } - $klass = $overrides[$name]; - } - - return new $klass( $name, $type, $this->config ); + return $this->searchIndexFieldFactory->makeSearchFieldMapping( $name, $type ); } /** diff --git a/includes/Maintenance/MappingConfigBuilder.php b/includes/Maintenance/MappingConfigBuilder.php index 7b8eded..081b20f 100644 --- a/includes/Maintenance/MappingConfigBuilder.php +++ b/includes/Maintenance/MappingConfigBuilder.php @@ -3,7 +3,7 @@ namespace CirrusSearch\Maintenance; use CirrusSearch\Search\CirrusIndexField; -use CirrusSearch\Search\IntegerIndexField; +use CirrusSearch\Search\CirrusSearchIndexFieldFactory; use CirrusSearch\Search\KeywordIndexField; use CirrusSearch\SearchConfig; use CirrusSearch\Search\TextIndexField; @@ -60,6 +60,11 @@ private $engine; /** +* @var CirrusSearchIndexFieldFactory +*/ + private $searchIndexFieldFactory; + + /** * Constructor
[MediaWiki-commits] [Gerrit] mediawiki...CirrusSearch[master]: Split SearchIndexField creation code from MappingConfigBuilder
Aude has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/330362 ) Change subject: Split SearchIndexField creation code from MappingConfigBuilder .. Split SearchIndexField creation code from MappingConfigBuilder Make the field creation code more reusable, such as in other extensions implementing some of the search hooks. Change-Id: I8c1d84e5d687b8e7234d49e1cfef534e2f62 --- M autoload.php M includes/Maintenance/MappingConfigBuilder.php A includes/Search/CirrusSearchIndexFieldFactory.php M includes/Search/TextIndexField.php A tests/unit/Search/CirrusSearchIndexFieldFactoryTest.php 5 files changed, 210 insertions(+), 58 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/CirrusSearch refs/changes/62/330362/1 diff --git a/autoload.php b/autoload.php index 33c806c..73ecdd4 100644 --- a/autoload.php +++ b/autoload.php @@ -141,6 +141,7 @@ 'CirrusSearch\\Search\\BooleanIndexField' => __DIR__ . '/includes/Search/BooleanIndexField.php', 'CirrusSearch\\Search\\BoostTemplatesFunctionScoreBuilder' => __DIR__ . '/includes/Search/RescoreBuilders.php', 'CirrusSearch\\Search\\CirrusIndexField' => __DIR__ . '/includes/Search/CirrusIndexField.php', + 'CirrusSearch\\Search\\CirrusSearchIndexFieldFactory' => __DIR__ . '/includes/Search/CirrusSearchIndexFieldFactory.php', 'CirrusSearch\\Search\\CustomFieldFunctionScoreBuilder' => __DIR__ . '/includes/Search/RescoreBuilders.php', 'CirrusSearch\\Search\\DatetimeIndexField' => __DIR__ . '/includes/Search/DatetimeIndexField.php', 'CirrusSearch\\Search\\EmptyResultSet' => __DIR__ . '/includes/Search/EmptyResultSet.php', diff --git a/includes/Maintenance/MappingConfigBuilder.php b/includes/Maintenance/MappingConfigBuilder.php index 7b8eded..081b20f 100644 --- a/includes/Maintenance/MappingConfigBuilder.php +++ b/includes/Maintenance/MappingConfigBuilder.php @@ -3,7 +3,7 @@ namespace CirrusSearch\Maintenance; use CirrusSearch\Search\CirrusIndexField; -use CirrusSearch\Search\IntegerIndexField; +use CirrusSearch\Search\CirrusSearchIndexFieldFactory; use CirrusSearch\Search\KeywordIndexField; use CirrusSearch\SearchConfig; use CirrusSearch\Search\TextIndexField; @@ -60,6 +60,11 @@ private $engine; /** +* @var CirrusSearchIndexFieldFactory +*/ + private $searchIndexFieldFactory; + + /** * Constructor * @param bool $optimizeForExperimentalHighlighter should the index be optimized for the experimental highlighter? * @param SearchConfig $config @@ -70,9 +75,11 @@ $config = MediaWikiServices::getInstance()->getConfigFactory()->makeConfig( 'CirrusSearch' ); } + $this->config = $config; $this->engine = new \CirrusSearch(); $this->engine->setConfig( $config ); + $this->searchIndexFieldFactory = new CirrusSearchIndexFieldFactory( $config ); } /** @@ -126,25 +133,21 @@ 'type' => 'date', 'format' => 'dateOptionalTime', ], - 'wiki' => $this->buildKeywordField( 'wiki' )->getMapping( $this->engine ), - 'namespace' => $this->buildLongField( 'namespace' )->getMapping( $this->engine ), - 'namespace_text' => $this->buildKeywordField( 'namespace_text' ) + 'wiki' => $this->searchIndexFieldFactory + ->newKeywordField( 'wiki' ) ->getMapping( $this->engine ), - 'title' => $this->buildStringField( 'title', + 'namespace' => $this->searchIndexFieldFactory + ->newLongField( 'namespace' ) + ->getMapping( $this->engine ), + 'namespace_text' => $this->searchIndexFieldFactory + ->newKeywordField( 'namespace_text' ) + ->getMapping( $this->engine ), + 'title' => $this->searchIndexFieldFactory->newStringField( 'title', TextIndexField::ENABLE_NORMS | TextIndexField::COPY_TO_SUGGEST, $titleExtraAnalyzers )->setMappingFlags( $flags )->getMapping( $this->engine ), - 'text' => array_merge_recursive( $this->buildStringField( 'text', null, - ( $flags & self::PHRASE_SUGGEST_USE_TEXT ) ? [ 'analyzer' => 'suggest' ] : [ ] ) - ->setMappingFlags( $flags