%PDF- %PDF-
Direktori : /www/varak.net/wiki.varak.net/extensions/CirrusSearch/includes/Maintenance/ |
Current File : /www/varak.net/wiki.varak.net/extensions/CirrusSearch/includes/Maintenance/IndexCreator.php |
<?php namespace CirrusSearch\Maintenance; use Elastica\Index; use Status; class IndexCreator { /** * @var Index */ private $index; /** * @var AnalysisConfigBuilder */ private $analysisConfigBuilder; /** * @param Index $index * @param AnalysisConfigBuilder $analysisConfigBuilder */ public function __construct( Index $index, AnalysisConfigBuilder $analysisConfigBuilder ) { $this->index = $index; $this->analysisConfigBuilder = $analysisConfigBuilder; } /** * @param bool $rebuild * @param int|string $maxShardsPerNode 'unlimited' * @param int $shardCount * @param string $replicaCount * @param int $refreshInterval * @param array $mergeSettings * @param bool $searchAllFields * * @return Status */ public function createIndex( $rebuild, $maxShardsPerNode, $shardCount, $replicaCount, $refreshInterval, array $mergeSettings, $searchAllFields ) { $args = $this->buildArgs( $maxShardsPerNode, $shardCount, $replicaCount, $refreshInterval, $mergeSettings, $searchAllFields ); try { $response = $this->index->create( $args, $rebuild ); /** @suppress PhanNonClassMethodCall library is mis-annotated */ if ( $response->hasError() === true ) { /** @suppress PhanNonClassMethodCall library is mis-annotated */ return Status::newFatal( $response->getError() ); } } catch ( \Elastica\Exception\InvalidException $ex ) { return Status::newFatal( $ex->getMessage() ); } catch ( \Elastica\Exception\ResponseException $ex ) { return Status::newFatal( $ex->getMessage() ); } return Status::newGood(); } /** * @param int|string $maxShardsPerNode 'unlimited' * @param int $shardCount * @param string $replicaCount * @param int $refreshInterval * @param array $mergeSettings * @param bool $searchAllFields * * @return array */ private function buildArgs( $maxShardsPerNode, $shardCount, $replicaCount, $refreshInterval, array $mergeSettings, $searchAllFields ) { $maxShardsPerNode = $maxShardsPerNode === 'unlimited' ? -1 : $maxShardsPerNode; $args = [ 'settings' => [ 'number_of_shards' => $shardCount, 'auto_expand_replicas' => $replicaCount, 'analysis' => $this->analysisConfigBuilder->buildConfig(), 'refresh_interval' => $refreshInterval . 's', 'merge.policy' => $mergeSettings, 'routing.allocation.total_shards_per_node' => $maxShardsPerNode, ] ]; $similarity = $this->analysisConfigBuilder->buildSimilarityConfig(); if ( $similarity ) { $args['settings']['similarity'] = $similarity; } if ( $searchAllFields ) { // Use our weighted all field as the default rather than _all which is disabled. $args['settings']['index.query.default_field'] = 'all'; } return $args; } }