[MediaWiki-commits] [Gerrit] mediawiki...CirrusSearch[master]: Externalize comp suggest builder code
jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/387558 ) Change subject: Externalize comp suggest builder code .. Externalize comp suggest builder code The CompletionSuggester was a bit hairy, the goal is to - externalize the code responsible for building the suggest to its own class. - reduce mutable states - use more Elastica classes Bug: T178906 Change-Id: Ie3ea3b0c2718c1cc5ac079a703cfc92dac86e934 --- M autoload.php M includes/CompletionSuggester.php A includes/Query/CompSuggestQueryBuilder.php M tests/unit/CompletionSuggesterTest.php 4 files changed, 382 insertions(+), 376 deletions(-) Approvals: Cindy-the-browser-test-bot: Looks good to me, but someone else must approve EBernhardson: Looks good to me, approved jenkins-bot: Verified diff --git a/autoload.php b/autoload.php index 8ecde96..77c95f1 100644 --- a/autoload.php +++ b/autoload.php @@ -113,6 +113,7 @@ 'CirrusSearch\\PhraseSuggesterProfiles' => __DIR__ . '/profiles/PhraseSuggesterProfiles.php', 'CirrusSearch\\Query\\BaseSimpleKeywordFeatureTest' => __DIR__ . '/tests/unit/Query/BaseSimpleKeywordFeatureTest.php', 'CirrusSearch\\Query\\BoostTemplatesFeature' => __DIR__ . '/includes/Query/BoostTemplatesFeature.php', + 'CirrusSearch\\Query\\CompSuggestQueryBuilder' => __DIR__ . '/includes/Query/CompSuggestQueryBuilder.php', 'CirrusSearch\\Query\\ContentModelFeature' => __DIR__ . '/includes/Query/ContentModelFeature.php', 'CirrusSearch\\Query\\FileNumericFeature' => __DIR__ . '/includes/Query/FileNumericFeature.php', 'CirrusSearch\\Query\\FileTypeFeature' => __DIR__ . '/includes/Query/FileTypeFeature.php', diff --git a/includes/CompletionSuggester.php b/includes/CompletionSuggester.php index 27317c4..fd2f0db 100644 --- a/includes/CompletionSuggester.php +++ b/includes/CompletionSuggester.php @@ -2,16 +2,14 @@ namespace CirrusSearch; -use CirrusSearch; -use Elastica\Request; -use CirrusSearch\BuildDocument\Completion\SuggestBuilder; +use CirrusSearch\Query\CompSuggestQueryBuilder; +use Elastica\Exception\ExceptionInterface; +use Elastica\Index; +use Elastica\Query; use CirrusSearch\Search\SearchContext; use MediaWiki\MediaWikiServices; -use SearchSuggestion; use SearchSuggestionSet; use Status; -use ApiUsageException; -use UsageException; use User; /** @@ -57,49 +55,41 @@ * in suggest profiles to fetch more than what the use asked. */ class CompletionSuggester extends ElasticsearchIntermediary { - const VARIANT_EXTRA_DISCOUNT = 0.0001; /** -* @var string term to search. -*/ - private $term; - - /** -* @var string[]|null search variants -*/ - private $variants; - - /** -* @var integer maximum number of result +* @var integer maximum number of result (final) */ private $limit; /** -* @var integer offset +* @var integer offset (final) */ private $offset; /** -* @var string index base name to use +* @var string index base name to use (final) */ private $indexBaseName; /** -* Search environment configuration +* @var Index (final) +*/ + private $completionIndex; + + /** +* Search environment configuration (final) * @var SearchConfig */ private $config; /** -* @var string Query type (comp_suggest_geo or comp_suggest) -*/ - public $queryType; - - /** -* @var SearchContext +* @var SearchContext (final) */ private $searchContext; - private $settings; + /** +* @var CompSuggestQueryBuilder $compSuggestBuilder (final) +*/ + private $compSuggestBuilder; /** * @param Connection $conn @@ -126,36 +116,19 @@ $this->limit = $limit; $this->offset = $offset; $this->indexBaseName = $index ?: $config->get( SearchConfig::INDEX_BASE_NAME ); + $this->completionIndex = $this->connection->getIndex( $this->indexBaseName, + Connection::TITLE_SUGGEST_TYPE ); $this->searchContext = new SearchContext( $this->config, $namespaces ); if ( $profileName == null ) { $profileName = $this->config->get( 'CirrusSearchCompletionSettings' ); } - $this->settings = $this->config->getElement( 'CirrusSearchCompletionProfiles', $profileName ); - } - - /** -* @param string $search -* @throws ApiUsageException -* @throws UsageException -*/ - private function checkRequestLength( $search ) { - $requestLength = mb_strlen( $search ); - if ( $requestLength > CirrusSearc
[MediaWiki-commits] [Gerrit] mediawiki...CirrusSearch[master]: Externalize comp suggest builder code
DCausse has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/387558 ) Change subject: Externalize comp suggest builder code .. Externalize comp suggest builder code The CompletionSuggester was a bit hairy, the goal is to - externalize the code responsible for building the suggest to its own class. - reduce mutable states - use more Elastica classes Bug: T178906 Change-Id: Ie3ea3b0c2718c1cc5ac079a703cfc92dac86e934 --- M autoload.php M includes/CompletionSuggester.php A includes/Query/CompSuggestQueryBuilder.php M tests/unit/CompletionSuggesterTest.php 4 files changed, 391 insertions(+), 369 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/CirrusSearch refs/changes/58/387558/1 diff --git a/autoload.php b/autoload.php index 8ecde96..77c95f1 100644 --- a/autoload.php +++ b/autoload.php @@ -113,6 +113,7 @@ 'CirrusSearch\\PhraseSuggesterProfiles' => __DIR__ . '/profiles/PhraseSuggesterProfiles.php', 'CirrusSearch\\Query\\BaseSimpleKeywordFeatureTest' => __DIR__ . '/tests/unit/Query/BaseSimpleKeywordFeatureTest.php', 'CirrusSearch\\Query\\BoostTemplatesFeature' => __DIR__ . '/includes/Query/BoostTemplatesFeature.php', + 'CirrusSearch\\Query\\CompSuggestQueryBuilder' => __DIR__ . '/includes/Query/CompSuggestQueryBuilder.php', 'CirrusSearch\\Query\\ContentModelFeature' => __DIR__ . '/includes/Query/ContentModelFeature.php', 'CirrusSearch\\Query\\FileNumericFeature' => __DIR__ . '/includes/Query/FileNumericFeature.php', 'CirrusSearch\\Query\\FileTypeFeature' => __DIR__ . '/includes/Query/FileTypeFeature.php', diff --git a/includes/CompletionSuggester.php b/includes/CompletionSuggester.php index 27317c4..e9cc993 100644 --- a/includes/CompletionSuggester.php +++ b/includes/CompletionSuggester.php @@ -2,16 +2,14 @@ namespace CirrusSearch; -use CirrusSearch; -use Elastica\Request; -use CirrusSearch\BuildDocument\Completion\SuggestBuilder; +use CirrusSearch\Query\CompSuggestQueryBuilder; +use Elastica\Exception\ExceptionInterface; +use Elastica\Index; +use Elastica\Query; use CirrusSearch\Search\SearchContext; use MediaWiki\MediaWikiServices; -use SearchSuggestion; use SearchSuggestionSet; use Status; -use ApiUsageException; -use UsageException; use User; /** @@ -57,49 +55,41 @@ * in suggest profiles to fetch more than what the use asked. */ class CompletionSuggester extends ElasticsearchIntermediary { - const VARIANT_EXTRA_DISCOUNT = 0.0001; /** -* @var string term to search. -*/ - private $term; - - /** -* @var string[]|null search variants -*/ - private $variants; - - /** -* @var integer maximum number of result +* @var integer maximum number of result (final) */ private $limit; /** -* @var integer offset +* @var integer offset (final) */ private $offset; /** -* @var string index base name to use +* @var string index base name to use (final) */ private $indexBaseName; /** -* Search environment configuration +* @var Index (final) +*/ + private $completionIndex; + + /** +* Search environment configuration (final) * @var SearchConfig */ private $config; /** -* @var string Query type (comp_suggest_geo or comp_suggest) -*/ - public $queryType; - - /** -* @var SearchContext +* @var SearchContext (final) */ private $searchContext; - private $settings; + /** +* @var CompSuggestQueryBuilder $compSuggestBuilder (final) +*/ + private $compSuggestBuilder; /** * @param Connection $conn @@ -126,36 +116,19 @@ $this->limit = $limit; $this->offset = $offset; $this->indexBaseName = $index ?: $config->get( SearchConfig::INDEX_BASE_NAME ); + $this->completionIndex = $this->connection->getIndex( $this->indexBaseName, + Connection::TITLE_SUGGEST_TYPE ); $this->searchContext = new SearchContext( $this->config, $namespaces ); if ( $profileName == null ) { $profileName = $this->config->get( 'CirrusSearchCompletionSettings' ); } - $this->settings = $this->config->getElement( 'CirrusSearchCompletionProfiles', $profileName ); - } - - /** -* @param string $search -* @throws ApiUsageException -* @throws UsageException -*/ - private function checkRequestLength( $search ) { - $requestLength = mb_strlen( $search ); - if ( $requestLength > CirrusSearch::MAX_TITLE_SEARCH ) { - if ( class_exists