jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/402071 )
Change subject: [cleanup] Simplify phrase suggester settings ...................................................................... [cleanup] Simplify phrase suggester settings - remove code to override settings with URI params - switch profile setting to a string instead of the profile array - remove deprecated settings - moved safeguard settings to class constant instead of config vars Change-Id: Id76389c5c1a640bad7175f5507b7abd7f7be4e7f --- M CirrusSearch.php M docs/settings.txt M includes/Api/ConfigDump.php M includes/Hooks.php M includes/Query/FullTextQueryStringQueryBuilder.php M profiles/PhraseSuggesterProfiles.php M tests/integration/features/did_you_mean_api.feature M tests/integration/features/dump_config.feature M tests/integration/features/step_definitions/page_steps.js M tests/integration/features/support/hooks.js 10 files changed, 44 insertions(+), 284 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/CirrusSearch.php b/CirrusSearch.php index 5c85acc..189a1e8 100644 --- a/CirrusSearch.php +++ b/CirrusSearch.php @@ -397,53 +397,10 @@ $wgCirrusSearchEnablePhraseSuggest = true; /** - * NOTE: This settings is deprecated: update or create your own PhraseSuggester profile. - * Maximum number of terms that we ask phrase suggest to correct. - * See max_errors on http://www.elasticsearch.org/guide/reference/api/search/suggest/ - * $wgCirrusSearchPhraseSuggestMaxErrors = 2; - */ - -/** - * NOTE: This settings is deprecated: update or create your own PhraseSuggester profile. - * Confidence level required to suggest new phrases. - * See confidence on http://www.elasticsearch.org/guide/reference/api/search/suggest/ - * $wgCirrusSearchPhraseSuggestConfidence = 2.0; - */ - -/** - * Set the hard limit for $wgCirrusSearchPhraseSuggestMaxErrors. This prevents customizing - * this setting in a way that could hurt the system performances. - */ -$wgCirrusSearchPhraseSuggestMaxErrorsHardLimit = 2; - -/** - * Set the hard limit for $wgCirrusSearchPhraseMaxTermFreq. This prevents customizing - * this setting in a way that could hurt the system performances. - */ -$wgCirrusSearchPhraseSuggestMaxTermFreqHardLimit = 0.6; - -/** - * List of allowed values for the suggest mode - */ -$wgCirrusSearchPhraseSuggestAllowedMode = [ 'missing', 'popular', 'always' ]; - -/** - * List of allowed smoothing models - */ -$wgCirrusSearchPhraseSuggestAllowedSmoothingModel = [ 'stupid_backoff', 'laplace', 'linear' ]; - -/** - * Set the hard limit for $wgCirrusSearchPhraseSuggestPrefixLength. This prevents customizing - * this setting in a way that could hurt the system performances. - * (This is the minimal value) - */ -$wgCirrusSearchPhraseSuggestPrefixLengthHardLimit = 2; - -/** * Set the Phrase suggester settings using the default profile. * see profiles/PhraseSuggesterProfiles.php */ -$wgCirrusSearchPhraseSuggestSettings = $wgCirrusSearchPhraseSuggestProfiles['default']; +$wgCirrusSearchPhraseSuggestSettings = 'default'; /** * Use a reverse field to build the did you mean suggestions. diff --git a/docs/settings.txt b/docs/settings.txt index 131ad0c..f00900b 100644 --- a/docs/settings.txt +++ b/docs/settings.txt @@ -432,49 +432,10 @@ Should the phrase suggester (did you mean) be enabled? -; $wgCirrusSearchPhraseSuggestMaxErrorsHardLimit - -Default: - $wgCirrusSearchPhraseSuggestMaxErrorsHardLimit = 2; - -Set the hard limit for $wgCirrusSearchPhraseSuggestMaxErrors. This prevents customizing -this setting in a way that could hurt the system performances. - -; $wgCirrusSearchPhraseSuggestMaxTermFreqHardLimit - -Default: - $wgCirrusSearchPhraseSuggestMaxTermFreqHardLimit = 0.6; - -Set the hard limit for $wgCirrusSearchPhraseMaxTermFreq. This prevents customizing -this setting in a way that could hurt the system performances. - -; $wgCirrusSearchPhraseSuggestAllowedMode - -Default: - $wgCirrusSearchPhraseSuggestAllowedMode = [ 'missing', 'popular', 'always' ]; - -List of allowed values for the suggest mode. - -; $wgCirrusSearchPhraseSuggestAllowedSmoothingModel - -Default: - $wgCirrusSearchPhraseSuggestAllowedSmoothingModel = [ 'stupid_backoff', 'laplace', 'linear' ]; - -List of allowed smoothing models. - -; $wgCirrusSearchPhraseSuggestPrefixLengthHardLimit - -Default: - $wgCirrusSearchPhraseSuggestPrefixLengthHardLimit = 2; - -Set the hard limit for $wgCirrusSearchPhraseSuggestPrefixLength. This prevents customizing -this setting in a way that could hurt the system performances. -(This is the minimal value) - ; $wgCirrusSearchPhraseSuggestSettings Default: - $wgCirrusSearchPhraseSuggestSettings = $wgCirrusSearchPhraseSuggestProfiles['default']; + $wgCirrusSearchPhraseSuggestSettings = 'default'; Set the Phrase suggester settings using the default profile. see profiles/PhraseSuggesterProfiles.php @@ -1476,28 +1437,6 @@ Customize certain fields with a specific implementation. Useful to apply CirrusSearch specific config to fields controlled by MediaWiki core. - -=== Deprecated settings === - -; $wgCirrusSearchPhraseSuggestMaxErrors - -Default: - $wgCirrusSearchPhraseSuggestMaxErrors = 2; - -NOTE: This setting is deprecated: update or create your own PhraseSuggester profile. - -Maximum number of terms that we ask phrase suggest to correct. -See max_errors on http://www.elasticsearch.org/guide/reference/api/search/suggest/ - -; $wgCirrusSearchPhraseSuggestConfidence - -Default: - $wgCirrusSearchPhraseSuggestConfidence = 2.0; - -NOTE: This setting is deprecated: update or create your own PhraseSuggester profile. - -Confidence level required to suggest new phrases. -See confidence on http://www.elasticsearch.org/guide/reference/api/search/suggest/ ; $wgCirrusSearchExtraIndexSettings diff --git a/includes/Api/ConfigDump.php b/includes/Api/ConfigDump.php index e3d3c1f..c14db45 100644 --- a/includes/Api/ConfigDump.php +++ b/includes/Api/ConfigDump.php @@ -81,6 +81,7 @@ 'CirrusSearchEnableArchive', 'CirrusSearchUseIcuFolding', 'CirrusSearchUseIcuTokenizer', + 'CirrusSearchPhraseSuggestProfiles', // All the config below was added when moving this data // from CirrusSearch config to a static array in this class 'CirrusSearchDevelOptions', diff --git a/includes/Hooks.php b/includes/Hooks.php index 42950dc..18d20fd 100644 --- a/includes/Hooks.php +++ b/includes/Hooks.php @@ -102,7 +102,6 @@ } self::overrideMoreLikeThisOptionsFromMessage(); - PhraseSuggesterProfiles::overrideOptionsFromMessage(); if ( $request ) { // Engage the experimental highlighter if a url parameter requests it @@ -119,7 +118,6 @@ self::overrideYesNo( $wgCirrusSearchAllFieldsForRescore, $request, 'cirrusUseAllFieldsForRescore' ); self::overrideUseExtraPluginForRegex( $request ); self::overrideMoreLikeThisOptions( $request ); - PhraseSuggesterProfiles::overrideOptions( $request ); RescoreProfiles::overrideOptions( $request ); FullTextQueryBuilderProfiles::overrideOptions( $request ); self::overrideSecret( $wgCirrusSearchLogElasticRequests, $wgCirrusSearchLogElasticRequestsSecret, $request, 'cirrusLogElasticRequests', false ); diff --git a/includes/Query/FullTextQueryStringQueryBuilder.php b/includes/Query/FullTextQueryStringQueryBuilder.php index 6a0458d..72798c9 100644 --- a/includes/Query/FullTextQueryStringQueryBuilder.php +++ b/includes/Query/FullTextQueryStringQueryBuilder.php @@ -2,10 +2,12 @@ namespace CirrusSearch\Query; +use CirrusSearch\PhraseSuggesterProfiles; use CirrusSearch\SearchConfig; use CirrusSearch\Searcher; use CirrusSearch\Search\SearchContext; use CirrusSearch\Extra\Query\TokenCountRouter; +use Elastica\Exception\RuntimeException; use MediaWiki\Logger\LoggerFactory; /** @@ -275,16 +277,18 @@ */ private function buildSuggestConfig( $field, $searchContext ) { // check deprecated settings - $suggestSettings = $this->config->get( 'CirrusSearchPhraseSuggestSettings' ); - $maxErrors = $this->config->get( 'CirrusSearchPhraseSuggestMaxErrors' ); - if ( isset( $maxErrors ) ) { - $suggestSettings['max_errors'] = $maxErrors; - } - $confidence = $this->config->get( 'CirrusSearchPhraseSuggestMaxErrors' ); - if ( isset( $confidence ) ) { - $suggestSettings['confidence'] = $confidence; + $profile = $this->config->get( 'CirrusSearchPhraseSuggestSettings' ); + if ( is_array( $profile ) ) { + // BC code to support profiles set as array in this config var + $suggestSettings = $profile; + } else { + $suggestSettings = $this->config->getElement( 'CirrusSearchPhraseSuggestProfiles', $profile ); + if ( !$suggestSettings ) { + throw new RuntimeException( "Unkown phrase_suggest profile $profile" ); + } } + $suggestSettings = PhraseSuggesterProfiles::overrideOptionsFromMessage( $suggestSettings ); $settings = [ 'phrase' => [ 'field' => $field, diff --git a/profiles/PhraseSuggesterProfiles.php b/profiles/PhraseSuggesterProfiles.php index 09ee5ff..117ac4b 100644 --- a/profiles/PhraseSuggesterProfiles.php +++ b/profiles/PhraseSuggesterProfiles.php @@ -22,102 +22,21 @@ */ class PhraseSuggesterProfiles { + const MAX_ERRORS_HARD_LIMIT = 2; + const MAX_TERM_FREQ_HARD_LIMIT = 0.6; /** - * Override Phrase suggester options ("Did you mean?" suggestions) - * - * @param \WebRequest $request + * @var string[] */ - public static function overrideOptions( $request ) { - global $wgCirrusSearchPhraseSuggestMaxErrors, - $wgCirrusSearchPhraseSuggestConfidence, - $wgCirrusSearchPhraseSuggestSettings, - $wgCirrusSearchPhraseSuggestMaxTermFreqHardLimit, - $wgCirrusSearchPhraseSuggestMaxErrorsHardLimit, - $wgCirrusSearchPhraseSuggestPrefixLengthHardLimit, - $wgCirrusSearchPhraseSuggestAllowedMode, - $wgCirrusSearchPhraseSuggestAllowedSmoothingModel, - $wgCirrusSearchPhraseSuggestReverseField; + private static $ALLOWED_MODE = [ 'missing', 'popular', 'always' ]; - Util::overrideYesNo( $wgCirrusSearchPhraseSuggestReverseField['use'], $request, - 'cirrusSuggUseReverse' ); - Util::overrideNumeric( $wgCirrusSearchPhraseSuggestSettings['max_errors'], $request, - 'cirrusSuggMaxErrors', $wgCirrusSearchPhraseSuggestMaxErrorsHardLimit ); - Util::overrideNumeric( $wgCirrusSearchPhraseSuggestSettings['confidence'], $request, - 'cirrusSuggConfidence' ); - Util::overrideNumeric( $wgCirrusSearchPhraseSuggestSettings['max_term_freq'], $request, - 'cirrusSuggMaxTermFreq', $wgCirrusSearchPhraseSuggestMaxTermFreqHardLimit ); - Util::overrideNumeric( $wgCirrusSearchPhraseSuggestSettings['min_doc_freq'], $request, - 'cirrusSuggMinDocFreq' ); - Util::overrideNumeric( $wgCirrusSearchPhraseSuggestSettings['prefix_length'], $request, - 'cirrusSuggPrefixLength', $wgCirrusSearchPhraseSuggestPrefixLengthHardLimit, false ); - $mode = $request->getVal( 'cirrusSuggMode' ); - if ( isset( $mode ) && in_array( $mode, $wgCirrusSearchPhraseSuggestAllowedMode ) ) { - $wgCirrusSearchPhraseSuggestSettings['mode'] = $mode; - } - - // NOTE: we do not allow collate_minimum_should_match to be customized, it'd be hard to parse. - Util::overrideYesNo( $wgCirrusSearchPhraseSuggestSettings['collate'], $request, 'cirrusSuggCollate' ); - - $smoothing = $request->getVal( 'cirrusSuggSmoothing' ); - if ( isset( $smoothing ) && in_array( $smoothing, $wgCirrusSearchPhraseSuggestAllowedSmoothingModel ) ) { - // We do not support linear_interpolation customization yet, should be added - // later if proven useful. - switch ( $smoothing ) { - case 'laplace' : - $wgCirrusSearchPhraseSuggestSettings['smoothing_model'] = [ - 'laplace' => [ - 'alpha' => 0.5 - ] - ]; - break; - case 'stupid_backoff' : - $wgCirrusSearchPhraseSuggestSettings['smoothing_model'] = [ - 'stupid_backoff' => [ - 'discount' => 0.4 - ] - ]; - break; - } - } - - // Custom discount for stupid_backoff smoothing model - if ( isset( $wgCirrusSearchPhraseSuggestSettings['smoothing_model']['stupid_backoff'] ) ) { - $discount = $request->getVal( 'cirrusSuggDiscount' ); - if ( is_numeric( $discount ) && $discount <= 1 && $discount >= 0 ) { - $wgCirrusSearchPhraseSuggestSettings['smoothing_model']['stupid_backoff']['discount'] = floatval( $discount ); - } - } - - // Custom alpha for laplace smoothing model - if ( isset( $wgCirrusSearchPhraseSuggestSettings['smoothing_model']['laplace'] ) ) { - $alpha = $request->getVal( 'cirrusSuggAlpha' ); - if ( is_numeric( $alpha ) && $alpha <= 1 && $alpha >= 0 ) { - $wgCirrusSearchPhraseSuggestSettings['smoothing_model']['laplace']['alpha'] = floatval( $alpha ); - } - } - - // Support deprecated settings - if ( isset( $wgCirrusSearchPhraseSuggestConfidence ) ) { - Util::overrideNumeric( $wgCirrusSearchPhraseSuggestConfidence, $request, 'cirrusSuggConfidence' ); - } - if ( isset( $wgCirrusSearchPhraseSuggestMaxErrors ) ) { - Util::overrideNumeric( $wgCirrusSearchPhraseSuggestMaxErrors, $request, 'cirrusSuggMaxErrors', - $wgCirrusSearchPhraseSuggestMaxErrorsHardLimit ); - } - } + const PREFIX_LENGTH_HARD_LIMIT = 2; /** * Override Phrase suggester options ("Did you mean?" suggestions) + * @param array $settings + * @return array */ - public static function overrideOptionsFromMessage() { - global $wgCirrusSearchPhraseSuggestMaxErrors, - $wgCirrusSearchPhraseSuggestConfidence, - $wgCirrusSearchPhraseSuggestSettings, - $wgCirrusSearchPhraseSuggestMaxTermFreqHardLimit, - $wgCirrusSearchPhraseSuggestMaxErrorsHardLimit, - $wgCirrusSearchPhraseSuggestPrefixLengthHardLimit, - $wgCirrusSearchPhraseSuggestAllowedMode; - + public static function overrideOptionsFromMessage( $settings ) { $cache = MediaWikiServices::getInstance()->getLocalServerObjectCache(); $lines = $cache->getWithSetCallback( $cache->makeKey( 'cirrussearch-didyoumean-settings' ), @@ -144,58 +63,51 @@ switch ( $k ) { case 'max_errors' : - if ( is_numeric( $v ) && $v >= 1 && $v <= $wgCirrusSearchPhraseSuggestMaxErrorsHardLimit ) { - $wgCirrusSearchPhraseSuggestSettings['max_errors'] = floatval( $v ); - // Support deprecated settings - if ( isset( $wgCirrusSearchPhraseSuggestMaxErrors ) ) { - $wgCirrusSearchPhraseSuggestMaxErrors = floatval( $v ); - } + if ( is_numeric( $v ) && $v >= 1 && $v <= self::MAX_ERRORS_HARD_LIMIT ) { + $settings['max_errors'] = floatval( $v ); } break; case 'confidence' : if ( is_numeric( $v ) && $v >= 0 ) { - $wgCirrusSearchPhraseSuggestSettings['confidence'] = floatval( $v ); - if ( isset( $wgCirrusSearchPhraseSuggestConfidence ) ) { - $wgCirrusSearchPhraseSuggestConfidence = floatval( $v ); - } + $settings['confidence'] = floatval( $v ); } break; case 'max_term_freq' : - if ( is_numeric( $v ) && $v >= 0 && $v <= $wgCirrusSearchPhraseSuggestMaxTermFreqHardLimit ) { - $wgCirrusSearchPhraseSuggestSettings['max_term_freq'] = floatval( $v ); + if ( is_numeric( $v ) && $v >= 0 && $v <= self::MAX_TERM_FREQ_HARD_LIMIT ) { + $settings['max_term_freq'] = floatval( $v ); } break; case 'min_doc_freq' : if ( is_numeric( $v ) && $v >= 0 && $v < 1 ) { - $wgCirrusSearchPhraseSuggestSettings['min_doc_freq'] = floatval( $v ); + $settings['min_doc_freq'] = floatval( $v ); } break; case 'prefix_length' : - if ( is_numeric( $v ) && $v >= 0 && $v <= $wgCirrusSearchPhraseSuggestPrefixLengthHardLimit ) { - $wgCirrusSearchPhraseSuggestSettings['prefix_length'] = intval( $v ); + if ( is_numeric( $v ) && $v >= 0 && $v <= self::PREFIX_LENGTH_HARD_LIMIT ) { + $settings['prefix_length'] = intval( $v ); } break; case 'suggest_mode' : - if ( in_array( $v, $wgCirrusSearchPhraseSuggestAllowedMode ) ) { - $wgCirrusSearchPhraseSuggestSettings['mode'] = $v; + if ( in_array( $v, self::$ALLOWED_MODE ) ) { + $settings['mode'] = $v; } break; case 'collate' : if ( $v === 'true' ) { - $wgCirrusSearchPhraseSuggestSettings['collate'] = true; + $settings['collate'] = true; } elseif ( $v === 'false' ) { - $wgCirrusSearchPhraseSuggestSettings['collate'] = false; + $settings['collate'] = false; } break; case 'smoothing' : if ( $v === 'laplace' ) { - $wgCirrusSearchPhraseSuggestSettings['smoothing_model'] = [ + $settings['smoothing_model'] = [ 'laplace' => [ 'alpha' => 0.5 ] ]; } elseif ( $v === 'stupid_backoff' ) { - $wgCirrusSearchPhraseSuggestSettings['smoothing_model'] = [ + $settings['smoothing_model'] = [ 'stupid_backoff' => [ 'discount' => 0.4 ] @@ -216,17 +128,18 @@ } // Apply smoothing model options, if none provided we'll use elasticsearch defaults - if ( isset( $wgCirrusSearchPhraseSuggestSettings['smoothing_model']['laplace'] ) && + if ( isset( $settings['smoothing_model']['laplace'] ) && isset( $laplaceAlpha ) ) { - $wgCirrusSearchPhraseSuggestSettings['smoothing_model']['laplace'] = [ + $settings['smoothing_model']['laplace'] = [ 'alpha' => $laplaceAlpha ]; } - if ( isset( $wgCirrusSearchPhraseSuggestSettings['smoothing_model']['stupid_backoff'] ) && + if ( isset( $settings['smoothing_model']['stupid_backoff'] ) && isset( $stupidBackoffDiscount ) ) { - $wgCirrusSearchPhraseSuggestSettings['smoothing_model']['stupid_backoff'] = [ + $settings['smoothing_model']['stupid_backoff'] = [ 'discount' => $stupidBackoffDiscount ]; } + return $settings; } } diff --git a/tests/integration/features/did_you_mean_api.feature b/tests/integration/features/did_you_mean_api.feature index 40084a9..f58fc9d 100644 --- a/tests/integration/features/did_you_mean_api.feature +++ b/tests/integration/features/did_you_mean_api.feature @@ -60,25 +60,3 @@ | -hastemplate:prize noble prize | -hastemplate:prize *nobel* prize | | boost-templates:"prize\|150%" noble prize | boost-templates:"prize\|150%" *nobel* prize | | noble prize prefix:n | *nobel* prize prefix:n | - - Scenario: Customize prefix length of did you mean suggestions - When I set did you mean suggester option cirrusSuggPrefixLength to 5 - And I api search for noble prize - Then there are no did you mean suggestions from the api - - Scenario: Customize prefix length of did you mean suggestions below the hard limit - When I reset did you mean suggester options - And I set did you mean suggester option cirrusSuggPrefixLength to 1 - And I api search for nabol prize - Then there are no did you mean suggestions from the api - - Scenario: Disable the reverse field - When I reset did you mean suggester options - And I set did you mean suggester option cirrusSuggUseReverse to no - And I api search for nabel prize - Then there are no did you mean suggestions from the api - - Scenario: When I use the collate option: awards suggest1 suggest4 returns no suggestion - When I set did you mean suggester option cirrusSuggCollate to yes - And I api search for awards suggest1 suggest4 - Then there are no did you mean suggestions from the api diff --git a/tests/integration/features/dump_config.feature b/tests/integration/features/dump_config.feature index fc85cf1..eb4aad5 100644 --- a/tests/integration/features/dump_config.feature +++ b/tests/integration/features/dump_config.feature @@ -2,7 +2,6 @@ Feature: You can dump CirrusSearch's configuration Scenario: You can dump CirrusSearch's configuration When I dump the cirrus config - Then the config dump contains CirrusSearchPhraseSuggestMaxErrors - And the config dump contains CirrusSearchNamespaceWeights + Then the config dump contains CirrusSearchNamespaceWeights And the config dump text does not contain Password And the config dump text does not contain password diff --git a/tests/integration/features/step_definitions/page_steps.js b/tests/integration/features/step_definitions/page_steps.js index 209bb3c..340bb9a 100644 --- a/tests/integration/features/step_definitions/page_steps.js +++ b/tests/integration/features/step_definitions/page_steps.js @@ -238,10 +238,6 @@ if ( qiprofile ) { options.srqiprofile = qiprofile; } - // This is reset between scenarios - if ( this.didyoumeanOptions ) { - Object.assign(options, this.didyoumeanOptions ); - } let stepHelpers = this.stepHelpers; if ( wiki ) { @@ -289,15 +285,6 @@ return withApi( this, () => { expect( this.apiError.info ).to.equal( expected_error.trim() ); } ); - } ); - - When( /^I reset did you mean suggester options$/, function () { - delete this.didyoumeanOptions; - } ); - - When( /^I set did you mean suggester option (.+) to (.+)$/, function (varname, value) { - this.didyoumeanOptions = this.didyoumeanOptions || {}; - this.didyoumeanOptions[varname] = value; } ); Then( /^there are no did you mean suggestions from the api$/, function () { diff --git a/tests/integration/features/support/hooks.js b/tests/integration/features/support/hooks.js index 5839932..aac1121 100644 --- a/tests/integration/features/support/hooks.js +++ b/tests/integration/features/support/hooks.js @@ -230,24 +230,8 @@ 'Rrr Word 3': '#REDIRECT [[Noble Somethingelse3]]', 'Rrr Word 4': '#REDIRECT [[Noble Somethingelse4]]', 'Rrr Word 5': '#REDIRECT [[Noble Somethingelse5]]', - 'Nobel Gassez': '#REDIRECT [[Noble Gasses]]', - 'my suggest1 suggest2': 'list of grammy awards winners', - 'my suggest2 suggest3': 'list of grammy awards winners', - 'my suggest3 suggest4': 'list of grammy awards winners', - 'my suggest4 suggest5': 'list of grammy awards winners', - 'my suggest5 suggest6': 'list of grammy awards winners', - 'my suggest6 suggest1': 'list of grammy awards winners', - 'suggest1 suggest2 suggest3': 'list of grammy awards winners', - 'suggest2 suggest3 suggest4': 'list of grammy awards winners', - 'suggest3 suggest4 suggest5': 'list of grammy awards winners', + 'Nobel Gassez': '#REDIRECT [[Noble Gasses]]' }; - // TODO: investigate getting rid of this - for ( let i = 1; i <= 30; i++ ) { - edits['Grammy Awards ed. ' + i] = 'grammy awards'; - } - for ( let i = 1; i <= 14; i++ ) { - edits['Grammo Awards ed. ' + i] = 'bogus grammy awards page'; - } return runBatch( this, false, { edit: edits } ); } ); -- To view, visit https://gerrit.wikimedia.org/r/402071 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Id76389c5c1a640bad7175f5507b7abd7f7be4e7f Gerrit-PatchSet: 5 Gerrit-Project: mediawiki/extensions/CirrusSearch Gerrit-Branch: master Gerrit-Owner: DCausse <dcau...@wikimedia.org> Gerrit-Reviewer: Cindy-the-browser-test-bot <bernhardsone...@gmail.com> Gerrit-Reviewer: DCausse <dcau...@wikimedia.org> Gerrit-Reviewer: EBernhardson <ebernhard...@wikimedia.org> Gerrit-Reviewer: Gehel <guillaume.leder...@wikimedia.org> Gerrit-Reviewer: Smalyshev <smalys...@wikimedia.org> Gerrit-Reviewer: Tjones <tjo...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits