[MediaWiki-commits] [Gerrit] mediawiki...CirrusSearch[master]: Split SearchIndexField creation code from MappingConfigBuilder

2017-01-17 Thread jenkins-bot (Code Review)
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

2017-01-03 Thread Aude (Code Review)
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