diff --git a/_config/config.yml b/_config/config.yml index 63a8bce..1203db0 100644 --- a/_config/config.yml +++ b/_config/config.yml @@ -13,3 +13,7 @@ SilverStripe\Core\Injector\Injector: SilverStripe\FullTextSearch\Search\Queries\SearchQuery: calls: - [ setHandler, [ %$SilverStripe\FullTextSearch\Search\Adapters\SolrSearchAdapter ]] + +SilverStripe\Dev\Tasks\MigrateFileTask: + extensions: + - SilverStripe\FullTextSearch\Search\Extensions\DisableIndexingOnFileMigration diff --git a/bin/fulltextsearch_quickstart b/bin/fulltextsearch_quickstart old mode 100644 new mode 100755 diff --git a/docs/en/01_getting_started.md b/docs/en/01_getting_started.md index 485521c..9fbfb34 100644 --- a/docs/en/01_getting_started.md +++ b/docs/en/01_getting_started.md @@ -39,7 +39,7 @@ configured and running) that each connector deals with itself, in a way best sui If you are running on a Linux-based system, you can get up and running quickly with the quickstart script, like so: ```bash -composer require silverstripe/fulltextsearch && vendor/bin/fulltextsearch_quickstart +composer require silverstripe/fulltextsearch --prefer-source && vendor/bin/fulltextsearch_quickstart ``` This will: diff --git a/src/Search/Extensions/DisableIndexingOnFileMigration.php b/src/Search/Extensions/DisableIndexingOnFileMigration.php new file mode 100644 index 0000000..2b7530d --- /dev/null +++ b/src/Search/Extensions/DisableIndexingOnFileMigration.php @@ -0,0 +1,37 @@ + '%$' . LoggerInterface::class . '.quiet', + ]; + + /** @var LoggerInterface */ + private $logger; + + /** + * @param LoggerInterface $logger + */ + public function setLogger(LoggerInterface $logger) + { + $this->logger = $logger; + } + + public function preFileMigration() + { + if (SearchUpdater::config()->get('enabled')) { + $this->logger->info('Disabling fulltext search re-indexing for this request only'); + SearchUpdater::config()->set('enabled', false); + } + } +} diff --git a/src/Solr/Services/SolrService.php b/src/Solr/Services/SolrService.php index 1044260..b717751 100644 --- a/src/Solr/Services/SolrService.php +++ b/src/Solr/Services/SolrService.php @@ -2,10 +2,8 @@ namespace SilverStripe\FullTextSearch\Solr\Services; +use Apache_Solr_Response; use SilverStripe\Core\Config\Config; -use SilverStripe\FullTextSearch\Solr\Solr; -use SilverStripe\FullTextSearch\Solr\SolrIndex; -use Silverstripe\Core\ClassInfo; /** * The API for accessing the primary Solr installation, which includes both SolrService_Core, @@ -18,18 +16,24 @@ class SolrService extends SolrService_Core /** * Handle encoding the GET parameters and making the HTTP call to execute a core command + * + * @param string $command + * @param string $core + * @param array $params + * @return Apache_Solr_Response */ protected function coreCommand($command, $core, $params = array()) { $command = strtoupper($command); $params = array_merge($params, array('action' => $command, 'wt' => 'json')); - $params[$command == 'CREATE' ? 'name' : 'core'] = $core; + $params[$command === 'CREATE' ? 'name' : 'core'] = $core; return $this->_sendRawGet($this->_constructUrl('admin/cores', $params)); } /** * Is the passed core active? + * * @param string $core The name of the core (an encoded class name) * @return boolean True if that core exists & is active */ @@ -42,11 +46,12 @@ class SolrService extends SolrService_Core /** * Create a new core - * @param $core string - The name of the core - * @param $instancedir string - The base path of the core on the server - * @param $config string - The filename of solrconfig.xml on the server. Default is $instancedir/solrconfig.xml - * @param $schema string - The filename of schema.xml on the server. Default is $instancedir/schema.xml - * @param $datadir string - The path to store data for this core on the server. Default depends on solrconfig.xml + * + * @param string $core The name of the core + * @param string $instancedir The base path of the core on the server + * @param string $config The filename of solrconfig.xml on the server. Default is $instancedir/solrconfig.xml + * @param string $schema The filename of schema.xml on the server. Default is $instancedir/schema.xml + * @param string $datadir The path to store data for this core on the server. Default depends on solrconfig.xml * @return Apache_Solr_Response */ public function coreCreate($core, $instancedir, $config = null, $schema = null, $datadir = null) @@ -67,7 +72,8 @@ class SolrService extends SolrService_Core /** * Reload a core - * @param $core string - The name of the core + * + * @param string $core The name of the core * @return Apache_Solr_Response */ public function coreReload($core) @@ -77,7 +83,8 @@ class SolrService extends SolrService_Core /** * Create a new Solr4Service_Core instance for the passed core - * @param $core string - The name of the core + * + * @param string $core The name of the core * @return Solr4Service_Core */ public function serviceForCore($core) diff --git a/tests/DisableIndexingOnFileMigrationTest.php b/tests/DisableIndexingOnFileMigrationTest.php new file mode 100644 index 0000000..ae17e07 --- /dev/null +++ b/tests/DisableIndexingOnFileMigrationTest.php @@ -0,0 +1,24 @@ +assertTrue(SearchUpdater::config()->get('enabled')); + + Injector::inst()->get(DisableIndexingOnFileMigration::class)->preFileMigration(); + + $this->assertFalse(SearchUpdater::config()->get('enabled')); + } +}